这个回答对我很有帮助。他向您指示如何在生产环境中配置 secrets.yml 文件以及如何从环境中读取它:
原始链接:
https://dev59.com/2GAg5IYBdhLWcg3wyNdv#26172408
我遇到了同样的问题,并通过创建一个环境变量来解决它,每次登录到生产服务器时都会加载它,并制作了一份简要指南来配置它:
我使用的是Rails 4.1和Unicorn v4.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文件,你会发现像这样的内容:
不要将生产密钥保存在存储库中,
而是从环境中读取值。 production: secret_key_base: <%= ENV["SECRET_KEY_BASE"] %> 这意味着rails建议您在生产服务器上使用环境变量作为secret_key_base,为了解决这个错误,您应该按照以下步骤为Linux(在我的情况下是Ubuntu)创建一个环境变量在你的生产服务器上:
1.- 在你的生产服务器终端执行下面的命令:
$ RAILS_ENV=production rake secret
这将返回一个带有字母和数字的大字符串,复制它(我们将把那个代码称为GENERATED_CODE)。
2.1- 以root用户身份登录到您的服务器,找到这个文件并编辑它: $ vi /etc/profile
到文件底部(在VI中按"SHIFT + G"键)
使用GENERATED_CODE编写您的环境变量(VI中按"i"键编写),确保在文件末尾的新行中:
export SECRET_KEY_BASE=GENERATED_CODE 保存更改并关闭文件(我们按"ESC"键然后在VI中写":x"和"ENTER"键保存和退出)
2.2 但是如果您以普通用户(example_user)身份登录,则需要找到其他文件之一:
$ vi ~/.bash_profile $ vi ~/.bash_login $ vi ~/.profile 这些文件按重要性排序,这意味着如果您有第一个文件,则不需要在其他文件中写入。因此,如果您在目录"~/.bash_profile"和"~/.profile"中找到了这两个文件,则只需在第一个文件"~/.bash_profile"中写入即可,因为Linux将仅读取此文件,而其他文件将被忽略。
然后我们到文件底部(在VI中按"SHIFT + G"键)
我们将使用GENERATED_CODE编写我们的环境变量(VI中按"i"键编写),确保在文件末尾的新行中:
export SECRET_KEY_BASE=GENERATED_CODE 写完代码后,保存更改并关闭文件(我们按"ESC"键然后在VI中写":x"和"ENTER"键保存和退出)
3.- 您可以使用以下命令验证我们的环境变量是否正确设置在Linux中:
$ printenv | grep SECRET_KEY_BASE 或者用:
$ echo $SECRET_KEY_BASE 当您执行此命令时,如果一切正常,则会显示前面的GENERATED_CODE。最后,在完成所有配置后,您应该能够使用Unicorn或其他方式无问题地部署Rails应用程序。
当你关闭你的shell终端并再次登录到生产服务器时,你将拥有这个环境变量,并准备好使用它。
就是这样!!我希望这个小指南能帮助你解决这个错误。
免责声明:我不是Linux或Rails大师,所以如果您发现任何错误或错误,我将很乐意修复它!