我刚刚转而使用带有Rails 4.1.6的Figaro gem v1.0.0。 自从删除我的secrets.yml文件后,我现在收到错误:
处理请求时出现意外错误:发现错误secret_key_base
'环境,在config/secrets.yml
我是否还需要secrets.yml文件 - 这不是费加罗的application.yml文件的工作吗?
我的application.yml文件就像
development:
secret_key_base: 56....
答案 0 :(得分:9)
在https://github.com/rails/rails/blob/master/railties/lib/rails/application.rb查看Railties gem,你可以看到定义的秘密方法,其中包括secret_key_base的回退
def secrets #:nodoc:
@secrets ||= begin
secrets = ActiveSupport::OrderedOptions.new
yaml = config.paths["config/secrets"].first
if File.exist?(yaml)
require "erb"
all_secrets = YAML.load(ERB.new(IO.read(yaml)).result) || {}
env_secrets = all_secrets[Rails.env]
secrets.merge!(env_secrets.symbolize_keys) if env_secrets
end
# Fallback to config.secret_key_base if secrets.secret_key_base isn't set
secrets.secret_key_base ||= config.secret_key_base
secrets
end
end
在config / application.rb中添加以下内容可解决问题
config.secret_key_base = Figaro.env.secret_key_base
答案 1 :(得分:0)
我从未使用过Figaro gem,但尝试这些,创建config / secret.yml文件并在里面写:
development:
secret_key_base: <%= ENV['secret_key_base'] %>
答案 2 :(得分:0)
我刚刚获悉,自Rails 4.1.x起,config/secrets.yml
需要上传到heroku。 Rails将不再直接查看其ENV以查找其secret_key_base
。
所以secrets.yml
需要从.gitignore
文件中删除,您的项目需要被推荐并重新推送到heroku。
(secrets.yml
仍会从heroku的ENV中获取其值,这些值仍将通过Figaro以与之前相同的方式加载 - figaro heroku:set -e production
。使用heroku config
获取快速查看您的ENV变量以确认它们在那里)