我的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.
真的不知道还有什么可以尝试。
答案 0 :(得分:0)
您正在混淆Heroku环境和本地开发环境,它们是不同且无关的。 heroku config:set
命令的作用与将变量放在命令前面完全相同,但它是在部署到Heroku时运行应用程序。但是,当您在本地计算机上运行应用程序时,可以在命令行中提供变量。
此外,您不应该向公众公开S3凭据,例如,永远不要将带有凭据的secrets.yml
提交到公共GitHub仓库中,因为它们会被盗并用于自费运行服务器 - { {3}}。环境变量是凭证的好地方。