Open3
Rails 7.2.2.1 の secret_key_base の挙動

- https://github.com/rails/rails/blob/v7.2.2.1/railties/lib/rails/application/configuration.rb#L501-L521
- https://api.rubyonrails.org/v7.2/classes/Rails/Application.html#method-i-secret_key_base
- https://railsguides.jp/7_2_release_notes.html#railties-削除されたもの
SECRET_KEY_BASE
環境変数 or credentials.yml の値は、generate_local_secret?
が false となる場合のみ使用される。
generate_local_secret?
は、 Rails.env.local?
が true となるか、 SECRET_KEY_BASE_DUMMY
が設定された環境ではtmp/local_secret.txt
が生成されて使用される。その場合、 SECRET_KEY_BASE
は使われない。

並行稼働するCIのテスト環境でうまくいったりうまくいかなかったりすることがあり、以下のようなエラーになる。
tmp/local_secret.txt
が同時に作られると起こるのかな?この場合、tmp/local_secret.txt を適当に作っちゃえば防げる。
ArgumentError: `secret_key_base` for test environment must be a type of String` (ArgumentError)

これはおそらく generate_local_secret
が2つのプロセスかつ同じファイルシステムで同時に実行されると、片方のプロセスがFileの作成中にもう片方がFileを取得して、中身がないファイルをキーとして使う、という挙動をしていると思う。