web-dev-qa-db-ja.com

秘密鍵の考案が設定されていません

管理バックエンドに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初期化子に秘密キーを追加する必要がありますか?

97
user1139144

今朝bundle updateを実行すると、同じエラーが表示され始めました。

config/initializers/devise.rbの行として追加し、エラーを修正しました。

これは、それを導入した commit のようです。

85
Brian

Rails 4.1およびDevise 3.2.4で私にとって有効だったのはconfig/initializers/devise.rbにあります:

config.secret_key = ENV['DEVISE_SECRET_KEY'] if Rails.env.production?
38
Paul Odeon

Devise 3.2. Rails 4+アプリケーションの場合、キー設定場所のデフォルトは YourAppName :: Application.config.secret_key_base config/initializersにあります/secret_token.rb

31
Brandon Cook

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を使用して文字列を取得しました。

12
Eric

これは私の問題を解決しました:

以下のコードをconfig/initializers/devise.rbファイルに追加します。

config.secret_key = '-- secret key --' 

「-secret key--」を独自のキーに置き換えます。セキュリティのために、ENV変数に保存することをお勧めします。

12

Rails g devise:installを実行しなかった可能性がありますか?

前のコマンドなしでRails generate devise Userを実行すると、この問題が発生します。

10
sascha.daniels

config/initializers/devise.rbに次を入力します。

config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?

あなたが置く場合:

$ heroku config

モードproductionにはsecret_key_baseが表示されます。

10
rld

このいアプローチで初期化子の問題を解決します。

config.secret_key = 'some1234keyq23' if Rails.env == 'production'

config/initializers/devise.rbで、開発と同様に本番でも動作するようになりました!

6

config\initializers\secret_token.rbに次のものがあるかどうかを確認します。

YourAppName::Application.config.secret_token

そのはず:

YourAppName::Application.config.secret_key_base
5
zurbergram

Gitから新しいマシンにリポジトリをクローンしました。の

config/secrets.yml 

ファイルは私の.gitignoreリストにあったため、そのファイルは存在せず、Deviseはファイルを作成しません。

ファイルを追加してから、再実行しました

Rails generate devise MODEL

そしてそれは働いた。

5
jgrumps

同じ問題があります。この問題は、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

そして、完全に評価されました。その後、ルートのコメントを外しました。

4
ExiRe

Rails 5.2.0およびDevise 4.4.1で同じトラブルに遭遇しました

以下を/config/initializers/devise.rbにドロップします

config.secret_key = Rails.application.credentials.secret_key_base
1
Benny Paulino

さて、私はこの投稿をフォローしており、ほとんどすべてをここで試しました。キーをdevise.rbに追加しました。しかし、私はまだ同じエラーを受け取っていました。

ばかげた答えかもしれませんが、私がしなければならなかったのは、devise.rbキーをリポジトリにプッシュすることだけでした。

1
Philip John

修正:

  1. 実動サーバーで:

    Sudo -H nano /etc/environment
    
  2. 次に、ファイルに以下を追加します。

    export SECRET_KEY_BASE="yourkey"
    export DEMO03_DATABASE_PASSWORD="yourpass"
    

    これを永続的に設定するには、システム全体(すべてのユーザー、すべてのプロセス)がset変数を追加します

  3. ローカルプロジェクトdevise.rbファイル:

    config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
    

技術的な詳細:

  • Ubuntu 16.04
  • 工夫(4.2.0)
  • Rails 5.0.1
  • カピストラーノ(3.7.1)
1
gotqn

上記の質問に対して多少完全な回答をしようとしています: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']行を追加しました。

0
Amit Liber