在Heroku上设置Devise时未能找到ENV['SECRET_KEY']

10

这个关于不对秘钥进行版本控制的要点很棒,我已经用了几次来停止对my rails secret-key-base的版本控制了。

我试着在heroku上使用它来处理devise secret_key,但是我尝试失败了。在开发环境中可以正常工作,但是却拒绝了我推送到heroku - 告诉我我创建的devise key(以与上述要点相同的方式)没有设置。

我使用一个硬编码的秘钥(提交到git)使其工作正常,但是当我使用以下内容时并没有成功:

Devise.setup do |config|
  config.secret_key = ENV['DEVISE_SECRET_KEY']
...

(同时检查相关的环境变量,确保它已经存在)

在将代码推送到Heroku时,似乎在预编译资源时出现了错误。

$  git push heroku master
     ... (bundle stuff here)
       Running: rake assets:precompile
       rake aborted!
       Devise.secret_key was not set. Please add the following to your Devise initializer:
       config.secret_key = '0cfa796871e0...
   /tmp/build_.../vendor/bundle/ruby/1.9.1/gems/devise-3.1.1/lib/devise/rails/routes.rb:446:in `raise_no_secret_key'
   /tmp/build_.../vendor/bundle/ruby/1.9.1/gems/devise-3.1.1/lib/devise/rails/routes.rb:195:in `devise_for'
   /tmp/build_.../config/routes.rb:2:in `block in <top (required)>'
    ...( rest of the long stacktrace with little of interest here)

在路由目录中运行"devise_for"时,会引发错误。

MyApp::Application.routes.draw do
  devise_for :users, :path_names => { :sign_in => 'login', :sign_out => 'logout'}

实际的 devise gem 中相关的代码行是:

      raise_no_secret_key unless Devise.secret_key

所以它确实只是检查secret_key是否已经设置。

仅为确认...我检查了Heroku配置,事实上确实在该名称下将秘密密钥放入了环境中。

DEVISE_SECRET_KEY:            3f844454bee...(more here)
RAILS_SECRET_KEY_BASE:        04bf569d4e...(more here)

因为它在一个 rake 任务中而不是应用程序中 - 我猜这就是为什么它无法访问 ENV 变量的原因?

有没有任何想法可以指导我开始寻找解决方案?

3个回答

16

工作得非常完美。谢谢! - westonplatter
1
您链接的页面显示'user-env-compile'功能现已弃用。 - odigity
就像@odigity所说,这个不再起作用了。有人知道现在该怎么办吗? - GMA
我已经放弃并决定遵循Heroku的指南,在构建步骤期间确保不访问任何环境变量,我假设(基于吸取的教训)这包括任何rake任务,可能是因为它们运行rake来编译资产或其他什么。我在“if Rails.env.development?”语句中包装了我的自定义任务。希望有更优雅的解决方案,但是... :( - odigity
Heroku 运行 rake assets:precompile。希望我更好地理解这个命令加载了 Rails 的哪些部分。https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/rails4.rb - odigity

5

如果编译时出现错误,您需要启用user-env-compile,heroku labs:enable user-env-compile 使环境在应用程序引导时可用以编译资产。


谢谢 - 它起作用了。你们两个都给了我答案,但是另一个人的积分更少,所以我对他很友好,给了他采纳 ;) - Taryn East
1
没问题 - Jon 是个不错的家伙 :) - John Beynon
1
该功能已被弃用。运行上述Heroku命令会产生以下结果:"! 没有这样的功能:user-env-compile"。 - odigity

2

Heroku不再提供user-env-compile实验室功能。

我正在使用Ruby 2.2.2p95和Rails 4.2.4。

对我有用的方法是,在config/initializers/devise.rb中:

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

然后在Heroku中添加DEVISE_SECRET_KEY配置变量,设置为您想要的任何值。良好的做法是生成与开发和测试的默认值相同长度的内容。

希望这能帮到您。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接