备份 MySQL 数据库以及存储在 S3 中的 CarrierWave 上传
Backup MySQL DB along with CarrierWave uploads stored in S3
在 Rails 应用程序中,我想备份 MySQL 数据库以及存储在 Amazon S3 中的 CarrierWave 上传。我查看了 S3 对象版本控制,但在 CarrierWave 中找不到任何支持。
以前有人做过吗?或者有什么想法?
class BaseUploader < CarrierWave::Uploader::Base
# Override the filename of the uploaded files:
def filename
return unless original_filename
if model && model.read_attribute(mounted_as).present? && model.changed.blank?
model.read_attribute(mounted_as)
else
ext = File.extname(original_filename)
base = File.basename(original_filename, ext)
"#{base}_#{token}#{ext}"
end
end
# override method to avoid deletion of file
def remove!; end
protected
def token
var = :"@#{mounted_as}_token"
model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
end
end
每次上传文件时,我都使用这种方法来创建唯一的文件名,从而避免了覆盖以前同名文件的可能性。此外,我已将 CarrierWave 配置为在更新时不删除以前存储的文件。所以,现在如果我恢复数据库备份,图像就会在那里。
代码段灵感来自 create random and unique filenames。
在 Rails 应用程序中,我想备份 MySQL 数据库以及存储在 Amazon S3 中的 CarrierWave 上传。我查看了 S3 对象版本控制,但在 CarrierWave 中找不到任何支持。
以前有人做过吗?或者有什么想法?
class BaseUploader < CarrierWave::Uploader::Base
# Override the filename of the uploaded files:
def filename
return unless original_filename
if model && model.read_attribute(mounted_as).present? && model.changed.blank?
model.read_attribute(mounted_as)
else
ext = File.extname(original_filename)
base = File.basename(original_filename, ext)
"#{base}_#{token}#{ext}"
end
end
# override method to avoid deletion of file
def remove!; end
protected
def token
var = :"@#{mounted_as}_token"
model.instance_variable_get(var) or model.instance_variable_set(var, Time.now.to_i)
end
end
每次上传文件时,我都使用这种方法来创建唯一的文件名,从而避免了覆盖以前同名文件的可能性。此外,我已将 CarrierWave 配置为在更新时不删除以前存储的文件。所以,现在如果我恢复数据库备份,图像就会在那里。
代码段灵感来自 create random and unique filenames。