【发布时间】:2013-12-10 13:56:23
【问题描述】:
大家好,
我正在使用 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。
【问题讨论】:
标签: ruby-on-rails upload amazon-s3 amazon sidekiq