2019-01-01から1年間の記事一覧

Railsのbelongs_toによるバリデーションと外部キー制約って重複しているような気がする

表題のとおりなのですが。 class Post < ApplicationRecord belongs_to :user end ↑のように書いたときに、Rails5からは自動でvalidation_presence_of :userとしたのと同じになります。postをバリデーションするときにuserの存在をチェックする必要があるの…

Rails 6時代のCredentialsをどうやって書くのが一番スマートなのか

Rails6ではcredentials.yml.encが複数の環境で作れるようになりました*1。staging環境などでもCredentialsが使えてべんり!となったのだけどdevelopment環境やtest環境の秘密の文字列はどのようにするべきなのでしょうか。たぶんRails公式ではこういう書き方…

実行時間が長いコマンドが終了したら教えてほしい

macの話。 実行時間が長いコマンドを走らせて待っている間に他のことを始めてしまい、いつのまにかコマンドを実行していることそのものを忘れてしまう、という事が多かったので、終わったら通知が来るといいな、と思ったのでした。 調べたらapple script経由…

webpackerでデフォルト以外のenvironmentを使いたい場合

"environment"が指すものがRAILS_ENVとNODE_ENVの2つあり、かつwebpackerはその両方を利用するのでわかりづらい。 config/webpacker.yml RAILS_ENVに対応したキーの設定を使う config/webpack/*.js NODE_ENVに対応したキーのファイルを使う。のだけど注意点…

SentryやRollbarに通知する内容を2つに分けたい

Railsプロジェクトでエラーの管理をするとき、SentryかRollbarを使うことが多いはず(以下エラー管理システムと呼ぶ) エラー管理システムには、システムでの想定外の挙動を通知させたい 「システムでの想定外の挙動」を分けるとおおきく次の2つ いわゆるバグ …

循環参照してるときのsaveにおけるActive Recordの挙動

class A < ApplicationRecord belongs_to :b end class B < ApplicationRecord belongs_to :a end a = A.new b = B.new a.b = b b.a = a a.save みたいなときどのように動くのかを調べた。 ↓このへんを参考にした rails/autosave_association.rb at master ·…

system specでNet::ReadTimeoutになったら

headless chromeを利用していて、超長い文章をフォームに入力しようとするとNet::ReadTimeoutでこける。そもそも超長い文章をフォームに入れないようにするべきだけど、他に方法がない*1か微妙な場合はtimeoutの間隔を伸ばすことで対応できる。 Capybara.reg…

時々失敗するE2Eテストの原因を計測して判別する方法について

Railsをお仕事で使っている方はみんなE2Eのテストで時々失敗するやつに苦労しているんじゃないかなと思います。 @mtsmfmさんの発表スライドが詳しいので基本的にはこれで大体のケースには対応できるはず。 スライド読むのがめんどくさい人向けに、一部抜粋か…

turbolinks環境でCSPを導入しようとしたらテストがコケた

CSPを導入しようとして、まず様子見でcontent_security_policy_report_only = trueとしていろいろ試していたらテストが落ちるようになった。content_security_policy_report_only = trueだとjsやcssは普通に適用されるはずなのにおかしい。 落ちているテスト…

resize_to_fitオプションはどこからきたのか

Railsのmasterのコードを読んでいて、コメント行でvariantメソッドにresize_to_fitオプションを渡しているのが目についた。 rails/variant.rb at master · rails/rails というのは、ImageMagickのオプションにresize_to_fitに相当するものがなかったから。mi…