概要
複数人で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してもらう方が楽だと思います。
まとめ
何も考えずに行動するのは、だいたい時間の無駄になるので気をつけましょう。