在 Rails 4.2 中生产是否需要 secret_key_base 和 secret_token?设置都不会导致以下异常消息:
Missing
secret_token
andsecret_key_base
for 'production' environment, set these values inconfig/secrets.yml
4.2 升级指南( http://railsapps.github.io/updating-rails.html )这样说:
When you create a new Rails application using the rails new command, a unique secret key is generated and written to the config/initializers/secret_token.rb file.
但是当我生成我的应用程序时没有创建这样的文件,并且在 config/secrets.yml 中没有对 secret_token 的引用
我假设错误消息是错误的,并且只需要 secret_key_base 。当我在开发机器上在生产环境中运行我的应用程序时,它仅以 secret_key_base 开头,但在 Engineyard 中,设置 secret_key_base(通过环境变量)不起作用。我仍然得到错误。
最佳答案
您在 Engine Yard 上看到的问题是因为 secret_key_base 环境变量默认情况下(尚)不存在。这是我们正在努力的事情。您可以使用自定义厨师自行设置;我建议与我们的支持团队联系以获取更多信息。
至于您遇到的实际错误,我刚刚测试了一个全新的 Rails 4.2 应用程序(“rails new foo”),看看它是否生成了 secret_token.rb,但事实并非如此。我认为您需要在这里创建 config/secrets.yml,该文件应如下所示:
development:
secret_key_base: somekey
test:
secret_key_base: someotherkey
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
现在,当您看到 ENV["SECRET_KEY_BASE"] 时,这就是 Engine Yard 有点扭曲的地方——我们还没有开箱即用地提供它。只要您的仓库是私有(private)的,您就可以自己在其中硬编码一些东西。否则,使用自定义厨师可以通过创建一个 secret keystore 并将其放入负责启动您的应用程序工作进程的包装脚本中(例如,我们平台上的 config/env.custom)来解决您的问题。
希望这可以帮助。
关于ruby-on-rails - Rails 4.2 使用 secret_token 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28767059/