备份 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