我最近部署了一个应用程序并因为缺少生产secret_key_base而导致内部服务器错误。经过几个小时的测试,我设法用两种方法解决了这个问题:
方法1:
我使用rake secret
生成了一个新的secret_key,并将其替换为<%= ENV["SECRET_KEY_BASE"] %>
中的secrets.yml
。再次部署应用程序,这次它工作。 但我认为这种方法不对。
方法2:
我使用rake secret
生成了一个新的secret_key,并将其添加到environments/production.rb
config.secret_key_base = 'd1f4810e662acf46a33960e3aa5bd0************************
,而不更改secrets.yml
(默认为production: <%= ENV["SECRET_KEY_BASE"] %>
)。再次部署应用程序,它工作正常。
我的问题:
答案 0 :(得分:30)
我终于找到了正确的方法。 所提到的方法都不是正确的。
正确的方法:
我们自己应该生成一个密钥(通过rake secret
),然后通过从命令提示符运行以下命令为SECRET_KEY_BASE创建一个环境变量:
rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a myapp
运行此命令后,通过SSH连接到您的服务器并运行env
,这样您就可以在列表中看到您的SECRET_KEY_BASE。
现在重启你的应用rhc app-stop myapp
和rhc app-start myapp
,然后你就可以了。
答案 1 :(得分:5)
如果您使用普通的Ubuntu计算机,只需将export SECRET_KEY_BASE=" <<< output from rake secret here >>> "
放入~/.bashrc
。
运行source ~/.bashrc
并重新启动应用。
答案 2 :(得分:3)
还有另一个选项应该更加安全,即将其添加到Apache / Nginx配置文件中。我正在使用Apache并且刚刚使用过:
SetEnv SECRET_KEY_BASE my_secret
然后将secretts.yml文件设置为: 生产:&lt;%= ENV [“SECRET_KEY_BASE”]%&gt;
对于生产Web服务器,我不确定假设运行.bashrc文件并设置ENV变量是有效的,但我认为这种方式肯定会设置它。我不是和专家那么准备有任何风险或原因为什么这不是一个好主意指出给我。
答案 3 :(得分:0)
方法1是正确的。您不希望将密码存储在代码中。