2013-12-23 28 views
1

谁能告诉我为什么我从Sidekiq收到以下错误:导轨 - Sidekiq错误未初始化的常量

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) 

在那么您的代码正试图在ImageWorker类中找到一个名为DIRECT_UPLOAD_URL_FORMAT的常量,该类绝对不会被初始化,因此也是错误。