Devise Secret Key non è stato impostato

Sto sviluppando un’applicazione Rails 4 che utilizza la gem Active Admin per il back-end di amministrazione. A sua volta, Active Admin utilizza Devise per l’autenticazione dell’utente. Ora, quando provo a distribuire l’app utilizzando capistrano sul server VPS, ottengo l’errore seguente:

 rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = '-- secret key --' 

Una ricerca su Google non fa molto per questo errore. Qualche suggerimento sul perché sta generando un errore? Dovrei aggiungere la chiave segreta per devise inizializzatore, dato che non riesco a trovare alcun posto dove impostare tale chiave di configurazione in initializers/devise.rb ?

Ho eseguito l’ bundle update questa mattina e ho iniziato a ottenere lo stesso errore.

L’ho aggiunto come una riga in config/initializers/devise.rb e l’errore è stato corretto.

Questo sembra essere il commit che l’ha introdotto.

Ciò che ha funzionato per me su Rails 4.1 e Devise 3.2.4 è in config/initializers/devise.rb :

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

A partire da Devise 3.2.3 per le applicazioni Rails 4+, la posizione di impostazione della chiave è impostata su YourAppName :: Application.config.secret_key_base che si trova in config / initializers / secret_token.rb

Come da registro delle modifiche :

Devise userà la secret_key_base sulle applicazioni Rails 4+ come sua secret_key. Puoi cambiarlo e usare il tuo segreto cambiando l’inizializzatore devise.rb.

Sono andato a config/secrets.yml e config/secrets.yml cambiato il valore di production .

Prima:

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

Dopo:

 production: secret_key_base: string of charaters 

Ovviamente, dovrebbe essere impostato sulla variabile di ambiente, che imposterò più avanti, ma almeno lo ha fatto funzionare. Ho ottenuto la mia stringa usando bundle exec rake secret .

Questo ha risolto il mio problema:

Aggiungi il codice qui sotto al tuo file config / initializers / devise.rb .

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

Sostituisci ‘- secret key–‘ con la tua chiave. Raccomando di memorizzarlo in una variabile ENV per motivi di sicurezza.

Potrebbe essere, che non hai eseguito rails g devise:install ?

L’esecuzione di rails generate devise User senza il comando precedente causa questo problema.

In config/initializers/devise.rb ho messo:

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

Perché se metti:

 $ heroku config 

Vedrai una secret_key_base per la production modalità.

Risolvo il mio problema di inizializzazione con questo approccio brutto:

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

in config / initializers / devise.rb Ora funziona sia in produzione che in sviluppo!

Ho clonato il mio repository su una nuova macchina da git. Il

 config/secrets.yml 

il file era nella mia lista .gitignore, quindi quel file non esisteva e Devise non crea il file.

Ho aggiunto il file, quindi ri-eseguito

 rails generate devise MODEL 

e ha funzionato.

Ho lo stesso problema. Il problema è stato causato da queste righe in 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 

Li ho commentati e poi corro:

 $ rails generate devise:install 

E ha valutato perfettamente. E dopo di che ho interrotto le vie.

Controlla se la tua config\initializers\secret_token.rb ha:

 YourAppName::Application.config.secret_token 

Dovrebbe essere:

 YourAppName::Application.config.secret_key_base 

Bene, ho seguito questo post e ho provato quasi tutto qui. Ho aggiunto la chiave per devise.rb . Ma stavo ancora ottenendo lo stesso errore.

Forse una risposta stupida, ma tutto quello che dovevo fare era spingere la chiave devise.rb nel repository.

Difficoltà:

  1. Nel server di produzione:

     sudo -H nano /etc/environment 
  2. Quindi nel file aggiungere:

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

    per impostarlo in modo permanente e su tutto il sistema (tutti gli utenti, tutti i processi) aggiungere una variabile impostata

  3. Nel file devise.rb progetto locale:

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

Dettagli tecnici:

  • Ubuntu 16.04
  • Devise (4.2.0)
  • rotaie 5.0.1
  • capistrano (3.7.1)

Ha incontrato lo stesso problema con Rails 5.2.0 e Devise 4.4.1

Rilasciare quanto segue in /config/initializers/devise.rb

 config.secret_key = Rails.application.credentials.secret_key_base 

Cercando di dare una risposta un po ‘più completa a quelle di cui sopra: Come menzionato nella documentazione della gem devise_auth_token

… Inoltre, è ansible configurare altri aspetti della progettazione creando manualmente il file devise.rb tradizionale su config/initializers/devise.rb . Ecco alcuni esempi di cosa puoi fare in questo file:

 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 

Ho avuto lo stesso problema e, come descritto qui, ho creato l’inizializzatore di sviluppo e aggiungo la riga config.secret_key = ENV['DEVISE_SECRET_KEY'] ad esso.

Non conosco la soluzione giusta ma funziona. Puoi provarlo. Sono stato clonato il mio progetto dal mio account GitLab e quando corro nel mio server locale, ho un messaggio di errore:

rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = '-- secret key --'

Apri config/initializers/devise.rb e aggiungi questa linea

config.secret_key = '<%= ENV["SECRET_KEY_BASE"] %>'

Questa linea di codice è risolto il mio problema.