ruby-on-rails - Rails 4.2 使用 secret_token 吗?

标签 ruby-on-rails ruby-on-rails-4 engineyard

在 Rails 4.2 中生产是否需要 secret_key_base 和 secret_token?设置都不会导致以下异常消息:

Missing secret_token and secret_key_base for 'production' environment, set these values in config/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/

相关文章:

ruby-on-rails - Rails 4.2 如何计算指纹摘要

Rails 4 中的 Jquery 文件上传

ruby-on-rails - 'Travel' 时间助手是否在功能规范中不可用?

python - 你将如何使用 chef 安装 python 模块?

postgresql - Engineyard 使用 postgis

ruby-on-rails - 如果其中一个数据库更新失败,rails db 事务不会回滚

ruby-on-rails - 如何使用 ruby​​ on rails 中的 paypal-express gem 解决 10007 - "permission denied"PayPal API 错误

ruby-on-rails - Engine Yard Rails 应用程序 - 在 Elastic Load Balancer (ELB) 处终止 SSL 并传递 X-Forwarded-Proto http header

ruby-on-rails - 您可以使用 Rails 和 Heroku 直接在服务器上编辑文本吗?

ruby-on-rails - 我们如何在其他 Controller View 中使用一个 Controller 方法?