在rails中缺少生产secret_key_base

use*_*047 31 deployment ruby-on-rails ruby-on-rails-4

我最近部署了一个应用程序并因为缺少生产secret_key_base而出现内部服务器错误.经过几个小时的测试,我设法用两种方法解决了这个问题:

方法1:

我生成了一个新的secret_key,rake secret并将其替换为<%= ENV["SECRET_KEY_BASE"] %>in secrets.yml.再次部署应用程序,这次它工作.但我认为这种方法是错误的.

方法2:

我生成了一个新的secret_key rake secret并将其添加到environments/production.rblike config.secret_key_base = 'd1f4810e662acf46a33960e3aa5bd0************************,而不更改secrets.yml(默认为production: <%= ENV["SECRET_KEY_BASE"] %>).再次部署应用程序,它工作正常.

我的问题:

  1. 哪种方法最好?
  2. 如果第二种方法是正确的,为什么rails默认情况下不会在production.rb中生成secret_key_base?
  3. 有没有其他方法可以做到这一点?

use*_*047 30

我终于找到了正确的方法.所提到的方法都不是正确的方法.

正确的方法:

我们自己应该生成一个密钥(by rake secret),然后通过从命令提示符运行以下命令为SECRET_KEY_BASE创建一个环境变量:

rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a myapp
Run Code Online (Sandbox Code Playgroud)

运行此命令后,通过SSH连接到您的服务器并运行,env以便您在列表中看到您的SECRET_KEY_BASE.

现在重新启动你的应用程序rhc app-stop myapprhc app-start myapp,那么你是好去.

  • 这个rhc方法只有在openshift.redhat.com上托管时才可用? (3认同)

小智 5

如果您使用的是普通的Ubuntu计算机,则只需放入export SECRET_KEY_BASE=" <<< output from rake secret here >>> "您的~/.bashrc

运行source ~/.bashrc并重新启动该应用程序。