2011-11-07 93 views
3

我在Rails應用程序中使用Rmagick的carrierwave gem。我在我的上傳文件中設置了一個新版本:請求時生成imagemagick/carrierwave縮略圖

class ImageUploader < CarrierWave::Uploader::Base 
    include CarrierWave::RMagick 
    storage :file 
    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 
    version :preview do 
    process :resize_to_fill => [580, 350] 
    end 
end 

當然,我在我的gemfile中包含了rmagick和carrierwave。現在,我嘗試在我的意見加載預覽版本我的圖像:

@product.photos.first.image.preview 

這不會給任何錯誤,但加載一個破碎的形象。如果我複製圖像的url,我會得到路由錯誤('沒有路由匹配/path/to_my_imagesfolder/preview_image.png')。如果我刪除預覽方法,圖像加載正確。

問題是什麼?我想也許這是一個權限問題,但我用777設置上傳文件夾,它仍然失敗。

任何想法?

編輯:我意識到如果我再次上傳圖像的新版本創建。是否有可能讓Rmagick在請求時創建它們(例如TimThumb在PHP中)或者至少是否有任何命令批量創建所有版本?

必須有比上傳的所有圖片更好的辦法...

回答

10

您可以使用.recreate_versions!

例如:

Product.all.each do |product| 
    product.photos.each do |photo| 
    photo.recreate_versions! 
    end 
end 
+1

不錯!但是,一旦這段代碼執行正確,這會創建它們嗎?你知道有什麼方法可以自動實現嗎?每當用戶請求一個尚未創建的版本時,它就會重新創建並提供服務? –

+0

只是爲了跟上這一點,不,我不確定這是可能的。除非您始終上傳圖像,否則不應導致太多負載問題。因此,在上傳時生成大拇指通常很好。 – easyjo

+0

你可能是對的。我想我會做到這一點,並創建一個任務,每當我創建新版本。 –