ruby-on-rails - `fetch' : key not found: "S3_BUCKET_NAME" (KeyError) with paperclip/aws s3/rails

标签 ruby-on-rails ruby heroku amazon-s3 paperclip

我在 rails (4.2.3) 使用 'aws-sdk'、'~> 2.3' 和“回形针", "~> 5.0.0"

我已经通过终端在我的环境中设置了 key ,并且运行 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/

我还在我的 secrets.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"]%>

虽然这可能不是必需的。谷歌搜索并浏览与此错误相关的 SO 上的其他几篇文章让我没什么可继续的 - 有人对问题可能有什么想法吗?

最佳答案

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

在您的情况下,您使用的是 Heroku。按照以下链接中的说明进行操作。

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

如果您使用 ENV['variables'],则需要在每个环境中设置它们。测试、生产和开发。如果您在 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: 我不知道怎么做,但我相信谷歌会这样做。

关于ruby-on-rails - `fetch' : key not found: "S3_BUCKET_NAME" (KeyError) with paperclip/aws s3/rails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38776246/

相关文章:

ruby-on-rails - 在 Ruby 中找到一个数组元素并将其设置为 last?

ruby - 按内部数组中的某个值对数组的数组进行排序

javascript - 客户端验证和 Rails4

ruby-on-rails - 使用 Devise ldap 身份验证时出现编码错误

反转正则表达式的 Rubyish 方式

php - 两个 Ajax 调用不能同时工作 (heroku)

node.js - Nodejs GM 模块 ImageMagick - 奇怪的错误

linux - Heroku 上的 Electron 应用程序和与 libpng12.so.0 相关的错误 :

ruby-on-rails - Ruby On Rails 开发机

ruby-on-rails - .join/has_one 的 ActiveRecord .where :through