Ruby on rails Rails 4 Sidekiq图像上传到Amazon S3

Ruby on rails Rails 4 Sidekiq图像上传到Amazon S3,ruby-on-rails,upload,amazon-s3,amazon,sidekiq,Ruby On Rails,Upload,Amazon S3,Amazon,Sidekiq,大家好, 我正在使用s3gem将图像上传到我的amazons3bucket。 我不想用回形针或纸夹。 因此,我在rails 4应用程序中有一个初始值设定项: AWS_S3 ||= S3::Service.new(:access_key_id => AWS_ACCESSKEY_Id, :secret_access_key => AWS_SECRET_KEY) S3 ||= AWS_S3.buckets.find("my_bucket_name") 然后,我有一个Amazon work

大家好,

我正在使用
s3gem
将图像上传到我的amazons3bucket。 我不想用回形针或纸夹。 因此,我在rails 4应用程序中有一个初始值设定项:

AWS_S3 ||= S3::Service.new(:access_key_id => AWS_ACCESSKEY_Id, :secret_access_key => AWS_SECRET_KEY)
S3 ||= AWS_S3.buckets.find("my_bucket_name")
然后,我有一个Amazon worker异步执行作业:

class AmazonWorker 
  include Sidekiq::Worker  

  def perform(current_user)
    User.find(current_user).products.each do |i|
    photo = S3.objects.build("i.photo_name")
    photo.content = open("http://www.myphoto.com/photo.jpg")
    photo.save
    end
  end
end
我通过使用以下方法调用它来执行作业:

AmazonWorker.perform_async(@current_user.id)
当我在本地测试它时,它正在工作。 但在我的heroku生产服务器上,我遇到了以下错误:

2013-12-10T13:37:56Z 2 TID-or2zt0omw AmazonWorker JID-xx155c13f6d0a3c29012b789 INFO: start
2013-12-10T13:37:56Z 2 TID-or2zt0omw AmazonWorker JID-xx155c13f6d0a3c29012b789 INFO: fail: 0.01 sec
2013-12-10T13:37:56Z 2 TID-or2zt0omw WARN: {"retry"=>true, "queue"=>"default", "class"=>"AmazonWorker", "args"=>[3], "jid"=>"xx155c13f6d0a3c29012b789", "enqueued_at"=>1386682676.8495147, "error_message"=>"Invalid key name: ", "error_class"=>"ArgumentError", "failed_at"=>2013-12-10 13:37:56 UTC, "retry_count"=>0}
2013-12-10T13:37:56Z 2 TID-or2zt0omw WARN: Invalid key name:
2013-12-10T13:37:56Z 2 TID-or2zt0omw WARN: /app/vendor/bundle/ruby/2.0.0/gems/s3-0.3.17/lib/s3/object.rb:31:in `key='
/app/vendor/bundle/ruby/2.0.0/gems/s3-0.3.17/lib/s3/object.rb:210:in `initialize'
/app/vendor/bundle/ruby/2.0.0/gems/s3-0.3.17/lib/s3/objects_extension.rb:5:in `new'
/app/vendor/bundle/ruby/2.0.0/gems/s3-0.3.17/lib/s3/objects_extension.rb:5:in `build'
/app/app/workers/amazon_worker.rb:6:in `block in perform'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.1/lib/active_record/relation/delegation.rb:13:in `each'
/app/vendor/bundle/ruby/2.0.0/gems/activerecord-4.0.1/lib/active_record/relation/delegation.rb:13:in `each'
/app/app/workers/amazon_worker.rb:5:in `perform'
/app/vendor/bundle/ruby/2.0.0/gems/sidekiq-2.17.0/lib/sidekiq/processor.rb:49:in `block (3 levels) in process'
/app/vendor/bundle/ruby/2.0.0/gems/sidekiq-2.17.0/lib/sidekiq/middleware/chain.rb:122:in `call'
/app/vendor/bundle/ruby/2.0.0/gems/sidekiq-2.17.0/lib/sidekiq/middleware/chain.rb:122:in `block in invoke'
/app/vendor/bundle/ruby/2.0.0/gems/newrelic_rpm-3.7.0.177/lib/new_relic/agent/instrumentation/sidekiq.rb:30:in `block in call'
我做错了什么


非常感谢JD。

查看错误消息,尤其是
“error\u message”=>“无效的密钥名:”
,我认为您的问题不在于sidekiq,而在于-我猜您根据您的问题使用的-似乎引用了gem的类似错误

我会考虑使用,我知道这是他们在GEM中给你的很多东西,当你只需要S3,但我切换了一段时间,它的工作,它是由亚马逊保持,直接上传到S3是直接的。


希望这有助于

切换到aws sdk gem,它工作得很好!谢谢你的帮助。