在本地开发中使用Paperclip和Amazon S3的AWS :: S3 :: Errors :: SignatureDoesNotMatch

时间:2012-06-07 11:56:52

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

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

我已经阅读了大约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变量并使用foreman启动我的服务器,并且我已经在'foreman run rails console'中验证了这些值是正确的。

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

# 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 %>

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

1 个答案:

答案 0 :(得分:0)

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