我有一个项目配置为使用Rails加密机密。一切正常,直到我尝试访问production.rb
环境文件中的一个秘密。Rails 5不会加载生产中的加密机密.rb
我发现如果我尝试在配置块中访问像Rails.application.secrets.smtp_user_name
之类的东西,它会清除所有加密的机密(我只剩下secrets.yml
中的东西,而我没有用它)。例如:
Loading production environment (Rails 5.1.2)
irb(main):001:0> Rails.application.secrets
=> {:secret_key_base=>nil, :secret_token=>nil}
如果我删除了试图访问的秘密是否能够正常工作:
irb(main):001:0> Rails.application.secrets
=> {:secret_key_base=>"...", :smtp_user_name=>"...", :smtp_password=>"...", :secret_token=>nil}
我目前在production.rb
工作围绕它通过使用两个配置块如下:
# This is hacky, it needs to come before the second configure block where
# the encrypted secrets are used.
Rails.application.configure do
config.read_encrypted_secrets = true
end
Rails.application.configure do
... stuff that uses Rails.application.secrets, like ActionMailer
end
其他人面临这种情况,可能有更正确的方法来解决它吗?
这是有道理的,为什么会发生这种情况(Rails不知道加载加密的秘密,因为我们没有告诉你),但我想一定有更好的方法来处理它。