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