11

在 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 应用程序时,会生成一个唯一的密钥并将其写入 config/initializers/secret_token.rb 文件。

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

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

4

4 回答 4

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["SECRET_KEY_BASE"] 时,这就是 Engine Yard 有点扭曲的地方——我们还没有开箱即用地提供它。只要您的仓库是私有的,您就可以自己在其中硬编码一些东西。否则,使用自定义厨师可以通过创建一个秘密密钥库并将其放入负责启动您的应用程序工作进程的包装脚本中(例如,我们平台上的 config/env.custom)来解决您的问题。

希望这可以帮助。

于 2015-02-27T14:34:46.713 回答
2

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

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

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

于 2015-02-27T14:20:52.520 回答
2

至少 Rails 4.2.2 给了我同样的错误,但是SECRET_KEY_BASErails用户.bash_profile文件中设置环境变量为我解决了这个问题,所以关于这个问题secret_token似乎是假的——可能是早期版本的保留。

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

export SECRET_KEY_BASE='the_output_of_the_rake_secret_command'
于 2015-08-27T04:00:30.593 回答
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 )比较生成的文件,因为听起来您是从旧版本升级。

于 2015-02-27T14:19:39.373 回答