我想在服務器上的目錄中的所有文件上運行Paperclip。基本上,我想允許用戶FTP一些文件到我的網絡服務器,然後我可以手動運行一個耙子任務讓Paperclip處理所有文件(調整圖像大小,更新數據庫等)。如何從服務器目錄製作Paperclip流程文件?
我該怎麼做?
我想在服務器上的目錄中的所有文件上運行Paperclip。基本上,我想允許用戶FTP一些文件到我的網絡服務器,然後我可以手動運行一個耙子任務讓Paperclip處理所有文件(調整圖像大小,更新數據庫等)。如何從服務器目錄製作Paperclip流程文件?
我該怎麼做?
我不知道我是否理解你的問題 - 你是要求遠程運行rake任務還是如何導入圖像?
在後面的情況下有答案。
首先,你需要一些模型,以保持圖像和也許一些其他的數據,這樣的事情:
class Picture < ActiveRecord::Base
has_attached_file :image, :styles => {
:thumb => "100x100>",
:big => "500x500>"
}
end
您可以創建在你的lib/tasks文件夾簡單的rake任務(你應該命名與文件。耙擴展)
namespace :import do
desc "import all images from SOURCE_DIR folder"
task :images => :environment do
# get all images from given folder
Dir.glob(File.join(ENV["SOURCE_DIR"], "*")) do |file_path|
# create new model for every picture found and save it to db
open(file_path) do |f|
pict = Picture.new(:name => File.basename(file_path),
:image => f)
# a side affect of saving is that paperclip transformation will
# happen
pict.save!
end
# Move processed image somewhere else or just remove it. It is
# necessary as there is a risk of "double import"
#FileUtils.mv(file_path, "....")
#FileUtils.rm(file_path)
end
end
end
然後你可以手動調用從控制檯提供SOURCE_DIR參數,這將是服務器上的文件夾耙任務(也可以是真正的文件夾或安裝遠程)
rake import:images SOURCE_DIR=~/my_images/to/be/imported
如果你打算自動運行這個,我建議你去使用Resque Scheduler gem。
更新:爲了簡單起見,我特意省略異常處理
我太需要這個從舊系統中的文件在磁盤上的Rails環境靜態轉換。基本上只需打開文件並將其分配給目標模型'has_attached_file'屬性並保存。 – Chloe 2014-05-09 19:57:48