【问题标题】:Rails Backup: Generating Backup Model not running with DokkuRails Backup:生成不与 Dokku 一起运行的备份模型
【发布时间】:2015-05-08 14:53:18
【问题描述】:

使用Backup gem 进行数据库备份,将安装了 gem 的应用程序部署到 DigitalOcean,下一步是使用运行生成器

dokku run oktob bundle exec backup generate:model --trigger oktob_db_backup --databases="postgresql" --storages="dropbox" --encryptors="openssl" --compressors="gzip" --notifiers="mail"

这应该会创建配置文件来设置备份,但它什么也不返回。

当我在本地机器上运行生成器时,正常生成了 2 个文件,但这次没有使用 dokku run oktob,因为它在本地机器上。

Generated model file: '/Users/ahmadajmi/Backup/models/oktob_db_backup.rb'.
Generated configuration file: '/Users/ahmadajmi/Backup/config.rb'.

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby backup dokku


    【解决方案1】:

    为了解决这个问题,备份 gem 应该安装在 Linux 机器的 app 容器之外。

    Backup generator 命令用于生成备份配置文件。

    backup generate:model --trigger oktob_database_backup --databases="postgresql" --storages="s3" --compressor="gzip" --notifiers="mail"
    

    这将在 Linux 机器上创建备份配置文件/root/Backup/models/oktob_database_backup.rb,与 Dokku 或应用容器无关,该文件包含一些与数据库连接、S3 信息和电子邮件帐户相关的必要配置以发送通知。

    /root/Backup/models/oktob_database_backup.rb 文件包含:

    # encoding: utf-8
    
    ##
    # Backup Generated: oktob_db_backup
    # Once configured, you can run the backup with the following command:
    #
    # $ backup perform -t oktob_db_backup [-c <path_to_configuration_file>]
    #
    # For more information about Backup's components, see the documentation at:
    # http://backup.github.io/backup
    #
    Model.new(:oktob_database_backup, 'Oktob Production Database Backup') do
    
      ##
      # PostgreSQL [Database]
      #
      database PostgreSQL do |db|
        db.name               = ENV['DATABASE_NAME']
        db.username           = ENV['DATABASE_USERNAME']
        db.password           = ENV['DATABASE_PASSWORD']
        db.host               = ENV['DATABASE_HOST']
        db.port               = ENV['DATABASE_PORT']
      end
    
      ##
      # Amazon Simple Storage Service [Storage]
      #
      store_with S3 do |s3|
        # AWS Credentials
        s3.access_key_id     = ENV['AWS_ACCESS_KEY_ID']
        s3.secret_access_key = ENV['AWS_SECRET_ACCESS_KEY']
        s3.region            = "us-west-2"
        s3.bucket            = ENV['AWS_DATABASE_BACKUP_BUCKET_NAME']
        s3.path              = "/"
      end
    
      ##
      # Gzip [Compressor]
      #
      compress_with Gzip
    
      ##
      # Mail [Notifier]
      #
      # The default delivery method for Mail Notifiers is 'SMTP'.
      # See the documentation for other delivery options.
      #
      notify_by Mail do |mail|
        mail.on_success           = true
        mail.on_warning           = true
        mail.on_failure           = true
    
        mail.from                 = ENV['EMAIL_ADDRESS']
        mail.to                   = ENV['EMAIL_ADDRESS']
        mail.address              = "smtp.gmail.com"
        mail.port                 = 587
        mail.domain               = "oktob.io"
        mail.user_name            = ENV['SMTP_USERNAME']
        mail.password             = ENV['SMTP_PASSWORD']
        mail.authentication       = "plain"
        mail.encryption           = :starttls
      end
    end
    

    配置存储在/etc/environment文件中:

    ## Database
    export DATABASE_NAME=''
    export DATABASE_USERNAME=''
    export DATABASE_PASSWORD=''
    export DATABASE_HOST=''
    export DATABASE_PORT=''
    
    ## Amazon S3
    export AWS_ACCESS_KEY_ID=''
    export AWS_SECRET_ACCESS_KEY=''
    export AWS_DATABASE_BACKUP_BUCKET_NAME=''
    
    ## Email
    export EMAIL_ADDRESS=''
    export SMTP_USERNAME=''
    export SMTP_PASSWORD=''
    

    要手动执行备份,我们可以输入backup perform -t oktob_database_backup,这个命令会做三件事:

    • 远程连接到 Postgres Dokku 容器并进行数据库转储
    • 将 abckup 文件存储到 oktob-database-backup S3 存储桶中。
    • 发送电子邮件通知至EMAIL_ADDRESS

    使用 cron 作业每隔一小时完成一次备份,该作业在 crontab -e 中添加为:

    0 * * * * /bin/bash -l -c '/usr/local/rvm/gems/ruby-2.0.0-p647/bin/backup perform -t oktob_database_backup'
    

    我们可以通过在命令行中输入which backup来获取/usr/local/rvm/gems/ruby-2.0.0-p647/bin/backup部分,来获取路径。

    好文章要检查:

    Hourly Production Server Database And File Backups

    Backup PostgreSQL from a Rails project to Amazon S3

    【讨论】:

      【解决方案2】:

      这是一个无答案,但评论太长了。

      您通常会遇到问题,即新创建的文件没有持久化,因为 dokku run 的东西启动了一个新容器(然后直接达到其生命周期的尽头)。

      您可以使用dokku-volume 插件来指定一个目录,该目录“存在”在您的应用容器之外并保持文件原样。

      【讨论】:

      • 是的,你是对的,我在容器外安装并配置了备份,我能够解决它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多