如何在 rails 中正确添加 ENV["SECRET_KEY"BASE"]

How to correctly add ENV["SECRET_KEY"BASE"] in rails

我在 passenger 和 nginx 上的 VM 运行 上设置 Rails 4.2 生产环境时遇到了困难,并且没有使用 RVM 或类似的东西。

我得到 Incomplete response received from application 并查看 nginx 错误日志,它说了一些关于 missing secret_key_basesecret_key 的内容,尽管在配置目录中的任何地方都没有提到最后一个。

I 运行 export SECRET_KEY_BASE='...' and in rails c production ENV["SECRET_KEY_BASE"] 显示密钥但在重新启动 nginx 后我仍然得到相同的错误。

将密钥直接放在秘密中解决了这个问题,但是否有正确的方法来做到这一点?

解法:

对我有用的解决方案是将 export SECRET_KEY_BASE="<string obtained from rake secret>" 放在 .bashrc

如果你使用rbenv,接受的答案中有下面的另一种解决方案。

如果您正在使用 rbenv you can add the rbenv-vars 插件并添加一个 .rbenv-vars 文件,其中包含(不要将其签入您的存储库)

SECRET_KEY_BASE='...'

其他解决方案是将 SECRET_KEY_BASE 手动添加到 secrets.yml 文件,同时从您的存储库中忽略该文件。

看到提到的第三个答案是添加

export SECRET_KEY_BASE='...'

到这些文件之一 .bashrc .bash_profile .profile

你的 config/secrets.yml 应该是

development:
  secret_key_base: f91fe2e2e4a9bf8f8b6aa1c296bb9ec10f2bc91c08965176a642ea0927400651ea993512f83d9823bcc046555e40b8c257f5f19fab8c59b5a02c9d230a369fe7

test:
  secret_key_base: c116ac7c8f69018d1f4e10f632cac7a22348f0bd8ed8f21ca45460574d2f501f248418bc888e31556e16ba3ab58c3a7cba027140097abe3f511dddf6625fa8cd

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

要设置 SECRET_KEY_BASE,首先您需要使用

生成它
rake secret

然后获取该输出并编辑您的 /etc/environment(取决于您的发行版,假设此处为 Ubuntu)并将其原样放置

SECRET_KEY_BASE=...

重新启动你的服务器,你应该是肉汁