我使用 Rails 4.1 从头开始创建了一个 Rails 应用程序,但我遇到了一个我无法解决的奇怪问题。
每次我尝试在 Heroku 上部署我的应用程序时,都会收到错误 500:
Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml`
该secret.yml文件包含以下配置:
secret.yml
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
在 Heroku 上,我使用命令SECRET_KEY_BASE的结果配置了 ” ” 环境变量rake secret。如果我启动heroku config,我可以看到具有正确名称和值的变量。
SECRET_KEY_BASE
rake secret
heroku config
为什么我仍然收到此错误?
我遇到了同样的问题,并通过创建一个环境变量来解决它,每次我登录到生产服务器时都要加载它,并制作了一个配置它的步骤的迷你指南:
我将 Rails 4.1 与 Unicorn v4.8.2 一起使用,当我尝试部署我的应用程序时,它没有正确启动,在unicorn.log文件中我发现了以下错误消息:
unicorn.log
app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
secret_key经过一番研究,我发现 Rails 4.1 改变了secrets.yml管理exampleRailsProject/config/secrets.yml.
secret_key
secrets.yml
exampleRailsProject/config/secrets.yml
# Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
这意味着 Rails 建议您secret_key_base在生产服务器中使用环境变量。为了解决此错误,您应该按照以下步骤在生产服务器中为 Linux(在我的情况下为 Ubuntu)创建环境变量:
secret_key_base
$ RAILS_ENV=production rake secret
这将返回一个带有字母和数字的大字符串。复制它,我们将该代码称为GENERATED_CODE.
GENERATED_CODE
登录到您的服务器
$ vi /etc/profile
在 vi 中使用Shift+ (大写“G”)转到文件底部。G
Shift
G
用 写你的环境变量GENERATED_CODE,按i在 vi 中插入。确保在文件末尾换行:
i
$ export SECRET_KEY_BASE=GENERATED_CODE
保存更改并使用“ ”关闭文件Esc,然后在 vi 中保存并退出。:x``Enter
Esc
:x``Enter
* 但是,如果您以普通用户身份登录,我们将其称为“ `example_user`”作为此要点,您将需要找到以下其他文件之一: $ vi ~/.bash_profile $ vi ~/.bash_login $ vi ~/.profile
这些文件按重要性排序,这意味着如果您拥有第一个文件,则无需编辑其他文件。如果你在你的目录中找到了这两个文件,~/.bash_profile你~/.profile只需要写入第一个~/.bash_profile,因为 Linux 将只读取这个,而另一个将被忽略。
~/.bash_profile
~/.profile
Shift然后我们再次使用+进入文件底部,再次使用我们的using G写入环境变量,并确保在文件末尾添加一个新行:GENERATED_CODE``i
GENERATED_CODE``i
编写代码后,保存更改并Esc再次使用“ :x”关闭文件并Enter保存并退出。
:x
Enter
$ printenv | grep SECRET_KEY_BASE
或与:
$ echo $SECRET_KEY_BASE
当您执行此命令时,如果一切正常,它将显示您GENERATED_CODE之前的状态。最后,完成所有配置后,您应该能够使用 Unicorn 或其他工具毫无问题地部署 Rails 应用程序。
当您关闭 shell 并再次登录到生产服务器时,您将设置此环境变量并准备好使用它。
就是这样!我希望这个迷你指南可以帮助您解决这个错误。
免责声明:我不是 Linux 或 Rails 专家,所以如果您发现有问题或任何错误,我将很乐意修复它。