我使用'aws-sdk','〜>在rails(4.2.3)中收到'fetch': key not found: "S3_BUCKET_NAME" (KeyError)
错误2.3'和“paperclip”,“〜> 5.0.0”
我已经通过终端在我的环境中设置了密钥,并且运行heroku config
显示它们已列出。
在我的config / environments / development.rb以及我的config 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: <%= ENV["SECRET_KEY_BASE"] %>
secret_key: <%= ENV["SECRET_KEY"] %>
publishable_key: <%= ENV["PUBLISHABLE_KEY"] %>
access_key_id: <%= ENV['AWS_ACCESS_KEY_ID'] %>
secret_access_key: <%= ENV['AWS_SECRET_ACCESS_KEY'] %>
s3_bucket_name: <%= ENV["S3_BUCKET_NAME"]%>
虽然可能不需要。谷歌搜索并浏览与此错误相关的其他几个帖子让我几乎没有继续 - 有没有人对这个问题有什么想法?
答案 0 :(得分:1)
'fetch': key not found: "S3_BUCKET_NAME"
表示环境变量S3_BUCKET_NAME没有值。
在您的情况下,您使用的是Heroku。请按照以下链接中的说明操作。
对于Heroku:https://devcenter.heroku.com/articles/config-vars。
如果您使用ENV [&#39;变量&#39;],您需要在每个环境中设置它们。测试,生产和开发。如果您在PC,MAC或Linux上进行开发,则需要确保设置了环境变量。
对于OSX:
我这样做就像linux一样,我只是通过添加这样的行在我的~/.zshrc
中设置它们。如果您没有使用zshell,请在~/.bashrc
或~/.bash_profile
添加一行。
export ENV_VARIABLE_NAME="value"
对于Windows: 我不知道怎么做,但我确信google确实如此。