ENV变量没有被转移到Paperclip?

时间:2014-06-12 15:42:16

标签: ruby-on-rails ruby-on-rails-3 heroku ruby-on-rails-4

所以,我的paperclip.rb文件中有以下代码:

# Paperclip config
  config.paperclip_defaults = {
      :storage => :s3,
      :s3_credentials => {
        :bucket => ENV['S3_BUCKET_NAME'],
        :access_key_id => ENV['AWS_ACCESS_KEY_ID'],
        :secret_access_key => ENV['AWS_SECRET_ACCESS_KEY'],
        :region => 'oregon'
      }
    }

正如您所看到的,我正在使用ENV变量来保护密钥。我还使用application.yml文件来实际存储密钥,如下所示:

S3_BUCKET_NAME: "*bucketname"
AWS_ACCESS_KEY_ID: "*keys here*"
AWS_SECRET_ACCESS_KEY: "*keys here*"

出于某种原因,当我运行涉及回形针和S3的迁移时,键没有被转移到Paperclip ENV变量,并且我得到了一个缺失的键错误。

我做错了什么?

谢谢!

编辑错误:

AWS::S3::Errors::InvalidAccessKeyId: The AWS Access Key Id you provided does not exist in our records.
/usr/local/rvm/gems/ruby-2.1.1/gems/aws-sdk-1.39.0/lib/aws/core/client.rb:374:in `return_or_raise'
/usr/local/rvm/gems/ruby-2.1.1/gems/aws-sdk-1.39.0/lib/aws/core/client.rb:475:in `client_request'

1 个答案:

答案 0 :(得分:3)

Heroku上,您必须通过运行以下命令来设置每个环境变量:

$ heroku config:set key ="value"

例如:

$ heroku config:set S3_BUCKET_NAME ="your_bucket_name"

当您使用figaro gem时,您将获得一个现成的figaro命令,您可以使用该命令一次性设置配置文件application.yml中的值:

$ figaro heroku:set -e production

要验证设置变量,请使用以下命令列出所有设置的环境变量:

$ heroku config

有关详细信息,请参阅Heroku: Configuration and Config VarsFigaro on Heroku

<强>更新

在开发环境中,

确保您运行rails generate figaro:install命令,该命令会创建config/application.yml文件,并将其添加到您的.gitignore文件中。

application.yml中添加配置:

S3_BUCKET_NAME: "your_bucket_name"
AWS_ACCESS_KEY_ID: "your_access_key_id"
AWS_SECRET_ACCESS_KEY: "your_secret_access_key"

确保config.paperclip_defaults中的密钥名称与application.yml中指定的密钥完全匹配 重启服务器后,加载配置。