我也遇到了同样的问题,并通过创建一个环境变量来解决,该变量将在每次登录到生产服务器时加载,并执行了mini-guide个配置步骤:
我在Unicorn v4上使用Rails 4.1.8.2当我试图部署我的应用程序时,它没有正确启动,在unicorn.log
文件中,我发现了以下错误消息:
app error: Missing `secret_key_base` for 'production' environment, set this value in `config/secrets.yml` (RuntimeError)
经过一些研究,我发现Rails 4.1改变了管理secret_key
的方式,所以如果你阅读exampleRailsProject/config/secrets.yml
中的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
"和保存并退出vi.
但是,如果您以普通用户身份登录,我们将其称为"example_user
",以了解这一要点,您将需要找到以下其他文件之一:
$ vi ~/.bash_profile
$ vi ~/.bash_login
$ vi ~/.profile
这些文件按重要性排序,这意味着如果你有第一个文件,那么你就不需要编辑其他文件.如果在目录~/.bash_profile
和~/.profile
中找到这两个文件,只需在第一个~/.bash_profile
中写入,因为Linux将只读取这一个,而忽略另一个.
然后我们再次使用Shift+G进入文件的底部,再次使用i写入环境变量,并确保在文件末尾添加一行新行:
$ export SECRET_KEY_BASE=GENERATED_CODE
编写代码后,保存更改并再次使用Esc关闭文件,然后使用":x
"和Enter键保存并退出.
您可以使用以下命令验证我们的环境变量是否在Linux中正确设置:
$ printenv | grep SECRET_KEY_BASE
或者:
$ echo $SECRET_KEY_BASE
当你执行这个命令时,如果一切正常,它会显示之前的GENERATED_CODE
.最后,完成所有配置后,您应该能够使用Unicorn或其他工具毫无问题地部署Rails应用程序.
当您关闭shell并再次登录到生产服务器时,您将设置此环境变量并准备使用它.
就这样!我希望这mini-guide能帮助你解决这个错误.
免责声明:我不是Linux或Rails专家,所以如果您发现一些错误或任何错误,我将很乐意修复它.