読者です 読者をやめる 読者になる 読者になる

ちーくんのブログ

プログラミング備忘録

Railsを本番環境でデプロイしたら「Devise.secret_key was not set」というエラーが発生

Server Ruby on Rails

ちょっと遅いですがあけましておめでとうございます。

2017年もマイペースにブログ更新していくのでよろしくお願いいたします。

今年一発目はDeviseの本番環境における使い方です。

secret_keyの部分が開発環境だとエラーがなく、本番環境だとエラーがでたので解決方法を共有しておきます。

Deviseのsecret_keyがセットされていないメッセージ

capistranoでDeviseを使ったRailsアプリを本番環境にデプロイしたら以下のようなエラーメッセージが出た。

Devise.secret_key was not set. Please add the following to your Devise initializer:


これは文字通りDeviseのinitializerファイルにDeviseのsecret_keyを書き足せば大丈夫です。


Deviseのsecret_keyを追加する

config/initializers/devise.rbにある「config.secret_key」の部分(たぶん9行目)をコメントアウト

# config/initializers/devise.rb

config.secret_key = '**************'


これでもう一回デプロイしたらたぶん動きます。


プライバシー重視のsecret_keyの設定

上記のようにコメントアウトするだけでも大丈夫ですが問題もあります。

それはsecret_keyが直書きになっているのでGitHubなどでPublicに公開する場合困る場合がありますよね。

ここでは環境変数で仕込む方法も紹介しておきます。


まず先程の「config.secret_key」を環境変数にする。

# devise.rb

config.secret_key = ENV["DEVISE_SECRET_KEY"]


secrets.ymlは以下のようになってます。(デフォルトのまま)

# secrets.yml

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>


次にdeploy.rbに環境変数を書く。

# deploy.rb

set :default_env, {
  :DEVISE_SECRET_KEY => ENV['DEVISE_SECRET_KEY']
}


最後にサーバーにログインして環境変数(ランダムな文字列)を仕込む。

export SECRET_KEY_BASE='文字列'
export DEVISE_SECRET_KEY='文字列'


これでうまくいけば本番環境でも動くはずです。



本日は以上です。