【问题标题】:Backup MySQL DB along with CarrierWave uploads stored in S3备份 MySQL 数据库以及存储在 S3 中的 CarrierWave 上传
【发布时间】:2015-02-06 20:46:46
【问题描述】:

在 Rails 应用程序中,我想备份 MySQL 数据库以及存储在 Amazon S3 中的 CarrierWave 上传。我研究了 S3 对象版本控制,但在 CarrierWave 中找不到任何支持。

以前有人做过吗?或者有什么想法?

【问题讨论】:

  • 你可以把mysql备份这样:mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]。对于 Amazon S3 上传,它会将图像或上传文件名保存在数据库中,该数据库连接到 rails 中 S3 配置中给出的文件夹/存储桶。因此,进行正常备份应该可以,但我不确定。不过你可以试一试。
  • 在我的情况下,更新图像的图像名称将相同。因此,图像将在 S3 中被覆盖。我想这对我不起作用。

标签: mysql ruby-on-rails amazon-s3 backup carrierwave


【解决方案1】:
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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-13
    • 1970-01-01
    • 2019-07-14
    • 2012-06-11
    • 2012-08-04
    • 2017-11-10
    • 2012-12-07
    • 1970-01-01
    相关资源
    最近更新 更多