rails db:migrate すると「Missing `secret_key_base` for ‘production’ environment」でエラーになる

Ruby on Rails

railsアプリを公開するため、レンタルサーバー上で準備をしていた際、上記エラーになってハマりました。
原因と対策がなんとなくわかりましたので、備忘録として残しておきます。

前提

ローカルで作成したrailsアプリをGit で管理しています。リモートリポジトリーに push してあったものを公開用のサーバーに「clone」する、といったところまでは無事終了した段階です。

ローカルでは問題なくできた「db:migrate」なので、 データベースの定義まわりを調べたのですが正常に作成できているようでした。

経緯

「db:migrate」では、これ以上のエラーはわからなかったので、

$ rails console -e production

を実行してみました。

 Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit` (ArgumentError)

するとこんな感じで、同様にエラーになったので、素直に

$ rails credentials:edit

を実行するも、

No $EDITOR to open file in. Assign one like this:
EDITOR="mate --wait" bin/rails credentials:edit

エディターを指定しろというエラーが。
言われる通りにvimを使うよう指定して実行するも、やっぱりわけわからないエラーが出て終了。

原因

いろいろ先人の知恵をお借りしようと調べると、「secret_key_base」のような秘匿すべき情報は、Gitで管理しないようになっているそうです。パスワードなどの重要情報と同じく「.gitignore」で管理しないよう定義されているのだとか。

当然「 clone 」してできたサーバー上には 「secret_key_base」 がないわけで、「Missing secret_key_base for ‘production’ environment」というエラーになったということらしいです。

エラーになって正しい、ということでしょうか。

対策

対策としては、ローカル上の「config/master.key」の中身をコピーして、サーバー上の「config/master.key」に貼り付ける。

これだけです。

まとめ

ハマると二日三日は平気で進まなくなってしまうので、自分用に備忘録として残しておきます。

コメント