[英]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.