即使在环境变量上设置了密钥,也会丢失密钥

时间:2016-04-17 08:43:48

标签: ruby-on-rails environment-variables

我通过运行此命令生成了本地密钥:

rake secret

然后在我的Ubuntu VPS中,我创建了这样的环境变量:

echo 'export SECRET_KEY_BASE=<locally_generated_secret_string>' >> ~/.bashrc

然后我通过运行这个来实现我的bashrc:

source ~/.bashrc

当我输入echo $SECRET_KEY_BASE时,它会向我输出此生成的字符串

然后我通过capistrano上传了我的rails应用程序并启动了它。但是,日志仍显示此错误消息:

#<RuntimeError: Missing `secret_token` and `secret_key_base` for 'production' environment, set these values in `config/secrets.yml`>

为什么会这样?

1 个答案:

答案 0 :(得分:3)

这可能是因为您的应用程序中没有任何地方可以设置它。

如果您检查了config/secrets.yml文件,则会注意到secret_key_basedevelopment都设置了test,如下所示:

development:
  secret_key_base: *******...

test:
  secret_key_base: *******...

但也许不适用于production

您需要做的是为production环境添加配置。因此,在secrets.yml文件中,您将拥有类似的内容:

development:
  secret_key_base: *******...

test:
  secret_key_base: *******...

production:
  secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
  secret_token: <%= ENV["SECRET_TOKEN"] %>

通过将secret_key_base设置为ENV["SECRET_KEY_BASE"],它将能够获取您导出到您的环境的值,同样适用于secret_token

希望这有帮助。