繁体   English   中英

Rails 4 Sidekiq图像上传到Amazon S3

[英]Rails 4 Sidekiq image upload to Amazon S3

大家好,

我正在使用S3 gem将图像上传到我的Amazon S3存储桶。 我不想使用回形针或载波。 所以我在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")

然后我有一个亚马逊工人来异步执行这项工作:

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_message"=>"Invalid key name: " ,我不认为您的问题出在sidekiq上,而在aws-s3 gem -我猜您正在根据您的问题使用, 此SO帖子似乎引用了gem的类似错误。

我会考虑使用aws-sdk gem ,我知道当您只需要S3时,它们会给您很多东西,但是我转了一会儿就可以了,它由Amazon维护, 文档直接上传到S3很简单。

希望这可以帮助

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM