这个关于不对秘钥进行版本控制的要点很棒,我已经用了几次来停止对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 变量的原因?
有没有任何想法可以指导我开始寻找解决方案?
rake assets:precompile
。希望我更好地理解这个命令加载了 Rails 的哪些部分。https://github.com/heroku/heroku-buildpack-ruby/blob/master/lib/language_pack/rails4.rb - odigity