2011-11-07 12 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 

もちろん、rmagickとcarrierwaveを私のgemfileに含めました。今、私は私の意見では私の画像のプレビューバージョンをロードしよう:

@product.photos.first.image.preview 

これは、すべてのエラーを与えるが、壊れたイメージをロードしません。画像のURLをコピーすると、ルーティングエラーが発生します( 'no route matches /path/to_my_imagesfolder/preview_image.png')。 プレビューメソッドを削除すると、画像が正しく読み込まれます。

何が問題なのですか?おそらく権限の問題だと思ったのですが、私は777でuploadsフォルダを設定しましたが、それでも失敗します。

アイデア?

編集:画像をもう一度アップロードすると、新しいバージョンが作成されます。 Rmagickが(TimThumbがPHPで行うように)リクエストされたときにRmagickを作成させることは可能ですか?少なくとも、すべてのバージョンをバッチ作成するコマンドはありますか?

あなたは.recreate_versionsを使用することができます

答えて

10

...すべての画像をアップロードするよりも良い方法があるに違いありません!例えば

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

ナイス!しかし、これは一度このコードが正しく実行されると、それらを作成しますか?これを自動的に行う方法を知っていますか?ユーザーがまだ作成されていないバージョンを再作成して提供するたびに、そのたびに –

+0

これをフォローするだけで、これが可能であるかどうかはわかりません。常にイメージをアップロードしている場合を除き、負荷の問題はあまり発生しません。アップロード時に親指を生成するのが一般的です。 – easyjo

+0

あなたはおそらく正しいでしょう。私はそれを行い、私が新しいバージョンを作成するたびにタスクを作成すると思う。 –

関連する問題