在Rails 4.0.2版本中使用config/secrets.yml

B.I*_*.I. 5 ruby-on-rails configuration-files ruby-on-rails-4

我正在阅读http://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html 并看到了诀窍config/secrets.yml

我将secret_base_keys移动到该文件,并删除了secret_token.rb文件.

但服务器无法启动.

DEPRECATION WARNING: You didn't set config.secret_key_base. Read the upgrade documentation to learn more about this new config option. (called from service at /home/bismailov/.rvm/rubies/ruby-1.9.3-p429/lib/ruby/1.9.1/webrick/httpserver.rb:138)
[2014-01-15 16:15:51] ERROR RuntimeError: You must set config.secret_key_base in your app's config.
Run Code Online (Sandbox Code Playgroud)

我相信那是因为我还没有使用Rails 4.1.

有没有办法在Rails 4.0版中实现这个新功能(secrets.yml)?也许某种宝石......

非常感谢你!

sca*_*er2 20

secret_key_base弃用似乎没有替代语法来删除Rails 4.0应用程序中的弃用警告.要满足弃用,请按照将生产密钥移至secrets.yml和删除secret_token.rb文件的步骤进行操作.在您的实现中使用YAML加载器application.rbsecrets.yml文件中提取令牌.

使用rake secret生成每个您的环境中新的令牌.将输出复制并粘贴到secrets.yml文件的每个部分.

# config/secrets.yml
development:
  secret_key_base: __pasted from rake secret___
test:
  secret_key_base: __pasted from rake secret___
production:
  secret_key_base: __pasted token from config/initializers/secret_token.rb___


# config/application.rb
# TODO Remove this in Rails 4.1
config.secret_key_base = YAML.load(File.open("#{Rails.root}/config/secrets.yml"))[Rails.env]['secret_key_base']
Run Code Online (Sandbox Code Playgroud)

引用:https://github.com/rails/rails/pull/13298

更新:

我的原创帖子专注于@ user2998870的灵感,我为我添加了一个方法,application.rb即允许一个人实现多个秘密,而不仅仅是secret_key_base.这使得顶级密钥可以作为方法访问,例如Rails.application.secrets.braintree_merchant_id.

如果嵌套,可以使用调用嵌套键值Rails.application.secrets.braintree['merchant_key'].

注意:仍然需要上面的原始代码secret_key_base才能在Rails 4.0中正常运行.

# config/application.rb
def secrets
  @secrets ||= begin
    yaml = YAML.load(File.open("#{Rails.root}/config/secrets.yml"))[Rails.env]
    ActiveSupport::OrderedOptions.new.merge!(yaml.symbolize_keys)
  end
end
Run Code Online (Sandbox Code Playgroud)