2013-12-10 3 views
0

Привет всем,Rails 4 Sidekiq загрузка изображений на Amazon S3

Я использую S3 gem для загрузки изображений на мой Amazon S3 ведро. Я не хочу использовать скрепку или несущую. Так я есть инициализатор на моих рельсам 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.

ответ

1

Глядя на сообщение об ошибке, особенно "error_message"=>"Invalid key name: ", я не думаю, что ваша проблема с sidekiq, но с aws-s3 gem - который я предполагаю, что вы пользуетесь на основе вашего вопроса, this SO post кажется, ссылаться на подобную ошибку с драгоценный камень.

Я бы рассмотреть вопрос об использовании aws-sdk gem вместо этого, я знаю, что это очень много материала, который они дают вам в камне, когда вам просто нужно S3, но я переключил некоторое время назад, и он работает, он поддерживается Amazon и documentation загрузить на S3 прямо прямо.

Надеется, что это помогает

+0

нормально будет, возможно, перейти на AWS-SDk драгоценного камень –

+0

Круто, дайте мне знать, если это работает для вас, удач – user2262149

+0

Перешли AWS-SDk драгоценного камень и он прекрасно работает! Спасибо за помощь. –

Смежные вопросы