似乎无法从环境中提取配置变量(Heroku)

时间:2015-05-23 16:10:37

标签: ruby-on-rails ruby ruby-on-rails-4 heroku environment-variables

我的Rails应用程序似乎无法从环境中提取配置变量。当凭证是硬编码时,表单工作正常,但是当我尝试使用环境变量时,表单失败。怎么可能出错?我可能犯了一个基本错误,因为我只是一个新手程序员。

我在终端设置了环境变量。如果我输入heroku config,则确认它已正确存储了访问密钥。例如:

heroku config:set S3_ACCESS_KEY=<access key>

在我的代码中,我将硬编码的访问密钥替换为例如:

ENV['S3_ACCESS_KEY']

在开发服务器上,它现在会生成与凭据相关的错误消息。例如:

unable to sign request without credentials set

如果我将凭据留空,这是我得到的相同错误消息。所以似乎它没有加载/初始化环境变量......?

如果我输入'ENV["S3_ACCESS_KEY"]'而不是ENV['S3_ACCESS_KEY'],我会收到消息:The AWS Access Key Id you provided does not exist in our records。如果我在硬编码凭证中输入错误的凭证,这就是我得到的相同消息。

任何想法可能出错?我可以采取哪些步骤来找到原因?

更新:使用以下命令开始开发,解决它。任何人都可以解释如何进一步解决这个问题,以便我不必每次都以这种方式启动服务器吗? 我是否应该以某种方式将密钥添加到secrets.yml?但是我在云端进行编程,如果其他能够访问我的代码的程序员看不到密钥,我会更喜欢它。

S3_ACCESS_KEY=<myaccesskey> S3_SECRET_KEY=<mysecretkey> rails server

更新2:如果我添加到secrets.yml

secrets.yml:
development:
S3_ACCESS_KEY: ENV['S3_ACCESS_KEY']

Model method:
Rails.application.secrets.S3_ACCESS_KEY

我收到错误:

The AWS Access Key Id you provided does not exist in our records.

如果我改为使用:

secrets.yml:
development:
S3_ACCESS_KEY: <my access key>

Model method:
Rails.application.secrets.S3_ACCESS_KEY

我收到错误消息:

The request signature we calculated does not match the signature you provided. Check your key and signing method.

真的不知道还有什么可以尝试。

1 个答案:

答案 0 :(得分:0)

您正在混淆Heroku环境和本地开发环境,它们是不同且无关的。 heroku config:set命令的作用与将变量放在命令前面完全相同,但它是在部署到Heroku时运行应用程序。但是,当您在本地计算机上运行应用程序时,可以在命令行中提供变量。

此外,您不应该向公众公开S3凭据,例如,永远不要将带有凭据的secrets.yml提交到公共GitHub仓库中,因为它们会被盗并用于自费运行服务器 - { {3}}。环境变量是凭证的好地方。