- 1. 【Rails】【Rspec】トランザクションのロールバックをテストする
- 2. 【Rails】Rails6 + docker メール設定エラー 「Errno::EADDRNOTAVAIL (Cannot assign requested address – connect(2) for “localhost” port 1025)」
- 3. トランザクションの例外処理で参考にした記事(自分用)
- 4. 【個人開発】飲み方やおつまみの相性から直感的にウイスキーを探せるサービスを作った話?
- 5. 【Rails】ランダムにデータ抽出する(アンチパターンに注意)
- 6. herokuとRDSを接続できないときの対処法
- 7. クラスとインスタンスとオブジェクト
- 8. 【rails】遷移元のページの種類によって処理を変える
- 9. 【Rails】URLにaタグを付ける
- 10. 【Rails】Sorceryで外部認証 〜LINE編〜
- 11. database “…” is being accessed by other userが出た時
- 12. firebaseAuthの開始方法およびfschuindt / firebase_id_tokenの実装をみる
- 13. 【Rails】Sorceryで外部認証 〜Google編〜
- 14. Gem「google_drive」を使ってスプレットシートを更新する(2022年7月版)
- 15. 【Rails】【SQL】子モデルの最新レコードを基準に親モデルをソートする方法
- 16. rails7でomniauthで認証しようとしたらエラーばっかりでうまくいかなかった
- 17. 【Rails】dotenv-railsの導入
- 18. ZoomAPI(Server-to-server OAuth)でミーティング作成の自動化[技術検証]
- 19. rails sができない(Address already in use – bind(2) for “127.0.0.1” port 3000 )
- 20. deviseのサインアップにenumを使用したら, ‘0’is not a validとエラーが出る
【Rails】【Rspec】トランザクションのロールバックをテストする
## はじめに
未経験からエンジニアに転職して、3ヶ月経つエンジニアです。
![自己紹介.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/916052/d4c50641-f785-5708-3e16-c93830a1d41d.jpeg)
今回は業務で経験した「トランザクションのロールバックをテストする」方法について書きます。## トランザクションとは
>ブロック内のすべての処理が正常に行われた場合に保存
エラーが発生した場合は、ロードバックhttps://railsdoc.com/page/transaction
これだけだとわかりませんよね、、
↓の記事などが参考になるかもしれません!https://qiita.com/tomokiyao/items/8697b523a0a5b9cf0bec
## テストしていく
トランザクションを使っているということは、重要な処理をしている可能性が高いです。
つまり、コードにバグが含まれていると取り返しのつかないことになり得る危険性が高いともいえます
【Rails】Rails6 + docker メール設定エラー 「Errno::EADDRNOTAVAIL (Cannot assign requested address – connect(2) for “localhost” port 1025)」
## 概要
Rails6とdocker環境でメール設定をした際に発生したエラーの備忘録です。### 環境
– ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [x86_64-linux]
– Rails 6.1.6
“`docker-compose.yml
# 中略
mailcatcher:
image: schickling/mailcatcher
ports:
– 1080:1080
– 1025:1025
“`## エラー発生時のメール設定
“`development.rb
config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: ‘localhost’, port: 1025 }
config.action_mailer.raise_delivery_errors = true
“`### エラー内容
– Railsサーバ側
トランザクションの例外処理で参考にした記事(自分用)
https://prograshi.com/framework/rails/rescue_rais_retry_ensure/
【個人開発】飲み方やおつまみの相性から直感的にウイスキーを探せるサービスを作った話?
![OGP.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1834267/71b87264-5ed3-7ff9-1ef0-41a88850138a.png)
飲み方やおつまみの相性、香りの強さ、口当たりの軽さなど
直感的な要素からウイスキーを探せるサービスをリリースしました!?▼サービスURL
https://malt-mate.jp▼GitHub
https://github.com/tarakish/whiskey_database# はじめに??
はじめまして!駆け出しへべれけエンジニアの[みや](https://twitter.com/tarakish_23)と申します?
ウイスキーについても駆け出しのためネットで情報を探すことが多いのですが、
フレーバー?歴史?タイヤのような香り?カスクストレングス?etc…前提知識が必要だったり、
そもそもの情報量が多すぎて分からなくなることが多いな〜と感じてました。そこで
– 相性のいい飲み方やおつまみなど、**飲む際に実際に考えるような
【Rails】ランダムにデータ抽出する(アンチパターンに注意)
# はじめに
DBからランダムに1件データを抽出するというお話です。この機能を実現するにあたっては、初学者でも比較的簡単にできると思います。
しかし、この前たまたま目にした記事が「これは怖い予感がする?」という内容だったので、実際に怖さを検証してみました。# どんな怖いコード?
以下が怖いコードの実例です。
“`ruby
sample_post = Post.all.shuffle.first
“`全てのレコードを取得してからサンプリングしてるので、`時間がかかる` & `メモリを消費する` という問題があります。
(ちなみに`shuffle.first`は`sample`に置き換えられるという小さな問題もあります)数百レコード程度であれば、目に見えるほどの影響はないかもしれません。
サンプル範囲が狭い場合であればこのようなやり方でも許容できるかもしれませんが、基本的には無駄な時間とメモリの消費は避けるべきです。しかし実際にどのぐらい問題があるか体験したことがなかったので、検証してみようと思います。
# 検証してみる
100万件レコードがあれば結構な問題にな
herokuとRDSを接続できないときの対処法
herokuとrds繋げるときに色々困ったので備忘録。
最終的な目標はherokuの環境変数であるDATABASE_URLを入力することです。### RDS側のでやること
– RDSインスタンスのエンドポイントをメモっておく
– 「DBインスタンスの変更」→「接続」にて、セキュリティグループの確認。ここで設定をミスると全くRDSに接続できなくなる
– 「DBインスタンスの変更」→「接続」→「追加設定」にて、パブリックアクセスを許可するかどうかを確認### herokuのDATABASE_URLの書き方(mysqlの場合)
– `mysql2://username:password@hostname/dbname`
– ここでのusernameとパスワードはmysql内のユーザとパスワードのこと。IAMユーザのことではないので注意
– hostnameはRDSインスタンスのエンドポイントを記入
– dbnameはmysqlに入って`show databases;`コマンドで確認可能
クラスとインスタンスとオブジェクト
## 概要
概念的で抽象的な物が苦手なので、これを機にまとめようと思います
説明するのはRubyですけど、どの言語において共通して使える考え方だと思います### オブジェクトとは
そもそもオブジェクトとはなんだろう
Rubyの世界は全てのものがオブジェクトになります
配列ハッシュ以外にもnilもオブジェクトに当たります
つまり全部オブジェクトです
ただ抽象的すぎて分からないですよね
なのでたこ焼きで考えましょう
たこ焼きは紅生姜や青さ、鰹節、マヨネーズ、油、たこ、たこ焼き粉などの材料から作られています
つまりこれら全部がオブジェクトになります### クラスとは
次にクラスとはどのようなものでしょうか?
こちらはオブジェクトを作るための設計書になります
簡単に示すと型です
こちらもたこ焼きで表すと分かりやすいです
1個ずつたこ焼きを作っていたらお客さんが怒ってしまいますので、一気にたくさん作りたいと思ったたこ焼き屋さんの店長さんはたこ焼き器を作りました
こうすることで一気に焼けてお客様を待たせることなく提供できます
またたこ焼き器を作ったことで、具材にチョコを入れたデザートたこ
【rails】遷移元のページの種類によって処理を変える
遷移元ページが違うなら処理を変えたい。そんな時に利用するメソッドを紹介。
“`ruby
request.referer
#中身
“http://localhost:3000/〜(略)”
“`
これで遷移元のリクエストパラメーターを取得できます。中身はurlとなっています。個人的なおすすめは正規表現で利用するmatchを使い、条件分岐させることです。
“`ruby
if request.referer.match(/issue/)
処理①
else
処理②
end
“`
上記の場合だと、urlに”issue”が含まれている場合は処理①を実行し、それ以外は処理②を実行します。これで、ある特定のページから来た場合には、他のページと違った処理をすることができます。
### 参考サイト
https://railsdoc.com/page/requesthttps://docs.ruby-lang.org/ja/latest/doc/spec=2fregexp.html
【Rails】URLにaタグを付ける
RailsはURLテキストを入れて投稿しても、自動的にリンクを付与してくれません( ꒪⌓꒪Ⅲ)
ユーザーに全く優しくないので、
URLリンク先に遷移できるようにしましょう!まずは、ヘルパーにメソッドを書いていきます。
ヘルパーは、**application_helper.rb** or **コントローラー名_helper.rb**に記述可能です。
今回は、複数箇所で使用したいので、application_helper.rbに書いていきます!“`ruby:helpers/application_helper.rb
module ApplicationHelper
require “uri”def text_url_to_link text
URI.extract(text, [‘http’,’https’]).uniq.each do |url|
sub_text = “”
sub_text << "” << url << "”
【Rails】Sorceryで外部認証 〜LINE編〜
# はじめに??
現在個人開発しているサービスにて
SorceryのExternalモジュールを利用して外部認証を実装する際に
LINE認証を実装している例がなかったため、備忘録も兼ねて記します。※下記の記事にてGoogle認証についても解説しています!
内容に一部重複している部分があるため、実装済みの部分に関しては都度読み飛ばしていただければと思います。https://qiita.com/tarakish/items/8e61106fa2473a9d97e8
### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 sorcery `0.16.2`### 想定読者?
– sorceryのexternalモジュールでLINE認証を実装したい人### 前提?
– [Simple Password Authentication](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)でのメールアドレス認証機能は実装済みであること。
database “…” is being accessed by other userが出た時
rails db:resetの際に
database “…” is being accessed by other userが出た時の対処法を説明します。PostgreSQLを再起動させたらrails db:resetは正常に実行される。
“`
macの場合
停止
brew services stop postgresql
起動
brew services start postgresql
その後
rails db:reset
“`
firebaseAuthの開始方法およびfschuindt / firebase_id_tokenの実装をみる
# 概要
RailsでfirebaseAuthのJWTを用いて認証するまでの流れです。# firebaseAuth
1. firebaseプロジェクト作成
1. firebaseAuth開始
## (APIを直接実行する場合)
SDKではなくAPIを直接叩きたい場合は以下手順。(ユーザー作成APIの例)### APIキー
プロジェクトの概要の右のアイコンから開ける
`https://console.firebase.google.com/u/0/project/{project_id}/settings/general`
【Rails】Sorceryで外部認証 〜Google編〜
# はじめに??
現在個人開発しているサービスにて
SorceryのExternalモジュールを利用して外部認証を実装する際に
google認証を実装している例がなかったため、備忘録も兼ねて記します。※下記の記事にてLINE認証についても解説しています!
内容に一部重複している部分があるため、実装済みの部分に関しては都度読み飛ばしていただければと思います。https://qiita.com/tarakish/items/a4c73104375878ad61c5
### 環境?
– Ruby `3.0.1`
– Ruby on Rails `6.1.4.4`
– 【gem】 sorcery `0.16.2`### 想定読者?
– sorceryのexternalモジュールをベースとしてgoogle認証を実装したい人### 前提?
– [Simple Password Authentication](https://github.com/Sorcery/sorcery/wiki/Simple-Password-Authentication)でのメールアドレス認証機能は実
Gem「google_drive」を使ってスプレットシートを更新する(2022年7月版)
# 使用するGem
https://github.com/gimite/google-drive-rubyこれを利用します。How to Installにある通り、Gemfileに追加するなどしてインストールしてください。
ちなみに、Google純正のGemは[こちら](https://github.com/googleapis/google-api-ruby-client)。google_driveは純正GemのラッパーGemのようです。
# Google認証(2022年7月版)
認証の方法は[ここ](https://github.com/gimite/google-drive-ruby/blob/master/doc/authorization.md)に記載がありますが、少し古くこの通りで二はできません。特に、このOtherが2022年7月現在は消えており、使用することができません。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/192137/1509ac7f-ddbd
【Rails】【SQL】子モデルの最新レコードを基準に親モデルをソートする方法
大阪でRailsを中心に学習している薬剤師エンジニア(初学者)こと、ヨマ([@yoma_2003](https://twitter.com/yoma_2003))です!
Railsで`子モデルの最新レコード`を基準に`親モデルをソート`する方法をまとめます。※おことわり※
断定口調でまとめますが、初学者であるため間違い等あればご指摘頂けると嬉しいです。# はじめに
Railsで次のような親子関連を持ったモデルがあったとします。“`character.rb
class Character < Application Record has_many :topics end ``` ```topic.rb class Topic < ApplicationRecord belongs_to :character end ``` ### charactersテーブル | id | name | describe | |:--:|:----:|:----------:| | 1 | 田中 | 初学者 | | 2 | 鈴木 | Rails学習中 | |
rails7でomniauthで認証しようとしたらエラーばっかりでうまくいかなかった
# 最終的にはちゃんとできました。
他の言語にうつつを抜かしている間にRubyは3出てるし、railsは7系出てるしでまさに青天の霹靂。
ホスティングする環境によって最近使ってるdotnetをあまり使いたくなかったので、久々にrails触った。# やりたいこと
ユーザー認証まわりはCognitoにおまかせして、さっと作りたかった。## 参考にさせていただきました
こちら
https://qiita.com/yhirano55/items/272125c3ce3d7873002e
ありがとうございます。## ですが動かない
### 最初は「OmniAuth::AuthenticityError Forbidden」が出る
![スクリーンショット 2022-07-07 22.02.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/120789/7ca80e2f-48e9-6e64-c133-6871387d0779.png)
これですね。
これは
`gem ‘omniauth-rails_c
【Rails】dotenv-railsの導入
# はじめに
* 学習の覚え書として書いています
* 自己解釈ですので参考程度にご覧ください# dotenv-rails とは
* 環境変数を管理できるgem
* 環境変数 → **公開したくない情報(値)**
(メールアドレスやパスワードなど)つまりGitなどにアップする際、公開したくない情報(値)をdotenv-rails(gem)で管理することができます。
# dotenv-rails 使用手順
①dotenv-railsの導入
②環境変数を記述するファイルを作成(.env)
③環境変数の記述
④ソースコード内で環境変数を使用
⑤GitHubの公開設定(.gitignoreに.envを追加)## ①dotenv-railsの導入
* gemfileに追記(一番下の行に **gem ‘dotenv-rails’** を追記)
* ターミナルで **$ bundle install** を実行## ②環境変数を記述するファイル **.envファイル**を作成
* ターミナルで **$ touch .env** を実行
(.envは既定のファイル名なので誤字が無いよ
ZoomAPI(Server-to-server OAuth)でミーティング作成の自動化[技術検証]
[バヅクリ](https://buzzkuri.com)CTOの合原です。
ひさびさにqiita投稿です。いいタイミングでこちらのキャンペーンも開催していたので、相乗りさせていただきました :sweat_smile:
https://qiita.com/official-campaigns/engineer-festa/2022# やったこと
今回は、Railsアプリケーションからの利用を想定していたため、
Server-to-server OAuthアプリにて、実装Tryしてみました。
※Server-to-server OAuthの事例があまり見つからなかったのもあったので w—
# 背景(こちらは読み飛ばしていただいても:smiley_cat::ok_hand: )
当社の主力事業[バヅクリ](buzzkuri.com)では、オンラインでのチームビルディングや研修をアソビを取り入れた、非常にユニークなプログラムを用意して、サービスとして提供しています。その際、Zoomミーティング機能を主に活用しています。
詳細は割愛しますが、これまで、イベント開催が確
rails sができない(Address already in use – bind(2) for “127.0.0.1” port 3000 )
いつも通りrails sをしたら上記のエラーが出たので解決方法を載せておきます
現在動いてるRubyのプロセスを確認
“`
$ ps -ax | grep ruby
“`このように表示される
“`
49551 ?? 0:00.00 /Users/UserName/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rb-fsevent-0.11.1/bin/fsevent_watch –format=otnetstring –latency 0.1 /Users/UserName/Rails_product/you_conect/config/locales
49552 ?? 0:00.00 /Users/UserName/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rb-fsevent-0.11.1/bin/fsevent_watch –format=otnetstring –latency 0.1
“`
動いてるプロセスを終了する
“`
例: kill 49551
$
deviseのサインアップにenumを使用したら, ‘0’is not a validとエラーが出る
## やりたいこと
– Railsのユーザ認証を行うgem deviseでサインアップするモデルのカラムをenumにしたい
– 該当するモデルのカラムはInteger型“`ruby
# app/models/user.rb
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable enum user_type: { user: 0, circle: 1 } end ``` ```ruby # db/schme.rb ActiveRecord::Schema[7.0].define(version: 2022_07_02_083714) do create_table "users", charset: "utf8mb4", collation: "utf8mb4_0900_ai_ci", force: :cascade do |t| t