ruby-on-rails rails中缺少生产secret_key_base

wxclj1h5  于 2023-02-01  发布在  Ruby
关注(0)|答案(4)|浏览(162)

我最近部署了一个应用程序,由于缺少生产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.有没有别的办法?

9nvpjoqh

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客户端)

rhc set-env SECRET_KEY_BASE=3dc8b0885b3043c0e38aa2e1dc64******************** -a myapp

对于服务器方法#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 myapprhc app-start myapp

xdnvmnnf

xdnvmnnf2#

如果你在一台普通的Ubuntu机器上,只需把export SECRET_KEY_BASE=" <<< output from rake secret here >>> "放在你的~/.bashrc中。
运行source ~/.bashrc并重新启动应用程序。

q3qa4bjr

q3qa4bjr3#

还有另一个选项应该更安全一点,那就是将其添加到Apache/Nginx配置文件中。我使用的是Apache,刚刚使用了:

SetEnv SECRET_KEY_BASE my_secret

然后将secrets.yml文件设置为:

production: <%= ENV["SECRET_KEY_BASE"] %>

对于一个生产的Web服务器,我不确定假设.bashrc文件正在运行并将得到您的ENV变量集是否有效,但我认为这种方式肯定会设置它。我还没有和Maven准备好有任何风险或原因,为什么它不是一个好主意指出给我。

cdmah0mi

cdmah0mi4#

方法1是正确的。您不希望将机密存储在代码中。

相关问题