capistrano-postgresql 1.0.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 64756f3cbd959704ddb49e120d669ce593817398
4
- data.tar.gz: 476e3f52826affad3fbcba2beb04db05a0a30593
3
+ metadata.gz: 86fb4bf23488e11c1621ea0220f0f9de556bd54b
4
+ data.tar.gz: fb80400a70f99e7235f18e154ebe413903716f97
5
5
  SHA512:
6
- metadata.gz: 43b02bb91ec6bfa9d8ed3cd59408961bf5a81f8556e02718937c5c86796411c07731a00ae509820a1a14b7c75fcfb9448034d907b2b7a58575d8c50da773ec0c
7
- data.tar.gz: e6d8cb4b11369573d62faf246a4ec479c8eb78e4b7ac7e395df238b4f74d82a76fdcc20650b785fd54fea1f463c637472126a745c4e076d81954acf56d5d0f81
6
+ metadata.gz: 2a26868b035dc682b3a9a73c332b0837c91f8ef5738d580a20e13df409204005a9bb5ff3b347ad05183b3abeebc1128f43149bd26541bfd129aa212975956829
7
+ data.tar.gz: a109426f8a310440d3827c5938883e9688f2dcb9a15e10ced05ea690ad52b0a7d099aa2615b9df3a13b8f870dde89d936c68d26ba4e389727a3b59db5d3e14e9
@@ -0,0 +1,9 @@
1
+ ### v2.0.0, 2014-03-30
2
+ - shorten variable names: postgresql -> pg
3
+ - better helpers module separation
4
+ - lots of code styling updates
5
+ - lots of code improvements
6
+ - less layered and simpler code
7
+ - readme updates
8
+ ### v1.0.0, 2014-03-19
9
+ - all the v1.0.0 features
data/README.md CHANGED
@@ -15,30 +15,34 @@ Here are the specific things this plugin does for your capistrano deployment
15
15
  process:
16
16
 
17
17
  * creates a new PostgreSQL database and database user on the server
18
- * generates and populates `database.yml` file with the right data on the server
18
+ * generates and populates `database.yml` file
19
19
  (no need to ssh to the server and do this manually!)
