Add capistrano tasks for syncing remote and local database
Ruby
Pull request Compare This branch is 1 commit ahead of sgruhier:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.editorconfig
.gitignore
.rubocop.yml
CHANGELOG.md
Gemfile
LICENSE
README.md
Rakefile
capistrano-db-tasks.gemspec

README.md

CapistranoDbTasks | Gem Downloads Code Climate Gem Version

Add database AND assets tasks to capistrano to a Rails project. It only works with capistrano 3. Older versions until 0.3 works with capistrano 2.

Currently

  • It only supports mysql and postgresql (both side remote and local)
  • Synchronize assets remote to local and local to remote

Commands mysql, mysqldump (or pg_dump, psql), bzip2 and unbzip2 (or gzip) must be in your PATH

Feel free to fork and to add more database support or new tasks.

Install

Add it as a gem:

gem "capistrano-db-tasks", require: false

Add to config/deploy.rb:

require 'capistrano-db-tasks'

# if you haven't already specified
set :rails_env, "production"

# if you want to remove the local dump file after loading
set :db_local_clean, true

# if you want to remove the dump file from the server after downloading
set :db_remote_clean, true

# if you want to exclude table from dump
set :db_ignore_tables, []

# if you want to exclude table data (but not table schema) from dump
set :db_ignore_data_tables, []

# configure location where the dump file should be created
set :db_dump_dir, "./db"

# If you want to import assets, you can change default asset dir (default = system)
# This directory must be in your shared directory on the server
set :assets_dir, %w(public/assets public/att)
set :local_assets_dir, %w(public/assets public/att)

# if you want to work on a specific local environment (default = ENV['RAILS_ENV'] || 'development')
set :locals_rails_env, "production"

# if you are highly paranoid and want to prevent any push operation to the server
set :disallow_pushing, true

# if you prefer bzip2/unbzip2 instead of gzip
set :compressor, :bzip2

# If you're not using Rails, you can configure via ENV as well.
# This is a mapping between configuration variable to ENV_VARIABLE
set :db_config_from_env, {adapter:  'DB_DRIVER',
                          host:     'DB_SERVER'
                          username: 'DB_USER',
                          password: 'DB_PASSWORD',
                          socket:   'DB_SOCKET',
                          database: 'DB_DATABASE',
                          port:     'DB_PORT'}

# the remote .env file to pull configuration information from.
# The local .env file is handled by the dotenv gem
# this is in the shared_path, and defaults to .env
set :db_env_file, '.env'

Add to .gitignore

/db/*.sql

How to install bzip2 on Windows

Available tasks

app:local:sync      || app:pull     # Synchronize your local assets AND database using remote assets and database
app:remote:sync     || app:push     # Synchronize your remote assets AND database using local assets and database

assets:local:sync   || assets:pull  # Synchronize your local assets using remote assets
assets:remote:sync  || assets:push  # Synchronize your remote assets using local assets

db:local:sync       || db:pull      # Synchronize your local database using remote database data
db:remote:sync      || db:push      # Synchronize your remote database using local database data

Example

cap db:pull
cap production db:pull # if you are using capistrano-ext to have multistages

Contributors

TODO

  • May be change project's name as it's not only database tasks now :)
  • Add tests

Copyright (c) 2009 [Sébastien Gruhier - XILINUS], released under the MIT license