无法通过carrierwave上传图片

时间:2017-01-12 04:48:40

标签: ruby-on-rails carrierwave sidekiq carrierwave-backgrounder

我使用carrierwave上传我的图片但失败了。请帮帮我。

使用的版本:

rails (4.0.1)
carrierwave (0.10.0)
carrierwave-mongoid (0.7.1)
carrierwave_backgrounder (0.4.1)

我的上传者:

#<EventImageUploader:0x007fc6a948ede8 
@model=#<Event::EventImage 
_id: 5876f63b6c616cea34630000, 
c_at(created_at): 2017-01-12 03:21:31 UTC, 
image: nil, 
image_tmp: "1484191291-59956-9524/2016-12-10_23-45.jpg">,
@mounted_as=:image>

我的图片为nil,但image_tmp下的图片存在。我的sidekiq也运行良好。

这是我的工作人员:

class ImageWorker < ::CarrierWave::Workers::StoreAsset
  def perform(*args)
    super(*args)

    record = ::CarrierWave::Workers::Base.perform(*args)
    if record 
      p "success"
    else
      raise "record #{args} not found, failed"
    end

  end
end

如何进行上传工作?谢谢。

1 个答案:

答案 0 :(得分:0)

查看CarrierWave::Workers::StoreAsset#perform的来源后, 无法上传图片的原因是嵌入式文档。

record = resource.find id的行将返回nil,因为resource是嵌入式类,您无法通过嵌入类找到id。

要解决此问题,请参阅here。如果我添加以下代码,我的代码应该可以工作:

class Event
  include Mongoid::Document

  embeds_many :images
end

class EventImage
  include Mongoid::Document

  embedded_in :Event

  mount_uploader :image, ImageUploader
  process_in_background :image

  def self.find(id)
    bson_id = Moped::BSON::ObjectId.from_string(id) # needed for Mongoid 3

    root = Event.where('images._id' => bson_id).first
    root.images.find(id)
  end
end

如果您收到错误uninitialized constant Moped::BSON,请务必首先require