我的nginx error.log中有错误Missing 'secret_key_base' for 'production' environment
。当我打开我的秘密。时,我看到:
development:
secret_key_base: 123...
test:
secret_key_base: 321...
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
在哪里定义了SECRET_KEY_BASE?我应该把它添加到某个地方吗?
因此,nginx为我的Rails App显示502 Bad Gateway
。 Rails版本4.1.1
答案 0 :(得分:7)
它期待一个环境变量,您可以在自己的代码中,bash profile或dotenv file中设置自己的代码。
有关详细信息,请参阅Is it possible to set ENV variables for rails development environment in my code?。
就个人而言,我只是将所有敏感内容直接放在secrets.yml中,并将其保留在存储库中,因为这似乎是该文件的预期用途。
答案 1 :(得分:0)
简单修复就是:
development:
secret_key_base: 123...
test:
secret_key_base: 321...
# Do not keep production secrets in the repository,
# instead read values from the environment.
production:
secret_key_base: 123... # make/rebuild similar hash as defined in development and test variables
答案 2 :(得分:0)
以下是我在生产部署脚本中的操作:
export SECRET_KEY_BASE=${SECRET_KEY_BASE:=`rake secret`}
仅当SECRET_KEY_BASE
为空时,这将占用环境变量rake secret
,结果为SECRET_KEY_BASE
。
答案 3 :(得分:0)
注意,如果您正在运行Rails 4.2.5.1(或者可能是Rails 4.2的任何风格?),您可能会发现,即使在生产目录中存在secrets.yml,如果运行WEBrick,它也不会被提取。我正在运行一个小型的rails网站,只在本地局域网上(不暴露于世界)。如果我使用命令行启动(在生产中):
type
网络服务器启动正常,但是从浏览器中,我得到“Missing secret_token和secret_key_base for'p'environment ...”错误。但是,如果我用:
启动服务器rails server -b 0.0.0.0 -p 3000 -e p
然后一切正常,因为secretts.yml文件被正确访问。 '-e'选项后面提供的字符串确定在secrets.yml文件中拾取了哪个secret_key_base。选项包括:“开发:”,“测试:”和“生产:”,并且必须填写完整的单词。