Rails 4.2使用secret_token吗?

时间:2015-02-27 14:10:46

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

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

  

因“生产”而遗漏secret_tokensecret_key_base   环境,在config/secrets.yml

中设置这些值

4.2升级指南(http://railsapps.github.io/updating-rails.html)说明了这一点:

  

使用rails new命令创建新的Rails应用程序时,a   生成并写入唯一密钥   config / initializers / secret_token.rb文件。

但是当我生成我的应用程序时没有创建这样的文件,并且在config / secrets.yml中没有对secret_token的引用

我假设错误消息是错误的,并且只需要secret_key_base。当我在我的开发机器上运行我的应用程序时,它只从secret_key_base开始,但在Engineyard中,设置secret_key_base(通过环境变量)不起作用。我仍然得到错误。

4 个答案:

答案 0 :(得分:5)

您在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 [&#34; SECRET_KEY_BASE&#34;]时,Engine Yard有点麻烦 - 我们还没有提供开箱即用的功能。只要你的repo是私有的,你就可以自己硬编码。否则,使用自定义厨师可以通过创建一个秘密密钥库并将其放入负责启动应用程序工作进程的包装器脚本(例如,在我们的平台上使用config / env.custom)来平衡你。

希望这有帮助。

答案 1 :(得分:2)

4.2确实使用了密钥,您发布的链接具有您正在寻找的解决方案。

在一个没有激活密钥的环境中,您需要使用rake secret生成它,然后将控制台的输出放入您的config/initializers/secret_token.rb文件中(您可以制作)一个,如果没有一个)。

您可以选择避免使用secrets.yml。许多人更喜欢使用另一个gem /过程(例如figaro)来处理秘密信息。为了简化您的生活,您可以将此信息放入secret_token.rb文件并继续 - 或者您可以了解处理这种情况的各种其他惯用方法。

答案 2 :(得分:2)

至少Rails 4.2.2给了我同样的错误,但在static/src/js/timesheet.js用户的SECRET_KEY_BASE文件中设置环境变量rails解决了我的问题,所以关于{ {1}}似乎是假的 - 可能是早期版本的延续。

通过命令.bash_profile生成秘密,然后使用文件secret_token中生成的字符串,如下所示:

rake secret

答案 3 :(得分:0)

我建议重新生成安装了最新版Rails的新应用。

此文件是在我上一个项目中自动生成的:

# config/secrets.yml
# Be sure to restart your server when you modify this file.

# Your secret key is used for verifying the integrity of signed cookies.
# If you change this key, all old signed cookies will become invalid!

# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
# You can use `rake secret` to generate a secure secret key.

# Make sure the secrets in this file are kept private
# if you're sharing your code publicly.

development:
  secret_key_base: fooooo

test:
  secret_key_base: fooooo

# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>

我还建议您通过railsdiff网站(例如:http://railsdiff.org/4.1.10.rc2/4.2.1.rc2)比较生成的文件,因为它听起来像是从旧版本升级。