10

这个关于不对密钥进行版本控制的要点很棒,我现在已经用它几次了,不再对我的 Rails 密钥库进行版本控制。

我尝试将它用于 heroku 上的设计 secret_key,但我的尝试失败了。它在开发中运行良好,但拒绝让我推送到 heroku - 说我创建的设计密钥(以与上面的要点相同的方式)没有设置。

我让它使用硬编码的密钥(签入 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'}

实际设计 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 的原因???

关于我可以从哪里开始寻找解决方案的任何想法?

4

3 回答 3

16

您想在(在编译时)它实际上对您的应用程序可用(在 slug 编译时)之前使用配置变量。

尝试打开Heroku Labs:user-env-compile

我怀疑它会解决问题。

于 2013-11-07T10:11:32.377 回答
5

如果它在编译时中断,您需要启用 user-env-compile,heroku labs:enable user-env-compile以便在应用程序启动以编译资产时使环境可用。

于 2013-11-07T10:11:13.907 回答
2

Heroku 上不再提供 user-env-compile labs 功能。

我正在使用 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 配置变量,设置为您想要的任何内容。好的做法是生成与开发和测试的默认值相同长度的内容。

希望这可以帮助。

于 2015-09-29T23:08:20.850 回答