前置き
dockerを使ってRailsの開発を趣味でやっていた。
ひと段落ついたので、サーバーに公開しようと思ったがエラーが出てなかなかうまくいかなかった話です。
エラーの内容
ArgumentError: Missing `secret_key_base` for 'production' environment, set this string with `rails credentials:edit`
解決法
EDITOR=vim rails credentials:edit --environment production
dockerに入って上のコマンドを実行していたが、Vimが入っていなかったので、一見できてるようでできていなかった。
編集画面が出てこないのでおかしいとは思っていたが、ファイルはしっかり生成されているし大丈夫だと思っていたのが罠だった。
あとはマネクラのプロジェクト管理画面で環境変数の設定をしておく。
ここに入れる値の内容は、/config/credentials/production.key
の内容をコピーして貼り付ける。
その後以下のファイルを作った。
append :linked_files, 'config/credentials/production.key'
これは
Railsがproduction.keyを参照するためのシンボリックリンクを貼る記述を追加する。
という感じらしい。
最後にSSHでマネクラにアクセスして以下のファイルを作っておいてからPushするとOK
vim user_command.sh
test -f ~/shared/.env && ln -s ~/shared/.env ./.env || true
export RAILS_ENV=production
bundle install --deployment --without development,test --path vendor/bundle
bin/rails db:create
bin/rails db:migrate
最後に
なかなか解決せずに6時間くらい悩みました。
30分休憩してから再度取り掛かったらすぐに解決しました。
煮詰まったら一回休むってほんと大事
お世話になった記事
Rails 6でCapistranoでデプロイする際のCredentials関連エラーに対処する
[Ruby on Rails]ロリポップ!マネージドクラウドでRailsアプリを稼働させるまで