缺少'secret_key_base`用于'生产'环境

时间:2014-06-13 12:49:37

标签: ruby-on-rails ruby-on-rails-4 nginx

我的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

4 个答案:

答案 0 :(得分:7)

它期待一个环境变量,您可以在自己的代码中,bash profiledotenv 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。选项包括:“开发:”,“测试:”和“生产:”,并且必须填写完整的单词。