我最近部署了一个应用程序,由于缺少生产secret_key_base
而得到了一个内部服务器错误。经过几个小时的测试,我设法用两种方法解决了这个问题:
- 方法一:**
我使用rake secret
生成了一个新的secret_key,并将其替换为secrets.yml
中的<%= ENV["SECRET_KEY_BASE"] %>
。再次部署应用,这次成功了。但我认为此方法是错误的。
- 方法二:**
我用rake secret
生成了一个新的secret_key,并像config.secret_key_base = 'd1f4810e662acf46a33960e3aa5bd0************************
一样将其添加到environments/production.rb
中,而没有更改secrets.yml
(默认为production: <%= ENV["SECRET_KEY_BASE"] %>
)。再次部署应用程序,它工作正常。
- 我的问题:**
1.哪种方法最好?
1.如果第二种方法是正确的,为什么rails没有默认在 * production. rb * 中生成secret_key_base?
1.有没有别的办法?
4条答案
按热度按时间9nvpjoqh1#
用于本地开发使用
rails secret
生成密码方法#1:将此机密存储在
.bashrc
或.zshrc
中参见https://apple.stackexchange.com/questions/356441/how-to-add-permanent-environment-variable-in-zsh了解
方法#2:使用 *dotenv宝石 *
一旦安装了这个gem,就可以在Rails应用程序的根目录下创建一个
.env
文件,该文件不会签入到源代码控制中。https://github.com/bkeepers/dotenv
方法#3(如果使用
rhc
Openshift客户端)对于服务器方法#1:黑六
选项1:将SECRET_KEY_BASE直接存储到环境
heroku config:set SECRET_KEY_BASE=xxxx
中选项2:存储使用应用加密的密钥,并使用
master.key
文件进行解密。方法#2:对于AWS,使用AWS Secret Manager存储主密钥。
方法#3:* 适用于RHC开档 *
通过SSH连接到您的服务器并运行
env
,这样您应该会在列表中看到您的SECRET_KEY_BASE。现在重新启动应用程序
rhc app-stop myapp
和rhc app-start myapp
xdnvmnnf2#
如果你在一台普通的Ubuntu机器上,只需把
export SECRET_KEY_BASE=" <<< output from rake secret here >>> "
放在你的~/.bashrc
中。运行
source ~/.bashrc
并重新启动应用程序。q3qa4bjr3#
还有另一个选项应该更安全一点,那就是将其添加到Apache/Nginx配置文件中。我使用的是Apache,刚刚使用了:
然后将secrets.yml文件设置为:
对于一个生产的Web服务器,我不确定假设
.bashrc
文件正在运行并将得到您的ENV变量集是否有效,但我认为这种方式肯定会设置它。我还没有和Maven准备好有任何风险或原因,为什么它不是一个好主意指出给我。cdmah0mi4#
方法1是正确的。您不希望将机密存储在代码中。