管理バックエンドにActive Admin gemを使用してRails 4アプリを開発しています。 Active Adminは、ユーザー認証にDeviseを使用します。今、VPSサーバーでcapistrano
を使用してアプリをデプロイしようとすると、次のエラーが表示されます。
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = '-- secret key --'
Googleの検索では、このエラーにはあまり役立ちません。エラーがスローされる理由はありますか? initializers/devise.rb
にそのような構成キーを設定する場所が見つからないため、devise
初期化子に秘密キーを追加する必要がありますか?
今朝bundle update
を実行すると、同じエラーが表示され始めました。
config/initializers/devise.rb
の行として追加し、エラーを修正しました。
これは、それを導入した commit のようです。
Rails 4.1およびDevise 3.2.4で私にとって有効だったのはconfig/initializers/devise.rb
にあります:
config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
Devise 3.2. Rails 4+アプリケーションの場合、キー設定場所のデフォルトは YourAppName :: Application.config.secret_key_base config/initializersにあります/secret_token.rb
changelog による:
Deviseは、Rails 4+アプリケーションのsecret_key_baseをsecret_keyとして使用します。 devise.rbイニシャライザを変更することで、これを変更して独自のシークレットを使用できます。
config/secrets.yml
に行き、production
の値を変更しました。
前:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
後:
production:
secret_key_base: string of charaters
もちろん、それは環境変数に設定する必要があります。これは後で設定しますが、少なくともこれは実行されました。 bundle exec rake secret
を使用して文字列を取得しました。
これは私の問題を解決しました:
以下のコードをconfig/initializers/devise.rbファイルに追加します。
config.secret_key = '-- secret key --'
「-secret key--」を独自のキーに置き換えます。セキュリティのために、ENV変数に保存することをお勧めします。
Rails g devise:install
を実行しなかった可能性がありますか?
前のコマンドなしでRails generate devise User
を実行すると、この問題が発生します。
config/initializers/devise.rb
に次を入力します。
config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
あなたが置く場合:
$ heroku config
モードproduction
にはsecret_key_base
が表示されます。
このいアプローチで初期化子の問題を解決します。
config.secret_key = 'some1234keyq23' if Rails.env == 'production'
config/initializers/devise.rbで、開発と同様に本番でも動作するようになりました!
config\initializers\secret_token.rb
に次のものがあるかどうかを確認します。
YourAppName::Application.config.secret_token
そのはず:
YourAppName::Application.config.secret_key_base
Gitから新しいマシンにリポジトリをクローンしました。の
config/secrets.yml
ファイルは私の.gitignoreリストにあったため、そのファイルは存在せず、Deviseはファイルを作成しません。
ファイルを追加してから、再実行しました
Rails generate devise MODEL
そしてそれは働いた。
同じ問題があります。この問題は、routes.rb
の次の行が原因で発生しました。
devise_for :users, :skip => [:registrations]
as :user do
get 'users/edit' => 'devise/registrations#edit', :as => 'edit_user_registration'
put 'users' => 'devise/registrations#update', :as => 'user_registration'
get '/users/sign_out' => 'devise/sessions#destroy'
end
私はそれらにコメントし、その後実行します:
$ Rails generate devise:install
そして、完全に評価されました。その後、ルートのコメントを外しました。
Rails 5.2.0およびDevise 4.4.1で同じトラブルに遭遇しました
以下を/config/initializers/devise.rbにドロップします
config.secret_key = Rails.application.credentials.secret_key_base
さて、私はこの投稿をフォローしており、ほとんどすべてをここで試しました。キーをdevise.rb
に追加しました。しかし、私はまだ同じエラーを受け取っていました。
ばかげた答えかもしれませんが、私がしなければならなかったのは、devise.rb
キーをリポジトリにプッシュすることだけでした。
修正:
実動サーバーで:
Sudo -H nano /etc/environment
次に、ファイルに以下を追加します。
export SECRET_KEY_BASE="yourkey"
export DEMO03_DATABASE_PASSWORD="yourpass"
これを永続的に設定するには、システム全体(すべてのユーザー、すべてのプロセス)がset変数を追加します
ローカルプロジェクトdevise.rb
ファイル:
config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
技術的な詳細:
上記の質問に対して多少完全な回答をしようとしています:devise_auth_token gemの documentation で述べたように
...さらに、
config/initializers/devise.rb
で従来のdevise.rbファイルを手動で作成することにより、deviseの他の側面を構成できます。このファイルでできることの例を次に示します。
Devise.setup do |config|
# The e-mail address that mail will appear to be sent from
# If absent, mail is sent from "[email protected]"
config.mailer_sender = "[email protected]"
# If using Rails-api, you may want to tell devise to not use ActionDispatch::Flash
# middleware b/c Rails-api does not include it.
# See: http://stackoverflow.com/q/19600905/806956
config.navigational_formats = [:json] end
私も同じ問題を抱えていたので、ここで言及したように、devise initializerを作成し、config.secret_key = ENV['DEVISE_SECRET_KEY']
行を追加しました。