Rails 6 secret_key_base vs secret_token



这可能是一个幼稚的问题,但我是Ruby新手,非常感谢任何指导。我正在努力升级我的应用程序使用Rails 6

我secret_token。Rb目前有

MyApp::Application.config.secret_token = ENV['SECRET_TOKEN'] || SecureRandom.hex(128)

https://edgeguides.rubyonrails.org/upgrading_ruby_on_rails.html#config-secrets-yml说"从secret_token中使用现有的secret_key_base。

为在生产环境中运行Rails应用程序的用户设置SECRET_KEY_BASE环境变量。我没有看到在任何地方设置secret_key_base。是配置。Secret_key_base只是重命名版本的配置。secret_token,我可以在秘密中设置ENV[' secret_token ']。这样的Yml文件

production:
secret_key_base: ENV['SECRET_TOKEN']

您的secrets.yml文件在Rails 6中将不再有效。相反,您将拥有一个加密的凭证文件。

您可以使用rails credentials:edit创建文件。您将看到一条错误消息,其中包含基于您的编辑软件的建议命令。剪切并粘贴建议。

这里存放你所有的密钥/令牌等。

你用Rails.application.credentials.secret_tokenRails.application.credentials.aws[:secret_access_token]访问它们

根据您上面的评论,听起来您需要将config.secret_token更改为config.secret_key_base,并将其设置为您的secret_key_base变量,如下所示:

YourApp::Application.config.secret_key_base = Rails.application.credentials.dig(Rails.env.to_sym, :secret_key_base)

假设您的credentials.yml.enc文件有如下设置:

production:
secret_key_base: a;sodkfjas;odkjfa;sodkjf
development:
secret_key_base: pqweiurwoeiurwopeiruowu
aws:
secret_access_token: mncMXncXMnc>KMXnc>KNc