【发布时间】:2015-05-23 16:10:37
【问题描述】:
我的 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.
真的不知道还能尝试什么。
【问题讨论】:
-
您是否检查过您是否在 production.rb 上调用了 Amazon S3 凭证?而不是在 environment/development.rb 或 enviroments/test.rb 中。
-
不完全确定您的意思。你能指定我在哪里可以检查你的意思吗?使用
ENV['S3_ACCESS_KEY']的代码部分在生产和开发中写入 S3 存储桶。 -
如果在生产中。rb 没问题。有时我们忘记投入生产,只在本地工作而不是在 Heroku 中工作的开发。
-
通常连接到 Amazon S3 的凭证放在 config/environments/(production.rb/development.rb/test.rb)
-
我在环境文件夹中基本上没有任何代码。我刚刚在终端输入了
heroku config:set S3_ACCESS_KEY=<access key>。我在控制器和模型方法中有s3 = Aws::S3::Resource.new(credentials: Aws::Credentials.new(ENV['S3_ACCESS_KEY'],ENV['S3_SECRET_KEY']),region: ENV['AWS_REGION'] )之类的代码。
标签: ruby-on-rails ruby ruby-on-rails-4 heroku environment-variables