20
- * no config necessary (or it's kept to a minimum)
20
+ * zero-config
21
21
 
22
22
  ### Installation
23
23
 
24
24
  Put the following in your application's `Gemfile`:
25
25
 
26
26
  group :development do
27
- gem 'capistrano' ~> '3.1'
27
+ gem 'capistrano', '~> 3.1'
28
28
  gem 'capistrano-postgresql'
29
29
  end
30
30
 
31
- Install the gem with:
31
+ Then:
32
32
 
33
33
  $ bundle install
34
34
 
35
- ### Standard usage
35
+ ### Usage
36
36
 
37
37
  If you're deploying a standard rails app, all you need to do is put
38
38
  the following in `Capfile` file:
39
39
 
40
40
  require 'capistrano/postgresql'
41
41
 
42
+ And deploy:
43
+
44
+ $ bundle exec cap production deploy
45
+
42
46
  Easy, right?
43
47
 
44
48
  Check below to see what happens in the background.
@@ -50,49 +54,40 @@ Check here for the full capistrano deployment flow
50
54
 
51
55
  The following tasks run automatically after `deploy:started` task:
52
56
 
57
+ * `postgresql:create_db_user`<br/>
58
+ creates a postgresql user. Password for the user is automatically generated and
59
+ used in the next steps.
53
60
  * `postgresql:create_database`<br/>
54
- creates a postgresql user and a database for your app. Password for the user is
55
- automatically generated and used in the next step.
61
+ creates database for your app.
56
62
  * `postgresql:generate_database_yml`<br/>
57
63
  creates a `database.yml` file and copies it to
58
64
  `#{shared_path}/config/database.yml` on the server.
59
- * `postgresql:ensure_database_yml_symlink`<br/>
60
- adds `config/database.yml` to the `linked_files` array. Capistrano handles
61
- symlinking `database.yml` to the application release path.
62
65
 
63
- The above tasks are all you need for getting rails app to work with PostgreSQL.
66
+ Also, the plugin ensures `config/database.yml` is symlinked from `shared_path`.
67
+ The above tasks are all you need for getting a Rails app to work with PostgreSQL.
64
68
 
65
69
  ### Gotchas
66
70
 
67
71
  Be sure to remove `config/database.yml` from your application's version control.
68
72
 
69
- ### Debugging
70
-
71
- A debugging task is provided. Run `bundle exec <your_stage> cap postgres:debug`
72
- and you should get a list of all capistrano-postgresql settings and their
73
- values.
74
-
75
- I deeply hope you'll never need to use this, as this plugins strives to be
76
- very easy to use with minimal or no configuration.
77
-
78
73
  ### Configuration
79
74
 
80
75
  This plugin should just work with no configuration whatsoever. However,
81
76
  configuration is possible. Put all your configs in capistrano stage files i.e.
82
- `config/deploy/production.rb`, `config/deploy/staging.rb`.
77
+ `config/deploy/production.rb`.
83
78
 
84
79
  Here's the list of options and the defaults for each option:
85
80
 
86
- * `set :postgresql_database`<br/>
81
+ * `set :pg_database`<br/>
87
82
  Name of the database for your app. Defaults to `#{application}_#{stage}`,
88
83
  example: `myface_production`.
89
84
 
90
- * `set :postgresql_user`<br/>
91
- Name of the database user. Defaults to whatever is set for `postgresql_database`
85
+ * `set :pg_user`<br/>
86
+ Name of the database user. Defaults to whatever is set for `pg_database`
92
87
  option.
93
88
 
94
- * `set :postgresql_password`<br/>
95
- Password for the database user. By default this option is not set and
89
+ * `set :pg_password`<br/>
90
+ Password for the database user. By default this option is not set and a
96
91
  **new random password** is generated each time you create a new database.<br/>
97
92
  If you set this option to `"some_secure_password"` - that will be the db user's
98
93
  password. Keep in mind that having a hardcoded password in `deploy.rb` (or
@@ -101,29 +96,23 @@ I recommend sticking to the default and generating a new secure and random
101
96
  password each time a db user is generated. That way you don't have to worry
102
97
  about it or try to remember it.
103
98
 
104
- * `set :postgresql_ask_for_password`<br/>
99
+ * `set :pg_ask_for_password`<br/>
105
100
  Default `false`. Set this option to `true` if you want to be prompted for the
106
101
  password when database user is created. This is safer than setting the password
107
- via `postgresql_password`. The downside is you have to choose and remember
102
+ via `pg_password`. The downside is you have to choose and remember
108
103
  yet another fricking password.<br/>
109
- `postgresql_password` option has precedence. If it is set,
110
- `postgresql_ask_for_password` is ignored.
111
-
112
- * `set :postgresql_default_tasks`<br/>
113
- This task determines whether capistrano tasks from this plugin are executed
114
- automatically during capistrano deploy process. Defaults to `true`. Tasks that
115
- run automatically are: `postgresql:create_database`,
116
- `postgresql:generate_database_yml` and `postgresql:ensure_database_yml_symlink`.
104
+ `pg_password` option has precedence. If it is set,
105
+ `pg_ask_for_password` is ignored.
117
106
 
118
107
  `database.yml` template-only settings:
119
108
 
120
- * `set :postgresql_pool`<br/>
109
+ * `set :pg_pool`<br/>
121
110
  Pool config in `database.yml` template. Defaults to `5`.
122
111
 
123
- * `set :postgresql_host`<br/>
112
+ * `set :pg_host`<br/>
124
113
  `hostname` config in `database.yml` template. Defaults to `localhost`.
125
114
 
126
- * `set :postgresql_encoding`<br/>
115
+ * `set :pg_encoding`<br/>
127
116
  `encoding` config in `database.yml` template. Defaults to `unicode`.
128
117
 
129
118
  ### Customizing the `database.yml` template
@@ -134,26 +123,39 @@ shared directory on the server:
134
123
  ```yml
135
124
  <%= fetch :stage %>:
136
125
  adapter: postgresql
137
- encoding: <%= postgresql_encoding %>
138
- database: <%= postgresql_database %>
139
- pool: <%= postgresql_pool %>
140
- username: <%= postgresql_user %>
141
- password: '<%= postgresql_password %>'
142
- host: <%= postgresql_host %>
126
+ encoding: <%= pg_encoding %>
127
+ database: <%= pg_database %>
128
+ pool: <%= pg_pool %>
129
+ username: <%= pg_user %>
130
+ password: '<%= pg_password %>'
131
+ host: <%= pg_host %>
143
132
  ```
144
133
 
145
134
  If for any reason you want to edit or tweak this template, you can copy it to
146
135
  `config/deploy/templates/postgresql.yml.erb` with this command:
147
136
 
148
- bundle exec rails g capistrano:postgresql:template
137
+ $ bundle exec rails g capistrano:postgresql:template
149
138
 
150
139
  After you edit this newly created file in your repo, it will be used as a
151
140
  template for `database.yml` on the server.
152
141
 
153
142
  You can configure the template location. For example:
154
- `set :postgresql_templates_path, "config"` and the template will be copied to
143
+ `set :pg_templates_path, "config"` and the template will be copied to
155
144
  `config/postgresql.yml.erb`.
156
145
 
146
+ ### More Capistrano automation?
147
+
148
+ If you'd like to streamline your Capistrano deploys, you might want to check
149
+ these zero-configuration, plug-n-play plugins:
150
+
151
+ - [capistrano-unicorn-nginx](https://github.com/bruno-/capistrano-unicorn-nginx)<br/>
152
+ no-configuration unicorn and nginx setup with sensible defaults
153
+ - [capistrano-rbenv-install](https://github.com/bruno-/capistrano-rbenv-install)<br/>
154
+ would you like Capistrano to install rubies for you?
155
+ - [capistrano-safe-deploy-to](https://github.com/bruno-/capistrano-safe-deploy-to)<br/>
156
+ if you're annoyed that Capistrano does **not** create a deployment path for the
157
+ app on the server (default `/var/www/myapp`), this is what you need!
158
+
157
159
  ### Contributing and bug reports
158
160
 
159
161
  Contributions and improvements are very welcome. Just open a pull request and
@@ -169,11 +171,6 @@ Here are other plugins and people this project was based upon:
169
171
  from this plugin are heavily based on his
170
172
  [capistrano-recipes repo](https://github.com/mattdbridges/capistrano-recipes).
171
173
 
172
- * [Kalys Osmonom](https://github.com/kalys) - his
173
- [capistrano-nginx-unicorn](https://github.com/kalys/capistrano-nginx-unicorn)
174
- gem structure was an inspiration for this plugin. A lot of the features were
175
- directly copied from his project (example: `database.yml` template generator).
176
-
177
174
  ### License
178
175
 
179
176
  [MIT](LICENSE.md)
@@ -1,79 +1,22 @@
1
- require 'securerandom'
2
1
  require 'erb'
3
2
 
4
3
  module Capistrano
5
4
  module Postgresql
6
5
  module HelperMethods
7
6
 
8
- def database_yml_template(template_name, target)
9
- config_file = "#{fetch(:postgresql_templates_path)}/#{template_name}"
7
+ def pg_template(template_name)
8
+ config_file = "#{fetch(:pg_templates_path)}/#{template_name}"
10
9
  # If there's no customized file in your rails app template directory,
11
10
  # proceed with the default.
12
11
  unless File.exists?(config_file)
13
- config_file = File.join(File.dirname(__FILE__), "../../generators/capistrano/postgresql/templates/#{template_name}")
12
+ default_config_path = "../../generators/capistrano/postgresql/templates/#{template_name}"
13
+ config_file = File.join(File.dirname(__FILE__), default_config_path)
14
14
  end
15
- upload! StringIO.new(ERB.new(File.read(config_file)).result(binding)), target
15
+ StringIO.new ERB.new(File.read(config_file)).result(binding)
16
16
  end
17
17
 
18
- # This method is invoked only if `:postgresql_password` is not already set in
19
- # `config/deploy.rb`. Directly setting `:postgresql_password` has precedence.
20
- def ask_for_or_generate_password
21
- if fetch(:postgresql_ask_for_password)
22
- ask :postgresql_password, "Postgresql database password for the app: "
23
- else
24
- set :postgresql_password, generate_random_password
25
- end
26
- end
27
-
28
- def generate_random_password
29
- SecureRandom.hex(10)
30
- end
31
-
32
- def db_user_exists?(name)
33
- psql "-tAc", %Q{"SELECT 1 FROM pg_roles WHERE rolname='#{name}';" | grep -q 1}
34
- end
35
-
36
- def create_db_user(name, password)
37
- if psql "-c", %Q{"CREATE user #{name} WITH password '#{password}';"}
38
- info "postgresq: database user '#{name}' created"
39
- else
40
- error "postgresql: creating database user failed!"
41
- exit 1
42
- end
43
- end
44
-
45
- def ensure_db_user_created(name, password)
46
- unless db_user_exists?(name)
47
- create_db_user(name, password)
48
- end
49
- end
50
-
51
- def database_exists?(db_name)
52
- psql "-tAc", %Q{"SELECT 1 FROM pg_database WHERE datname='#{db_name}';" | grep -q 1}
53
- end
54
-
55
- def create_database(db_name, user_name)
56
- if psql "-c", %Q{"CREATE database #{db_name} owner #{user_name};"}
57
- info "postgresql: database '#{db_name}' created"
58
- else
59
- error "postgresql: creating database '#{db_name}' failed!"
60
- exit 1
61
- end
62
- end
63
-
64
- def ensure_database_created(db_name, user_name)
65
- unless database_exists?(db_name)
66
- create_database(db_name, user_name)
67
- end
68
- end
69
-
70
- # returns true or false depending on the remote command exit status
71
- def psql(*args)
72
- test :sudo, "-u postgres psql", *args
73
- end
74
-
75
- def remote_file_exists?(path)
76
- test "[ -e #{path} ]"
18
+ def database_yml_file
19
+ shared_path.join('config/database.yml')
77
20
  end
78
21
 
79
22
  end
@@ -0,0 +1,25 @@
1
+ require 'securerandom'
2
+
3
+ module Capistrano
4
+ module Postgresql
5
+ module PasswordHelpers
6
+
7
+ def generate_random_password
8
+ SecureRandom.hex(10)
9
+ end
10
+
11
+ # This method is invoked only if `:pg_password` is not already
12
+ # set in `config/#{:stage}/deploy.rb`. Directly setting
13
+ # `:pg_password` has precedence.
14
+ def ask_for_or_generate_password
15
+ if fetch(:pg_ask_for_password)
16
+ ask :pg_password, "Postgresql database password for the app: "
17
+ else
18
+ set :pg_password, generate_random_password
19
+ end
20
+ end
21
+
22
+ end
23
+ end
24
+ end
25
+
@@ -0,0 +1,21 @@
1
+ module Capistrano
2
+ module Postgresql
3
+ module PsqlHelpers
4
+
5
+ # returns true or false depending on the remote command exit status
6
+ def psql(*args)
7
+ test :sudo, '-u postgres psql', *args
8
+ end
9
+
10
+ def db_user_exists?(name)
11
+ psql '-tAc', %Q{"SELECT 1 FROM pg_roles WHERE rolname='#{name}';" | grep -q 1}
12
+ end
13
+
14
+ def database_exists?(db_name)
15
+ psql '-tAc', %Q{"SELECT 1 FROM pg_database WHERE datname='#{db_name}';" | grep -q 1}
16
+ end
17
+
18
+ end
19
+ end
20
+ end
21
+
@@ -1,5 +1,5 @@
1
1
  module Capistrano
2
2
  module Postgresql
3
- VERSION = "1.0.1"
3
+ VERSION = "2.0.0"
4
4
  end
5
5
  end
@@ -1,110 +1,78 @@
1
1
  require 'capistrano/postgresql/helper_methods'
2
+ require 'capistrano/postgresql/password_helpers'
3
+ require 'capistrano/postgresql/psql_helpers'
2
4
 
3
5
  include Capistrano::Postgresql::HelperMethods
6
+ include Capistrano::Postgresql::PasswordHelpers
7
+ include Capistrano::Postgresql::PsqlHelpers
4
8
 
5
9
  namespace :load do
6
10
  task :defaults do
7
- set :postgresql_database, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
8
- set :postgresql_user, -> { fetch(:postgresql_database) }
9
- set :postgresql_password, -> { ask_for_or_generate_password }
10
- set :postgresql_ask_for_password, false
11
- set :postgresql_default_tasks, true
12
-
13
- # template only settings (used in postgresql.yml.erb)
14
- set :postgresql_templates_path, "config/deploy/templates"
15
- set :postgresql_pool, 5
16
- set :postgresql_encoding, "unicode"
17
- set :postgresql_host, "localhost"
11
+ set :pg_database, -> { "#{fetch(:application)}_#{fetch(:stage)}" }
12
+ set :pg_user, -> { fetch(:pg_database) }
13
+ set :pg_ask_for_password, false
14
+ set :pg_password, -> { ask_for_or_generate_password }
15
+ # template only settings
16
+ set :pg_templates_path, 'config/deploy/templates'
17
+ set :pg_pool, 5
18
+ set :pg_encoding, 'unicode'
19
+ set :pg_host, 'localhost'
18
20
  end
19
21
  end
20
22
 
21
23
  namespace :postgresql do
22
24
 
23
- desc "Print all the variables"
24
- task :debug do
25
- puts "postgresql_database: #{fetch(:postgresql_database)}"
26
- puts "postgresql_user: #{fetch(:postgresql_user)}"
27
- puts "postgresql_password: #{fetch(:postgresql_password)}"
28
- puts "postgresql_ask_for_password: #{fetch(:postgresql_ask_for_password)}"
29
- puts "postgresql_default_tasks: #{fetch(:postgresql_default_tasks)}"
30
- puts "postgresql_pool: #{fetch(:postgresql_pool)}"
31
- puts "postgresql_encoding: #{fetch(:postgresql_encoding)}"
32
- puts "postgresql_host #{fetch(:postgresql_host)}"
33
- end
34
-
35
- # This task never runs automatically
36
- # desc "Drop a database for this application"
37
- task :drop_database do
38
- on roles(:db) do
39
- psql "-c", %Q{"DROP database #{fetch(:postgresql_database)};"}
25
+ # undocumented, for a reason: drops database. Use with care!
26
+ task :remove_all do
27
+ on roles :app do
28
+ if test "[ -e #{database_yml_file} ]"
29
+ execute :rm, database_yml_file
30
+ end
40
31
  end
41
- end
42
-
43
- # This task never runs automatically
44
- # desc "Delete database user for this application"
45
- task :delete_db_user do
46
- on roles(:db) do
47
- psql "-c", %Q{"DROP user #{fetch(:postgresql_user)};"}
32
+ on roles :db do
33
+ psql '-c', %Q{"DROP database #{fetch(:pg_database)};"}
34
+ psql '-c', %Q{"DROP user #{fetch(:pg_user)};"}
48
35
  end
49
36
  end
50
37
 
51
- # this task never runs automatically
52
- # desc "Delete `config/database.yml` from the shared path on the server"
53
- task :delete_database_yml do
54
- on roles(:app) do
55
- database_yml_path = shared_path.join("config/database.yml")
56
- if remote_file_exists? database_yml_path
57
- execute :rm, database_yml_path
38
+ desc 'Create DB user'
39
+ task :create_db_user do
40
+ on roles :db do
41
+ next if db_user_exists? fetch(:pg_user)
42
+ unless psql '-c', %Q{"CREATE user #{fetch(:pg_user)} WITH password '#{fetch(:pg_password)}';"}
43
+ error 'postgresql: creating database user failed!'
44
+ exit 1
58
45
  end
59
46
  end
60
47
  end
61
48
 
62
- # this task never runs automatically. DANGEROUS! Destroys database on the server!
63
- # desc "Removes application database, DB user and removes `database.yml` from the server"
64
- task remove_all: [:drop_database, :delete_db_user, :delete_database_yml]
65
-
66
-
67
- desc "Create a database for this application"
49
+ desc 'Create database'
68
50
  task :create_database do
69
- on roles(:db) do
70
- ensure_db_user_created fetch(:postgresql_user), fetch(:postgresql_password)
71
- ensure_database_created fetch(:postgresql_database), fetch(:postgresql_user)
51
+ on roles :db do
52
+ next if database_exists? fetch(:pg_database)
53
+ unless psql '-c', %Q{"CREATE database #{fetch(:pg_database)} owner #{fetch(:pg_user)};"}
54
+ error 'postgresql: creating database failed!'
55
+ exit 1
56
+ end
72
57
  end
73
58
  end
74
59
 
75
- desc "Generate the database.yml configuration file"
60
+ desc 'Generate database.yml'
76
61
  task :generate_database_yml do
77
- on roles(:app) do
78
- database_yml_path = shared_path.join("config/database.yml")
79
- if remote_file_exists? database_yml_path
80
- info "postgresql: database.yml already exists in the shared path"
81
- else
82
- info "postgresql: generating database.yml in shared path"
83
- execute :mkdir, "-p", shared_path.join("config")
84
- database_yml_template "postgresql.yml.erb", database_yml_path
85
- end
62
+ on roles :app do
63
+ next if test "[ -e #{database_yml_file} ]"
64
+ execute :mkdir, '-pv', shared_path.join('config')
65
+ upload! pg_template('postgresql.yml.erb'), database_yml_file
86
66
  end
87
67
  end
88
68
 
89
- desc "Adds `config/database.yml` to the linked_files array"
90
- task :ensure_database_yml_symlink do
91
- on roles(:app) do
92
- if fetch(:linked_files).nil?
93
- set :linked_files, ["config/database.yml"]
94
- elsif !fetch(:linked_files).include? "config/database.yml"
95
- fetch(:linked_files) << "config/database.yml"
96
- end
97
- end
69
+ task :database_yml_symlink do
70
+ set :linked_files, fetch(:linked_files, []).push('config/database.yml')
98
71
  end
99
72
 
100
- after "deploy:started", "postgresql:started" do
101
- # `postgresql_default_tasks` true by default -> capistrano-postgresql tasks
102
- # run automatically on deploy
103
- if fetch(:postgresql_default_tasks)
104
- invoke "postgresql:create_database"
105
- invoke "postgresql:generate_database_yml"
106
- invoke "postgresql:ensure_database_yml_symlink"
107
- end
108
- end
73
+ after 'deploy:started', 'postgresql:create_db_user'
74
+ after 'deploy:started', 'postgresql:create_database'
75
+ after 'deploy:started', 'postgresql:generate_database_yml'
76
+ after 'deploy:started', 'postgresql:database_yml_symlink'
109
77
 
110
78
  end
@@ -1,8 +1,8 @@
1
1
  <%= fetch :stage %>:
2
2
  adapter: postgresql
3
- encoding: <%= fetch :postgresql_encoding %>
4
- database: <%= fetch :postgresql_database %>
5
- pool: <%= fetch :postgresql_pool %>
6
- username: <%= fetch :postgresql_user %>
7
- password: '<%= fetch :postgresql_password %>'
8
- host: <%= fetch :postgresql_host %>
3
+ encoding: <%= fetch :pg_encoding %>
4
+ database: <%= fetch :pg_database %>
5
+ pool: <%= fetch :pg_pool %>
6
+ username: <%= fetch :pg_user %>
7
+ password: '<%= fetch :pg_password %>'
8
+ host: <%= fetch :pg_host %>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: capistrano-postgresql
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 2.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bruno Sutic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-03-22 00:00:00.000000000 Z
11
+ date: 2014-03-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: capistrano
@@ -49,6 +49,7 @@ executables: []
49
49
  extensions: []
50
50
  extra_rdoc_files: []
51
51
  files:
52
+ - CHANGELOG.md
52
53
  - Gemfile
53
54
  - LICENSE.md
54
55
  - README.md
@@ -57,6 +58,8 @@ files:
57
58
  - lib/capistrano-postgresql.rb
58
59
  - lib/capistrano/postgresql.rb
59
60
  - lib/capistrano/postgresql/helper_methods.rb
61
+ - lib/capistrano/postgresql/password_helpers.rb
62
+ - lib/capistrano/postgresql/psql_helpers.rb
60
63
  - lib/capistrano/postgresql/version.rb
61
64
  - lib/capistrano/tasks/postgresql.rake
62
65
  - lib/generators/capistrano/postgresql/README.md