簡體   English   中英

如何使用rake任務將圖像上傳到Rackspace Cloud Files?

[英]How to upload images to Rackspace Cloud Files using rake task?

我正在嘗試將Rackspace Cloud Files與Fog / Carrierwave /一起使用。 我的生產服務器中有一堆上傳的圖像。 我正在嘗試使用以下rake任務將這些圖像上傳到Rackspace Cloud Files。

desc 'Transfer photos to rackspace'
task :photos => :environment do
  photos = Photo.order(created_at: :desc).limit(10)
  photos.each do |photo|
    if photo.attachment?
      photo.attachment.recreate_versions!
      photo.save!
    else
      puts "================================= ATTACHMENT NOT FOUND: ID: #{photo.id}"
    end
  end
end

但是我收到以下錯誤:

rake aborted!
undefined method `body' for nil:NilClass
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/gems/carrierwave-0.9.0/lib/carrierwave/storage/fog.rb:227:in `read'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:77:in `sanitized_file'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/cache.rb:116:in `cache!'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/gems/carrierwave-0.9.0/lib/carrierwave/uploader/versions.rb:225:in `recreate_versions!'
/home/zeck/code/bee/lib/tasks/bee.rake:9:in `block (4 levels) in <top (required)>'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/gems/activerecord-4.0.1/lib/active_record/relation/delegation.rb:13:in `each'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/gems/activerecord-4.0.1/lib/active_record/relation/delegation.rb:13:in `each'
/home/zeck/code/bee/lib/tasks/bee.rake:7:in `block (3 levels) in <top (required)>'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/bin/ruby_noexec_wrapper:14:in `eval'
/home/zeck/.rvm/gems/ruby-2.0.0-p247@rails-4-1/bin/ruby_noexec_wrapper:14:in `<main>'

這意味着圖像未存儲在Rackspace Cloud Files中。 你們有類似的耙任務嗎? 請分享給我。 或指導我。

謝謝你的建議:D

當您將CarrierWave上傳器的storage:file更改為:fog ,它將無法跟蹤圖像文件的原始上載路徑,因此像recreate_versions!這樣的方法recreate_versions! store! 將找不到要上傳的文件。

如果您手動告訴CarrierWave舊路徑,它將為您將其上傳到Cloud Files:

desc 'Transfer photos to rackspace'
task :photos => :environment do
  photos = Photo.order(created_at: :desc).limit(10)
  photos.each do |photo|
    if photo.attachment?
      # If you've overridden the storage path in the uploader, you'll need to
      # use a different path here.
      #
      # "photo[:attachment]" is used to get the actual attribute value instead
      # of the mounted uploader -- the base filename of the attachment file.
      path = Rails.root.join('public', 'uploads', photo[:attachment])

      unless path.exist?
        puts "#{path} doesn't exist. Double check your paths!"
        next
      end

      photo.attachment = path.open
      photo.save!
      puts "transferred #{photo.id}"
    else
      puts "================================= ATTACHMENT NOT FOUND: ID: #{photo.id}"
    end
  end
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM