Capistrano-Pg
Capistrano tasks for basic configuration and management of PostgreSQL database.
Provides capistrano tasks to:
- create database.yml in
shared
folder and symlink intoconfig
- create user and database in postgres
Provides several capistrano variables for easy customization.
Also, for full customization, template of database.yml
file can be copied to
the application using generator.
Installation
Add this line to your application’s Gemfile:
gem 'capistrano-pg', require: false, group: :development
And then execute:
$ bundle
Or install it yourself as:
$ gem install capistrano-pg
Usage
Add this line to your deploy.rb
require 'capistrano-pg'
Next, add role pg
to the server which has running instance of PostgreSQL.
Address of this server will be automatically used as pg_host
(see below),
create_user
and create_database
tasks will be executed on this server:
```ruby # for dedicated database server it could look like this: server “192.168.33.12”, :db, :pg, no_release: true
for all-in-one server it could look like this:
server “192.168.33.11”, :web, :app, :db, :pg, primary: true ```
Note, that following capistrano variables should be defined in the deploy.rb
file:
application
current_path
shared_path
user
You can check that new tasks are available (cap -T
):
# create database user for the application
cap pg:create_user
# create database for the application
cap pg:create_database
# generates `database.yml` file in the `shared/config` folder
cap pg:setup
# symlinks `database.yml` from the `shared/config` folder to `current/config` folder
cap pg:symlink
There is no need to execute any of these tasks manually. They will be called automatically on different deploy stages:
pg:create_user
,pg:create_database
andpg:setup
are hooked todeploy:setup
pg:symlink
is hooked todeploy:finalize_update
This means that if you run cap deploy:setup
,
user and database will be created and database.yml
file will be generated.
And on each deploy, database.yml
will be automatically linked to current version.
However, if you changed variables or customized templates, you can run any of these tasks to update configuration.
Customization
Using variables
You can customize database.yml
using capistrano variables:
```ruby # path to customized templates (see below for details) # default value: “config/deploy/templates” set :templates_path, “config/deploy/templates”
host
value in database.yml
# default value: address of the server, marked with pg
role
set :pg_host, “localhost”
port
value in database.yml
# default value: 5432 set :pg_port, “5432”
database
value in database.yml
# default value: application variable value set :pg_database, “myapp_production”
pool
value in database.yml
# default value: 5 set :pg_pool, “5”
username
value in database.yml
# default value: application variable value set :pg_user, application
password
value in database.yml
# default value: will be asked if not set # setting this value in config file is not recommended set :pg_password, application
indicates, it new database should be created on deploy:setup
or not
# default value: true set :pg_create_db, true ```
Template Customization
If you want to change default template, you can generate it using rails generator
rails g capistrano:pg:config
This will copy default template to config/deploy/templates
directory,
so you can customize them as you like, and capistrano tasks will use this templates instead of default.
You can also provide path, where to generate template:
rails g capistrano:nginx_unicorn:config config/templates
TODO:
- add tests
Contributing
- Fork it
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create new Pull Request