2017-07-03 69 views
0

我有一个项目配置为使用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不知道加载加密的秘密,因为我们没有告诉你),但我想一定有更好的方法来处理它。

回答

1

这里是有关您的问题的错误报告:

https://github.com/rails/rails/issues/30362#issuecomment-326821656

一般来说,即使你拥有一切设置正确,你需要检查也为了如何应用程序加载的秘密。如果您的应用程序首先询问Rails.application.secrets,然后设置适当的标志... Rails.application.secrets将缓存无秘密的版本...而secret.yml.enc的秘密将不会合并。