概要
複数人でRailsプロジェクトに携わる際に、最初にハマった落とし穴の備忘録
環境
macOS 10.13.6
Rails 6.0.0
Ruby 2.6.5
docker desktop 2.1.0.3
docker-compose 1.24.1
発生した問題
- 別の人が
rails newコマンドで新規プロジェクトを作成し、Gitのリポジトリにpush - 自分がそのリポジトリをcloneし、
docker-compose build -
docker-compose upしたところArgumentError: Missing `secret_key_base`エラーが発生
試した内容
- エラー文に
set this string with `rails credentials:edit`とあるので、何も考えずにコマンドを実行
結果、railsコマンドの使い方知らねーの?って怒られる
Usage:
rails new APP_PATH [options]
(以下略)
- エラー文でググったところ、
config/master.keyがないためと判明。何も考えずに別プロジェクトのconfig/master.keyをコピーしてみる
結果、ActiveSupport::MessageEncryptor::InvalidMessage: ActiveSupport::MessageEncryptor::InvalidMessageエラーが発生
少し考えれば、別プロジェクトのmaster.keyで通るわけもなく。。。
問題の原因
ここまでやって、ようやく少し考えながら調べました。
Rails 5.2からsecrets.ymlに代わり、config/credentials.yml.encという暗号化したファイルで取り扱うことに。
このファイルを複合するためにconfig/master.keyかENV['RAILS_MASTER_KEY']が必要になりました。
つまり暗号化したファイルを複合するための鍵がないからエラーになっていたというわけです。
config/master.keyとconfig/credentials.yml.encはrails newのタイミングで生成されますが、ここで落とし穴。
config/master.keyはデフォルトで.gitignoreに含まれています。
つまり、プロジェクト作成者がこの事を知らずにpushした場合、config/master.keyが含まれないことになります。
問題の回避方法
ここまでわかればあとは簡単です。
プロジェクト作成者に.gitignoreのconfig/master.key部分をコメントアウトしてもらって、改めてconfig/master.keyをpushしてもらえば解決です。
ENV['RAILS_MASTER_KEY']を.envで設定する方法もあるかと思いますが、config/master.keyをpushしてもらう方が楽だと思います。
まとめ
何も考えずに行動するのは、だいたい時間の無駄になるので気をつけましょう。