2013-12-23 8 views
1

Может кто-нибудь сказать мне, почему я получаю следующее сообщение об ошибке от Sidekiq:Rails - Sidekiq ошибка Uninitialized Constant

NameError: uninitialized constant ImageWorker::DIRECT_UPLOAD_URL_FORMAT

приложение/модели/choice.rb

class Choice < ActiveRecord::Base 

#Environment-specific direct upload url verifier screens for malicious posted upload locations. 
    DIRECT_UPLOAD_URL_FORMAT = %r{\Ahttps:\/\/s3-us-west-1\.amazonaws\.com\/mybucket\/(?<path>uploads\/.+\/(?<filename>.+))\z}.freeze 

    after_commit :queue_processing 

    protected 
    # Queue file processing 
    def queue_processing 
     ImageWorker.perform_async(id) 
    end 
end 

приложение/рабочие/image_worker.rb

class ImageWorker 
    include Sidekiq::Worker 

    def perform(id) 
    choice = Choice.find(id) 
    direct_upload_url_data = DIRECT_UPLOAD_URL_FORMAT.match(choice.direct_upload_url) 
    s3 = AWS::S3.new 

    if choice.post_process_required? 
     choice.picture = URI.parse(URI.escape(choice.direct_upload_url)) 
    else 
     paperclip_file_path = "documents/uploads/#{id}/original/#{direct_upload_url_data[:filename]}" 
    s3.buckets[Rails.configuration.aws[:bucket]].objects[paperclip_file_path].copy_from(direct_upload_url_data[:path]) 
    end 

    choice.processed = true 
    choice.save 

    s3.buckets[Rails.configuration.aws[:bucket]].objects[direct_upload_url_data[:path]].delete 
    end 
end 

Любая помощь будет замечательной!

ответ

2

Вы должны двигаться следующую строку в ImageWorker класс:

DIRECT_UPLOAD_URL_FORMAT = %r{\Ahttps:\/\/s3-us-west-1\.amazonaws\.com\/mybucket\/(?<path>uploads\/.+\/(?<filename>.+))\z}.freeze 

Или, в противном случае, используйте полный путь к файлу константы: DIRECT_UPLOAD_URL_FORMAT так:

direct_upload_url_data = Choice::DIRECT_UPLOAD_URL_FORMAT.match(choice.direct_upload_url) 

На момент, ваш код пытается найти константу с именем DIRECT_UPLOAD_URL_FORMAT внутри класса ImageWorker, который определенно не инициализирован и, следовательно, ошибка.

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