谁能告诉我为什么我从Sidekiq收到以下错误:
NameError: uninitialized constant ImageWorker::DIRECT_UPLOAD_URL_FORMAT
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
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
任何帮助将是巨大的!
你应该移到下面一行到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
,该常量肯定没有初始化,因此也就出错了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句