アップローダーをマウントしてモデルを保存すると、保存するたびにバージョンが削除されます(画像を通常どおりアップロードしても、バージョンが作成されていないように見えます)。数日/数週間前までは正常に機能していたことに注意してください(Rails 3.2.11に移動したことで発生した可能性がありますが、正確な時刻はわかりませんでした。以前は3.2.8でした)。
私のモデルは次のように定義されています。
class Profile < ActiveRecord::Base
attr_accessible :profile_picture
mount_uploader :profile_picture, ProfilePictureUploader
...
end
そして私のProfilePictureUploader
:
class ProfilePictureUploader < BaseUploader
process :resize_to_fill => [248, 248]
version :tiny do
process :resize_to_fill => [34, 34]
def full_filename(for_file = model.photo.file)
"#{model.to_s.parameterize}_tiny.jpg"
end
end
def extension_white_list
%w(jpg jpeg gif png)
end
# Override the filename of the uploaded files:
# Avoid using model.id or version_name here, see uploader/store.rb for details.
def filename
# John Snow -> john-snow-20120913162935.jpg
# ACME inc. -> acme-inc-20120913162935.png
"#{model.to_s.parameterize}-#{Time.now.strftime("%Y%m%d%H%M%S")}#{File.extname(original_filename)}" if original_filename
end
end
そして最後に私のBaseUploader
:
class BaseUploader < CarrierWave::Uploader::Base
include CarrierWave::RMagick
# Include the Sprockets helpers for Rails 3.1+ asset pipeline compatibility:
include Sprockets::Helpers::RailsHelper
include Sprockets::Helpers::IsolatedHelper
# Override the directory where uploaded files will be stored.
def store_dir
"system/uploads/#{model.class.to_s.underscore}/#{model.id}"
end
# Override the filename of the uploaded files:
def filename
"#{mounted_as}#{File.extname(original_filename)}" if original_filename
end
end
開発ではファイルストアを使用し、本番環境ではフォグストレージを使用していますが、両方の環境で問題が発生するため、ファイルストレージを使用していると仮定します。
これが私の典型的なシナリオです:
- プロファイルに画像をアップロードすると、標準の画像のみが作成されます(例:)
mbillard-20130122102833.jpg
。 - 私はプロフィール写真を呼び出します
recreate_versions!
。標準画像と小さなバージョンの両方が作成されます(私の特定の命名スキームのために標準が再作成されます、私はそれで大丈夫です)。 - モデルを保存すると、属性
system/uploads/profile/1/
のファイル名を持つ画像を除いて、フォルダー()内のすべてが削除されます。profile_picture
私はcarrierwave0.8.0を使用します。保存トリガーと関係があると思いますが、コードを見てもわかりませんでした。
( GitHubの問題も並行して開いています)