Resources

Download Source Code

Summary

# Terminal
kamal console
kamal accessory boot postgres_backup
kamal accessory restart postgres_backup # won't copy new environment variables
kamal accessory reboot postgres_backup
kamal accessory logs postgres_backup

# .kamal/secrets
POSTGRES_PASSWORD=$(bin/rails runner "puts Rails.application.credentials.dig(:postgres, :password)")
POSTGRES_PASS=$(bin/rails runner "puts Rails.application.credentials.dig(:postgres, :password)")

# .irbrc
def rails_environment
  Rails.env
end

if defined?(Rails)
  def colorize(text, color_code) = "\e[#{color_code}m#{text}\e[0m"
  def red(text) = colorize(text, 31)
  def green(text) = colorize(text, 32)
  def blue(text) = colorize(text, 36)

  prompt = case rails_environment
  when "development"
             green(rails_environment)
  when "production"
             "\e[1;41;97m!!PRODUCTION!!\e[0m #{red(rails_environment)}"
  else
             blue(rails_environment)
  end

  IRB.conf[:PROMPT][:RAILS] = {
    PROMPT_I: "#{prompt}>",
    PROMPT_N: "#{prompt}>",
    PROMPT_S: "#{prompt}*",
    PROMPT_C: "#{prompt}?",
    RETURN: " => %s\n"
  }

  IRB.conf[:PROMPT_MODE] = :RAILS
end

# config/deploy.yml
aliases:
  console: app exec --interactive --reuse "bin/rails console --sandbox"
  shell: app exec --interactive --reuse "bash"
  logs: app logs -f
  dbc: app exec --interactive --reuse "bin/rails dbconsole"

accessories:
  postgres_backup:
    image: kartoza/pg-backup:17-3.5
    host: 192.168.1.217
    env:
      clear:
        POSTGRES_USER: example
        POSTGRES_DB: example_production
        POSTGRES_HOST: 192.168.1.217
        POSTGRES_PORT: 5432
        CRON_SCHEDULE: "*/10 * * * *"
      secret:
        - POSTGRES_PASS
    directories:
      - backups:/backups