blog.kotamiyake.me

為せば成る、為さねば成らぬ何事も

Rails 5.2.0.rc1でdevise 4.4.1を利用としたら以下のようなエラーが発生した。

$ bin/rails db:migrate
rails aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:

  config.secret_key = '998631ea6a17156d9b2c957614c720b11e0e65d5217e7126eb39cd08de9cad06c61eb526bd055e6eab6f5d433d8effefea0ec30829f5359cef8cc4a6503e9fe9'

Please ensure you restarted your application after installing Devise or setting the key.
/Users/kotamiyake/code/private/projects/xxx/config/routes.rb:2:in `block in <main>'
/Users/kotamiyake/code/private/projects/xxx/config/routes.rb:1:in `<main>'
/Users/kotamiyake/code/private/projects/xxx/config/environment.rb:5:in `<main>'
/Users/kotamiyake/code/private/projects/xxx/bin/rails:9:in `<top (required)>'
/Users/kotamiyake/code/private/projects/xxx/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:migrate => db:load_config => environment
(See full trace by running task with --trace)

原因はRails5.2から複数の機密情報設定ファイルがconfig/credentials.yml.encにまとめられたので、それに伴ってnamespaceが代わってdeviseのキー設定がうまく行かなくなっていました。

masterでは修正されているようですが、deviseの4.4.1ではまだ反映されていないので、以下のように設定するとエラーを修正することができます。

config.secret_key = Rails.application.credentials.secret_key_base

Railsの進化が早くて新しい機能がモリモリ追加されて変更も多いので、随時キャッチアップが必要ですね。

参考