`fetch’:找不到键:“S3_BUCKET_NAME”(KeyError)with paperclip / aws s3 / rails

我收到了'fetch': key not found: "S3_BUCKET_NAME" (KeyError)使用’aws-sdk’,’〜> 2.3’和“paperclip”,“〜> 5.0.0”在rails(4.2.3 'fetch': key not found: "S3_BUCKET_NAME" (KeyError)出现'fetch': key not found: "S3_BUCKET_NAME" (KeyError)错误

我已经通过终端在我的环境中设置了密钥,并且运行heroku config显示它们已列出。

在我的config / environments / development.rb以及我的配置production.rb中,我包括:

 config.paperclip_defaults = { storage: :s3, s3_credentials: { bucket: ENV.fetch('S3_BUCKET_NAME'), access_key_id: ENV.fetch('AWS_ACCESS_KEY_ID'), secret_access_key: ENV.fetch('AWS_SECRET_ACCESS_KEY'), s3_region: ENV.fetch('AWS_REGION'), } } 

我还在我的user.rb模型中包含了上面的代码,但为了便于参考,它在模型中看起来像这样:

 has_attached_file :avatar, styles: { medium: "300x300#", thumb: "100x100#" }, :convert_options => { :thumb => "-quality 75 -strip" }, :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 => ENV['AWS_REGION'] }, :path => ":filename.:extension", # :path => ":rails_root/public/system/:attachment/:id/:style/:filename", :default_url => "default_img.png" validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/ 

我还在我的秘密中包含了env vars.yml:

 development: secret_key_base: 817c07d41b8524495628fbe91fb1f0535ade65aa96a3fee379a8d16c29cc1f7b167f537442e547422ab17ee9700028a95896eb1c0717de06dfe7895d15ddb5ce secret_key: sk_test_xxx publishable_key: pk_test_xxx access_key_id: xxx secret_access_key: xxx s3_bucket_name: 'bucket-name' test: secret_key_base: a38e71848a4d9bc63fa8dce4522add10a4931b10e6786f0cab6a9eb1643e271b992f52fa6eff672b0d03687003099c0632477dd26b246ac4e637c52c69ec4ab0 # Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base:  secret_key:  publishable_key:  access_key_id:  secret_access_key:  s3_bucket_name:  

虽然这可能不是必需的。 谷歌搜索并浏览与此错误相关的其他几个post让我几乎没有继续 – 有没有人对这个问题有什么想法?

'fetch': key not found: "S3_BUCKET_NAME"表示环境变量S3_BUCKET_NAME没有值。

在你的情况下,你使用Heroku。 请按照以下链接中的说明操作。

对于Heroku: https : //devcenter.heroku.com/articles/config-vars 。

如果您使用ENV [‘变量’],则需要在每个环境中设置它们。 测试,生产和开发。 如果您在PC,MAC或Linux上进行开发,则需要确保已设置环境变量。

对于linux: https : //www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-a-linux-vps

对于OSX:我这样做就像linux一样,我只是通过添加这样的行在我的~/.zshrc设置它们。 如果你没有使用zshell,那么在~/.bashrc~/.bash_profile添加一行。

 export ENV_VARIABLE_NAME="value" 

对于Windows:我不知道如何,但我确定google确实如此。