每当我使用已安装的上传器保存模型时,只要我保存它,版本就会被删除(并且看起来好像在正常上传图像时甚至没有创建版本)。请注意,直到几天/几周前它才能正常工作(我没有注意到确切的时间,尽管它可能是通过迁移到 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
属性文件名的图像。
我使用载波 0.8.0。我相信它与保存触发器有关,但无法通过查看代码来弄清楚。
(我还并行打开了一个GitHub 问题)