【问题标题】:aws-s3 error: AWS::S3::MissingAccessKey error, but keys have been defined?aws-s3 错误:AWS::S3::MissingAccessKey 错误,但已定义键?
【发布时间】:2011-10-30 14:57:24
【问题描述】:

我对 ROR 还是很陌生。我最近在 heroku 上部署了一个应用程序,并尝试通过回形针向应用程序添加附件功能。

我已按照所有步骤将 aws-s3 添加到我的应用程序。这是我的初始代码:

user.rb(模型)

has_attached_file :avatar, 
                  :styles => {:small => "70x70>"},
                  :storage => :s3,
                  :s3_credentials => "#{RAILS_ROOT}/config/s3.yml",
                  :path => ":attachment/:id/:style/:basename.:extension"


validates_attachment_size :avatar, :less_than => 1.megabytes
validates_attachment_content_type :avatar, :content_type => ['image/jpeg', 'image/png']

s3.yml(文件位于 config 文件夹中)注意:所有这些存储桶都存在于我的 aws-s3

development:
  bucket: my_avatar-dev
  access_key_id: amazonaccesskey
  secret_access_key: amazon_secret_access_key
test:
  bucket: myapp_avatar-test
  access_key_id: amazonaccesskey
  secret_access_key: amazon_secret_access_key
production:
  bucket: myapp_avatar-pro
  access_key_id: amazonaccesskey
  secret_access_key: amazon_secret_access_key

宝石文件

gem 'aws-s3'

运行此配置时,我会在加载我的应用程序时收到错误页面 500 错误。运行Heroku logs 显示以下错误:AWS::S3::MissingAccessKey(您没有提供两个必需的访问密钥。

所以我遵循了一些建议,并使用以下代码行将 key 和 secret_key 定义为 heroku 的环境变量:

heroku config:add S3_KEY=amazonaccesskey S3_SECRET=amazon_secret_key

然后我添加了一个初始化程序来测试环境并根据环境通过密钥或 .yml 文件启动,代码如下:

initializers/s3.rb

if Rails.env == "production"
  # set credentials from ENV hash
  S3_CREDENTIALS = { :access_key_id => ENV['S3_KEY'], :secret_access_key => ENV['S3_SECRET'], :bucket => "myapp_avatar-pro"}
else
  # get credentials from YML file
  S3_CREDENTIALS = Rails.root.join("config/s3.yml")
end

user.rb 模型随后更新为以下内容:

has_attached_file :avatar, :storage => :s3, :s3_credentials => S3_CREDENTIALS

然后我部署到 heroku 并测试了应用程序,但我仍然收到相同的错误(第 500 页)和错误代码:AWS::S3::MissingAccessKey(您没有提供两个必需的访问密钥。

如果我在 heroku 中定义了变量,这怎么可能?有什么我想念的吗?有没有可能是宝石的问题?另外,我正在使用 HAML 进行样式设置......根本不确定这是否重要,但以防万一。我很迷茫,所以任何帮助将不胜感激。非常感谢!

【问题讨论】:

  • 你找到答案了吗?我遇到了同样的问题。谢谢。

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


【解决方案1】:

刚刚解决了同样的问题并搜索了许多类似的帖子。我发现上述答案中的任何可能配置,即声明模型中的所有哈希,使用 .yml 或使用初始化程序都可以在我的开发人员和 heroku 上正常工作,只要 S3 存储桶是美国标准类型> 选择就是你想要的干爽程度。

最初设置 S3 时,我使用的是欧洲存储桶。这给了我虚假的错误信息:

AWS::S3::MissingAccessKey(您没有提供两个必需的访问密钥。

我从 AWS 网站注意到:http://docs.amazonwebservices.com/general/latest/gr/index.html?rande.html AWS 为每个区域使用特定的端点地址来减少延迟,并且我猜测(因为我是新手编码员)美国标准要么是默认的,要么是编码到 AWS-S3 插件中的。 (也许有人可以将其编辑为更完整的答案?)

【讨论】:

    【解决方案2】:

    我用这个解决了这个问题:

    :s3_credentials => {
      :access_key_id => 'mykey',
      :secret_access_key => 'mykey'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-03
      • 2012-05-02
      • 2017-08-10
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多