ruby-on-rails - gema - devise rails español
No se configuró la clave secreta (15)
A partir de Devise 3.2.3 para aplicaciones Rails 4+, la ubicación de configuración de la clave se establece de manera predeterminada en YourAppName::Application.config.secret_key_base encuentra en config / initializers / secret_token.rb
Estoy desarrollando una aplicación de Rails 4 usando la gema de Active Admin para la administración de back-end. Active Admin a su vez usa Devise para autenticación de usuario. Ahora, cuando intento implementar la aplicación usando capistrano
en el servidor VPS, aparece el siguiente error:
rake aborted!
Devise.secret_key was not set. Please add the following to your Devise initializer:
config.secret_key = ''-- secret key --''
Una búsqueda en Google no hace mucho por este error. ¿Alguna sugerencia de por qué está arrojando un error? ¿Debería agregar la clave secreta para devise
inicializador, ya que no puedo encontrar ningún lugar para establecer dicha clave de configuración en initializers/devise.rb
?
Bueno, he estado siguiendo esta publicación e intenté casi todo aquí. He agregado la clave para devise.rb
. Pero todavía estaba recibiendo el mismo error.
Tal vez una respuesta estúpida, pero todo lo que tenía que hacer era presionar la tecla devise.rb
del repositorio.
Cloné mi repositorio en una máquina nueva de git. los
config/secrets.yml
el archivo estaba en mi lista .gitignore, por lo que ese archivo no existía, y Devise no crea el archivo.
Agregué el archivo, luego volví a ejecutar
rails generate devise MODEL
Y funcionó.
Compruebe si su config/initializers/secret_token.rb
tiene:
YourAppName::Application.config.secret_token
Debería ser:
YourAppName::Application.config.secret_key_base
En config/initializers/devise.rb
pongo:
config.secret_key = ''<%= ENV["SECRET_KEY_BASE"] %>'' if Rails.env == ''production''
Porque si pones:
$ heroku config
Verás una secret_key_base
para la production
modo.
Esto resolvió mi problema:
Agregue el siguiente código a su archivo config / initializers / devise.rb .
config.secret_key = ''-- secret key --''
Reemplace ''- clave secreta--'' con su propia clave. Recomiendo guardarlo en una variable ENV por razones de seguridad.
Fijar:
En el servidor de producción:
sudo -H nano /etc/environment
Luego en el archivo agrega:
export SECRET_KEY_BASE="yourkey" export DEMO03_DATABASE_PASSWORD="yourpass"
para establecer esto permanentemente, y todo el sistema (todos los usuarios, todos los procesos) agregar conjunto variable
En el archivo local
devise.rb
proyecto:config.secret_key = ENV["SECRET_KEY_BASE"] if Rails.env.production?
Detalles técnicos:
- Ubuntu 16.04
- Idear (4.2.0)
- rieles 5.0.1
- capistrano (3.7.1)
Intentando dar una respuesta algo más completa a las anteriores: como se menciona en la documentación de la gema devise_auth_token
... Además, puede configurar otros aspectos del diseño creando manualmente el archivo tradicional devise.rb en
config/initializers/devise.rb
. Aquí hay algunos ejemplos de lo que puede hacer en este archivo:
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://.com/q/19600905/806956
config.navigational_formats = [:json] end
Tuve el mismo problema, y como mencioné aquí, creé el inicializador de config.secret_key = ENV[''DEVISE_SECRET_KEY'']
línea config.secret_key = ENV[''DEVISE_SECRET_KEY'']
.
Lo que funcionó para mí en Rails 4.1 y Devise 3.2.4 es en config/initializers/devise.rb
:
config.secret_key = ENV[''DEVISE_SECRET_KEY''] if Rails.env.production?
Podría ser que no hayas ejecutado rails g devise:install
?
La ejecución de rails generate devise User
sin el comando anterior que causa este problema.
Resuelvo mi problema de inicializador con este enfoque desagradable:
config.secret_key = ''some1234keyq23'' if Rails.env == ''production''
en config / initializers / devise.rb ¡Ahora funciona tanto en producción como en desarrollo!
Se encontró con el mismo problema con Rails 5.2.0 y Devise 4.4.1
Coloque lo siguiente en /config/initializers/devise.rb
config.secret_key = Rails.application.credentials.secret_key_base
Según el changelog :
Devise usará la base de secret_key_base en las aplicaciones de Rails 4+ como su clave secreta. Puede cambiar esto y usar su propio secreto al cambiar el inicializador devise.rb.
Fui a config/secrets.yml
y cambié el valor de production
.
Antes de:
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
Después:
production:
secret_key_base: string of charaters
Por supuesto, eso debería establecerse en la variable de entorno, que estableceré más adelante, pero al menos la puso en funcionamiento. Obtuve mi cadena usando el bundle exec rake secret
.
Tengo el mismo problema. El problema fue causado por estas líneas en 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
Los comenté y después de eso corrí:
$ rails generate devise:install
Y ha evaluado perfectamente. Y después de eso, las rutas sin comentarios.
bundle update
esta mañana y comencé a recibir el mismo error.
Lo agregué como una línea en config/initializers/devise.rb
y se config/initializers/devise.rb
el error.
Este parece ser el commit que lo introdujo.