Figaro - Rails缺少secret_key_base用于开发

时间:2014-10-05 06:26:36

标签: ruby ruby-on-rails-4 gem

我刚刚转而使用带有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....

3 个答案:

答案 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变量以确认它们在那里)