【问题标题】:AWS::S3::Errors::SignatureDoesNotMatch with Paperclip and Amazon S3 in local devAWS::S3::Errors::SignatureDoesNotMatch 在本地开发中与 Paperclip 和 Amazon S3
【发布时间】:2012-06-07 11:56:52
【问题描述】:

此问题已解决。结果我花了太多时间研究这个问题,因为它似乎很常见,而且没有足够的时间仔细检查我的秘密访问密钥是否已正确复制/粘贴到我的本地环境中。

我已经阅读了大约 20 个关于此的问题,但到目前为止没有一个对我有帮助。我在我的创建控制器中不断收到 SignatureDoesNotMatch 异常,我不知道为什么。

我的班级(由于项目尚未发布,因此改名为“S3”):

class S3File < ActiveRecord::Base
  has_attached_file :s3_attachment,
    storage: :s3,
    bucket: ENV['S3_BUCKET_NAME'],
    s3_credentials: {
      access_key_id: ENV['AWS_ACCESS_KEY_ID'],
      secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
    },
    path: ':id/temp.jpg'
end

我在 .env 文件中定义 ENV 变量并使用工头启动我的服务器,并且我已在“工头运行 rails 控制台”中验证了这些值是正确的。

这对我来说从来没有用过,但到目前为止我已经尝试了几种路径,我已经安装了 imagemagick,并包含了以下 gem:

# rails -v Rails 3.2.2
# ruby -v Ruby 1.9.2p290
gem 'paperclip' # paperclip (3.0.4) in Gemfile.lock
gem 'aws-s3' # aws-s3 (0.6.3) in Gemfile.lock
gem 'aws-sdk' # aws-sdk (1.5.2) in Gemfile.lock
gem 'rmagick' # rmagick (2.13.1) in Gemfile.lock

最后我的 _form 部分看起来像:

<%= form_for @s3_file do |f| %>
  <div class="field">
    <%= f.file_field :email_attachment %>    
  </div>
  <div class="actions">
    <%= f.submit %>
  </div>
<% end %>

我会向任何需要它的人提供更多信息,但在这一点上我很难过。感谢任何能够提供帮助的人。

【问题讨论】:

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


    【解决方案1】:

    我一直看到人们尝试将 aws-s3 和 aws-sdk 一起使用,但这会cause conflicts,因为它们都使用相同的模块命名空间。我并不是说这一定是你的问题,但这绝对没有帮助。 Paperclip 需要 aws-sdk,所以我会从您的 Gemfile 中删除 aws-s3 以开始。如果您仍然遇到错误,我建议您在 has_attached_file 行上方添加一个调试器并检查 ENV 变量以确保它们确实被设置。

    【讨论】:

    • 谢谢,我会试试的。 devcenter.heroku.com/articles/s3 似乎建议将 aws-s3 与回形针一起使用,然后我收到有关需要 aws-sdk 的错误。
    • 这实际上取决于您使用的回形针版本。他们最近将其从 aws-s3 更改为 aws-sdk,因此您必须根据您使用的版本来使用 Gem。不知道他们何时进行切换,但如果您使用的是最新版本,那么 aws-sdk 就是要走的路。
    • 这不是问题的根本原因,但它确实让我能够移除我并不真正需要的宝石,并可能防止未来出现问题,所以谢谢。
    • 您是否也尝试过调试器建议?
    猜你喜欢
    • 2012-05-02
    • 2020-02-24
    • 2012-04-25
    • 2011-10-23
    • 2012-06-06
    • 2017-09-06
    • 2019-12-18
    • 2012-05-04
    • 1970-01-01
    相关资源
    最近更新 更多