プログラミング -> Ruby on Rails

CircleCI 上での System Spec (RSpec) が unknown error: DevToolsActivePort file doesn't exist と怒られて失敗する場合

結論 Headless Chrome の設定の箇所において、options で no-sandbox を指定しましょう。例えば以下のようになります。 config.before(:each) do |example| driven_by :selenium, using: :headless_chrome, screen_size: [1400, 1400], options: { args: ['n…

Capybara + Headless Chrome (System Spec) で Basic認証 を通過する方法

結論 username と password のところは実際には環境変数を使ったほうがいいでしょう visit_with_http_auth root_path における root_path はアクセスしたいページの path を入れましょう require 'rails_helper' def visit_with_http_auth(path) username = …

Visual Studio Code の デバッガ で Rails のデバッグをする

結論 1. 以下の二つの gem をインストールします ruby-debug-ide debase Gemfile に書く場合は development 環境の部分に書きます*1。 2. VSCode の デバッグメニュー で「歯車」アイコンをクリックし「環境の選択」から「Ruby」を選びます Ruby が選択肢に…

Capistrano で SSHKit::Runner::ExecuteError というエラーメッセージが出たときに何をすべきか

結論 ログを見る。 ありがちなミス SSH のログイン周りとかそういうのは関係ないです。 私の場合は、コンフリクト時のメッセージがコードにそのまま残っていて、単なる SyntaxError であったというひどい現象が原因でした。いずれにせよログを見ればすぐに分…

Slim の中に生の HTML を書くことはできる

結論 標題のとおりです。 実例 以下はちゃんと期待通りの動作をします。 <p>Hello, World!</p> = 'Hello, Slim!' 補足 もちろん ERB の記法は使えません(そのまま出力される)。

Rails で Gon gem を使った場合に Uncaught ReferenceError: gon is not defined というエラーがコンソールに出る場合

結論 <%= include_gon %> は Turbolinks のタグより前に配置する。 補足 トラフィック的にどうなの、という問題はあるかと思います。

Repro Tech: Long Life RailsApps の雑なまとめ

結論 読みやすくすること テストしやすくすること 最も大事なことは「それを行うことでユーザによりよい価値やサービスを届けられるようになること」 Repro Tech: Long Life RailsApps これです。 当日の発表資料 全員の方の発表資料が公開されています。 当…

よちよち.rb & Sendagaya.rb 合同開催「よちがや.rb」 〜REST アーキテクチャを理解しよう会〜 に行ってきました

よちよち.rb & Sendagaya.rb 合同開催「よちがや.rb」 〜REST アーキテクチャを理解しよう会〜 2019/01/07 に開催された「よちよち.rb & Sendagaya.rb 合同開催「よちがや.rb」 〜REST アーキテクチャを理解しよう会〜」に行ってきました。内容の詳細につい…

Capistrano で Rails をデプロイする際に bundle:install で Bundler が実行できないとき

結論 Gemfile.lock に書いてある Bundler のバージョンと、Capistrano が実行しようとする Bundler のバージョンが一致しない*1から。 前提条件 rbenv を使っていて Ruby は正しくインストールされている 上記のバージョンの Ruby にて Bundler もインストー…

Rails の production 環境で app/assets/images 配下に置いた画像が image_tag ヘルパで表示されない場合

結論の一つ config/environments/production.rb の中にある config.assets.compile = false を config.assets.compile = true にする なぜ false だと表示されないか 表示させる対象の画像が見つからないから true にすることによるデメリットは何か おそお…

MySQL に対して rails dbconsole する際に database.yml の設定が dotenv で書かれていると接続できない(っぽい)

状況 おま環の疑いが高いです。 結論 config/database.yml に以下のように MySQL の設定を書いていたとします。環境変数は dotenv で定義しているとします。 development: adapter: mysql2 host: <%= ENV['MYSQL_HOST'] %> port: <%= ENV['MYSQL_PORT'] %> u…

Rails の development 環境 をデプロイしたら CSS が効かないとき

結論 config/environments/development.rb の中の config.assets.debug を config.assets.debug = false にしてデプロイする。 答え

Sidekiq::Cron::Tasks をローカル環境で使う際の注意点

Sidekiq::Cron::Tasks ローカル環境で使う場合 開発時にローカル環境で Sidekiq::Cron::Tasks を用いる場合に以下の点でハマりました。 1. ジョブ一覧を更新するためには sidekiq_cron:load を実行する Capistrano で自動でジョブを更新してくれないので、si…

Sidekiq-Cron を Rails で使うときの注意点(その2)

その1 に続いて、Sidekiq-Cron を使うときに少しハマったところを書きます。 1. 実行できるオブジェクトやクラスの形式には制限がある 実行するオブジェクトやクラスの形式は Sidekiq と同等でなければいけません。詳しくは公式ドキュメントに記載されていま…

Sidekiq-Cron を Rails で使うときの注意点(その1)

Sidekiq-Cron こちらです。 注意点 YAML に設定を書いて*1、initializers/ 配下で起動時に呼び出すやり方の場合の注意点を書きます。公式ドキュメント における「What objects/classes can be scheduled」→「or from YML (same notation as Resque-scheduler…

Sidekiq-Cron で定期実行しようとしたら初回だけ実行されるが2回目以降が実行されずに4時間ハマった話

結論 gem のバージョンを以下のようにちゃんと指定しましょう。 gem 'sidekiq-cron', '~> 1.0.4'

Capistrano で whenever をデプロイしようとしたらドハマリした

前提 Capistrano だとか whenever だとかの固有名詞は本質的に関係ありません。 結論 config/schedule.rb の中に、シェルのコマンドに依存する記述を含めていたところ、ほぼまっさらなデプロイ先にデプロイしたらエラーが出た。 具体的には こちらの記事 の…

Rails の before_action を特定のアクションだけに適用したい場合

結論 only: という引数を追加する*1。 実例 class FoobarController < ApplicationController before_action :nanika_no_action, only: [:tokutei_no_action] (省略) end *1:配列

Slim で任意の属性を付与する

結論 Slim でこう書くと、 .col.s12 foo='bar' hoge='fuga' こういう HTML が生成されます <div class="col s12" foo="bar" hoge="fuga"></div>

Rails を Capistrano でデプロイした際に Puma が再起動できなくて 3時間 ハマった話

前提 詳しい説明は公式ドキュメントを参照するなどして下さい。投げやりですいません……*1。 環境 Ruby 2.5.3 Rails 5.2.1 Capistrano Version: 3.11.0 (Rake Version: 12.3.1) *1:あまりにハマりすぎて疲れてしまいました

Capistrano で Rails をデプロイするときに Yarn はシステムグローバルに入れなければいけないのか

背景 ndenv で入れた npm で yarn をユーザグローバルにインストールして*1、それをデプロイ時に用いたい。 結果 ダメっぽいです。どうしても /usr/bin/env を見に行ってしまいます。30分ほど調べましたがスマートな解決策は無いようなので、これ以上ハマっ…

Capistrano で Rails をデプロイしても一向に assets:precompile してくれない

結論 対象サーバの roles の設定中に web が含まれていないから。 参考(答え) 余談 こんなんで 2時間 近くハマってしまって悲しすぎる。

Capistrano で assets:precompile が通らないため 5時間 溶かした話

結論 デプロイの際に持ってくるブランチに対して全くプッシュしていなかったから。 つまり、ローカルでガシガシコミットしていてそのままデプロイしていたところ、引っ張ってくるファイルは何ら更新されていないため、ローカルファイルと差異が存在していて …

Rails でフォームを submit したときに URL に付与される commit=hogehoge を除外する

状況 フォームを submit した先の URL が例えば以下のようになった場合に、commit=hogehoge の部分を除外したい。 http://localhost:3000/pages/search?search_query=abcdefg&commit=hogehoge 結論 submit メソッドのオプションに name: nil を指定する。 Sl…

Rails の form_with で「utf8=✓」を消す

結論 form_with のオプションに skip_enforcing_utf8: true を指定する。 Slim での例 = form_with url: 'foobar', skip_enforcing_utf8: true do |f|

rails c した際に fileutils の警告が大量に出た場合

結論 以下の手順を踏みます。 $ gem uninstall fileutils $ gem update fileutils --default 以下のように返ってくれば OK です。 $ gem list | grep fileutils fileutils (default: 1.1.0, default: 1.0.2) これで rails c の際に冗長な警告が出なくなるで…

Rails に reCAPTCHA を導入する

結論 公式サイトで登録をする*1 reCAPTCHA の gem を入れる 環境変数に RECAPTCHA_SITE_KEY と RECAPTCHA_SECRET_KEY の値を設定する formタグ の中に <%= recaptcha_tags %> を挿入する 結果を得る 手順 1. 公式サイトで登録をする 特に難しいところはない…

Active Record で「子(「1対多」の「多」)」から「親(「1対多」の「1」)」のレコードを取得する

前提 アソシエーションは設定済みとします。 テーブル構成 以下のようなテーブル構成とします。User が「親(「1対多」の「1」)」で、Article が「子(「多対1」の「1」)」です。 User id name created_at updated_at Article id user_id content created_…

Sidekiq が原因で ActiveRecord::ConnectionTimeoutError: could not obtain a connection from the pool となりメモリを食い潰す場合

結論 参考 https://saitoxu.io/2018/03/30/sidekiq-introduction.html 現象の起こし方 この現象を起こすには、例えば sidekiq-scheduler を使って短い間隔に MySQL を叩きまくるスケジュールを組めば再現できるかと思います。

Rails (Action Mailer) で複数のファイルを添付する方法

結論 attachments*1 のキーと値を複数定義すればよいです。 実例 attachments['foo.txt'] = File.read('tmp/hello_world.txt') attachments['bar.txt'] = File.read('tmp/hello_ruby.txt') attachments['foobar.txt'] = File.read('tmp/hello_rails.txt') こ…

Powered by はてなブログ