【发布时间】:2019-12-08 22:30:24
【问题描述】:
该主题的末尾嵌入了一个解决方案。
问题
我第一次在 Ubuntu 18.04 的 VPS 上部署 Rails 应用程序。与 Nginx。 我遵循了Gorails“在 2019 年将 Ruby on Rails 部署到生产环境”的好教程。 一切正常,直到我看到“从应用程序收到不完整的响应”页面。
我检查了/var/log/nginx/error.log上的nginx日志,看到了典型的消息“缺少secret_key_base for 'production' environment, set this string with rails credentials:edit”
由于 Gorails 的方法似乎不起作用(在他的控制台应用程序端的 bundle exec rails secret 之后,他添加了一个文件 /my_website/.rbenv-vars 与 SECRET_KEY_BASE 行,填充生成的密钥) ,我决定按照多个主题回答这个问题。
东西是这样的,不知道下面的步骤是不是货。
- 我以部署用户身份在服务器端控制台上运行
bundle exec rails secret。所以我有我的 GENERATED_KEY_1 - 我添加到
~/.bashrc:export SECRET_KEY_BASE="GENERATED_KEY_1" - 我
source ~/.bashrc - 我使用
echo $SECRET_KEY_BASE检查我的密钥,并显示了正确的密钥 (GENERATED_KEY_1) - 我将我的凭据文件编辑为
development:
secret_key_base: ORIGINAL_KEY
test:
secret_key_base: ORIGINAL_KEY
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
并将 Dotenv 添加到我的 Gemfile 中,在 application.rb 中需要它
但是在重新启动 nginx 服务器后,这些都不起作用。 所以我用 root 用户重新开始了上一步。
但又一次失败了。 我的问题是:
- 我错过了什么?
- 我怎么知道它是否在正确的地方搜索密钥,因为我总是收到相同的错误消息?
- 我应该生成哪个密钥?应用端?服务器端 ?作为 root 用户还是部署用户?
- 我在 /etc/nginx/sites-available/default 中还有什么要配置的吗? (我在 topic 上看到这家伙改了
rails_env production; to rails_env development;但我没有任何铁路线)
谢谢你,我有点绝望了^^
解决方案
在我的许多测试中,我使用 root 用户登录,并运行 EDITOR="vim" rails credentials:edit。此命令生成了一个 master.key,但您的 Github 存储库中不存在该文件。
但首先,我没有修改它。我认为这是主要问题,因为应用程序使用它来解密您的 credentials.yml.enc 文件。当我理解它时,我在我的电脑应用程序上用master.key 的内容编辑了master.key。
即使在编辑 credentials.yml.enc 和 <%= ENV["SECRET_KEY_BASE"] %> 之后,此解决方案仍然有效。这对应Lyzard Kyng的答案,虽然有点不一样。
我无法使用部署用户运行EDITOR="vim" rails credentials:edit,它不起作用。
【问题讨论】:
-
Nginx 有自己的 shell 环境,它不会读取你的配置文件的
~/.bashrc。因此,如果您使用 Dotenv,您应该将SECRET_KEY_BASE="GENERATED_KEY_1"放在应用程序根目录下的.env.production文件中。
标签: ruby-on-rails nginx capistrano ubuntu-18.04