Devise Token Auth error: Devise.secret_key no se configuró

Actualmente estoy usando la gem Devise Token Auth ( https://github.com/lynndylanhurley/devise_token_auth ) y la tengo funcionando bien en el desarrollo. Sin embargo, en mi entorno de producción, cuando ejecuto rake db:migrate , aparece el siguiente error:

 rake aborted! Devise.secret_key was not set. Please add the following to your Devise initializer: config.secret_key = 'my secret key' Please ensure you restarted your application after installing Devise or setting the key. /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise-3.4.1/lib/devise/rails/routes.rb:480:in `raise_no_secret_key' /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise-3.4.1/lib/devise/rails/routes.rb:209:in `devise_for' /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise_token_auth-0.1.31/lib/devise_token_auth/rails/routes.rb:25:in `mount_devise_token_auth_for' /Users/karimbutt/Development/projects/haubby/backend/config/routes.rb:3:in `block in ' /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:423:in `instance_exec' /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:423:in `eval_block' /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/actionpack-4.2.0/lib/action_dispatch/routing/route_set.rb:401:in `draw' /Users/karimbutt/Development/projects/haubby/backend/config/routes.rb:1:in `' 

Cuando agrego la clave secreta, como sugiere el mensaje de error, obtengo el siguiente error:

 rake aborted! NoMethodError: undefined method `secret_key=' for DeviseTokenAuth:Module /Users/karimbutt/Development/projects/haubby/backend/config/initializers/devise_token_auth.rb:12:in `block in ' /Users/karimbutt/.rvm/gems/ruby-2.1.2/gems/devise_token_auth-0.1.31/lib/devise_token_auth/engine.rb:23:in `setup' /Users/karimbutt/Development/projects/haubby/backend/config/initializers/devise_token_auth.rb:1:in `' 

He intentado lo siguiente: Reinstalar la gem. Establecer una verificación para ver si Rails.env == “producción” en el archivo de configuración de Devise – Gemas actualizadas – Dispositivo reinstalado usando el generador – Dejar caer la tabla y volver a migrar con nuevas migraciones creadas por el generador

Aquí está mi archivo initializers / devise_auth.rb cuando coloco la clave que solicita:

 DeviseTokenAuth.setup do |config| # By default the authorization headers will change after each request. The # client is responsible for keeping track of the changing tokens. Change # this to false to prevent the Authorization header from changing after # each request. #config.change_headers_on_each_request = true # By default, users will need to re-authenticate after 2 weeks. This setting # determines how long tokens will remain valid after they are issued. #config.token_lifespan = 2.weeks config.secret_key = 'my secret key' # Sometimes it's necessary to make several requests to the API at the same # time. In this case, each request in the batch will need to share the same # auth token. This setting determines how far apart the requests can be while # still using the same auth token. #config.batch_request_buffer_throttle = 5.seconds # This route will be the prefix for all oauth2 redirect callbacks. For # example, using the default '/omniauth', the github oauth2 provider will # redirect successful authentications to '/omniauth/github/callback' # config.omniauth_prefix = "/omniauth" end 

Alguna idea de cómo solucionar este problema? ¿Por qué sucede esto solo en la producción?

De acuerdo con los documentos, debe agregar config.secret_key = 'my secret key' a

 config/initializers/devise_token_auth.rb 

FWIW, probablemente no quieras guardar el secreto en tu código. Utilizar

 config.secret_key = ENV[ 'DEVISE_TOKEN_AUTH_SECRET_KEY' ] 

EDITAR: Creo que el problema es que necesita configurar Devise.secret_key , no la clave secreta de Devise Token Auth. ¿Hay un inicializador Devise?

Lo estás agregando al inicializador DeviseTokenAuth . En su lugar, cree un inicializador de config/initializers/devise.rb :

 Devise.setup do |config| config.secret_key = '...' end 

Nota 1: puede ejecutar rake secret para obtener una clave secreta aleatoria para soltar allí.

Nota 2: los individuos con clase pueden preferir mantener sus secretos en las variables del entorno, para evitar registrarlos en git:

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