kapify 0.0.1

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.
Files changed (42) hide show
  1. data/.gitignore +18 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +22 -0
  4. data/README.md +51 -0
  5. data/Rakefile +1 -0
  6. data/kapify.gemspec +22 -0
  7. data/lib/generators/kapify/base.rb +9 -0
  8. data/lib/generators/kapify/logrotate/USAGE +9 -0
  9. data/lib/generators/kapify/logrotate/logrotate_generator.rb +14 -0
  10. data/lib/generators/kapify/logrotate/templates/logrotate.erb +8 -0
  11. data/lib/generators/kapify/nginx/USAGE +9 -0
  12. data/lib/generators/kapify/nginx/nginx_generator.rb +14 -0
  13. data/lib/generators/kapify/nginx/templates/nginx_conf.erb +85 -0
  14. data/lib/generators/kapify/pg/USAGE +9 -0
  15. data/lib/generators/kapify/pg/pg_generator.rb +14 -0
  16. data/lib/generators/kapify/pg/templates/database.yml.erb +8 -0
  17. data/lib/generators/kapify/resque/USAGE +9 -0
  18. data/lib/generators/kapify/resque/resque_generator.rb +14 -0
  19. data/lib/generators/kapify/resque/templates/resque_init.erb +89 -0
  20. data/lib/generators/kapify/unicorn/USAGE +9 -0
  21. data/lib/generators/kapify/unicorn/templates/unicorn.rb.erb +48 -0
  22. data/lib/generators/kapify/unicorn/templates/unicorn_init.erb +84 -0
  23. data/lib/generators/kapify/unicorn/unicorn_generator.rb +15 -0
  24. data/lib/kapify/base.rb +17 -0
  25. data/lib/kapify/logrotate/README.md +83 -0
  26. data/lib/kapify/logrotate/configuration.rb +15 -0
  27. data/lib/kapify/logrotate.rb +1 -0
  28. data/lib/kapify/nginx/README.md +105 -0
  29. data/lib/kapify/nginx/configuration.rb +41 -0
  30. data/lib/kapify/nginx.rb +1 -0
  31. data/lib/kapify/pg/README.md +118 -0
  32. data/lib/kapify/pg/configuration.rb +52 -0
  33. data/lib/kapify/pg.rb +1 -0
  34. data/lib/kapify/resque/README.md +104 -0
  35. data/lib/kapify/resque/configuration.rb +34 -0
  36. data/lib/kapify/resque.rb +1 -0
  37. data/lib/kapify/unicorn/README.md +109 -0
  38. data/lib/kapify/unicorn/configuration.rb +35 -0
  39. data/lib/kapify/unicorn.rb +2 -0
  40. data/lib/kapify/version.rb +3 -0
  41. data/lib/kapify.rb +5 -0
  42. metadata +125 -0
@@ -0,0 +1,83 @@
1
+ # kapify/logrotate
2
+
3
+ Capistrano task for enabling log rotation for your Rails application
4
+
5
+ Provides capistrano tasks to:
6
+
7
+ * creates logrotate record to rotate application logs
8
+
9
+ For full customization, config can be copied to the application using generator.
10
+
11
+ ## Usage
12
+
13
+ Add this line to your `deploy.rb`
14
+
15
+ require 'kapify/logrotate'
16
+
17
+ Note, that following capistrano variables should be defined:
18
+
19
+ shared_path
20
+ user
21
+
22
+ You can check that new tasks are available (`cap -T`):
23
+
24
+ # create logrotate record to rotate application logs
25
+ cap logrotate
26
+
27
+ There is no need to execute any of these tasks manually.
28
+ They will be called automatically on different deploy stages:
29
+
30
+ * `logrotate` is hooked to `deploy:setup`
31
+
32
+ This means that if you run `cap deploy:setup`,
33
+ logrotate will be automatically set up.
34
+
35
+ ## Template Customization
36
+
37
+ If you want to change default template, you can generate them using `rails generator`
38
+
39
+ rails g kapify:logrotate
40
+
41
+ This will copy default templates to `config/deploy/templates` directory,
42
+ so you can customize them as you like, and capistrano tasks will use this templates instead of default.
43
+
44
+ You can also provide path, where to generate templates:
45
+
46
+ rails g kapify:logrotate config/templates
47
+
48
+ In this case, don't forget to set `templates_path` varibale:
49
+
50
+ ```ruby
51
+ # path to customized templates (see below for details)
52
+ # default value: "config/deploy/templates"
53
+ set :templates_path, "config/deploy/templates"
54
+ ```
55
+
56
+ For example, if you also use nginx and unicorn, you want to notify them about rotation.
57
+ In this case, your template file could look like this:
58
+
59
+ ```erb
60
+ <%= shared_path %>/log/*.log {
61
+ daily
62
+ missingok
63
+ rotate 180
64
+ compress
65
+ dateext
66
+ delaycompress
67
+
68
+ lastaction
69
+ pid=<%= unicorn_pid %>
70
+ test -s $pid && kill -USR1 "$(cat $pid)"
71
+ endscript
72
+
73
+ prerotate
74
+ if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
75
+ run-parts /etc/logrotate.d/httpd-prerotate; \
76
+ fi \
77
+ endscript
78
+
79
+ postrotate
80
+ [ ! -f /run/nginx.pid ] || kill -USR1 `cat /run/nginx.pid`
81
+ endscript
82
+ }
83
+ ```
@@ -0,0 +1,15 @@
1
+ require 'capistrano'
2
+ require 'kapify/base'
3
+
4
+ Capistrano::Configuration.instance.load do
5
+ namespace :kapify do
6
+ desc "Setup logs rotation for application logs"
7
+ task :logrotate, roles: [:web, :app] do
8
+ kapify_template("logrotate", "logrotate.erb", "/tmp/#{application}_logrotate")
9
+ run "#{sudo} mv /tmp/#{application}_logrotate /etc/logrotate.d/#{application}"
10
+ run "#{sudo} chown root:root /etc/logrotate.d/#{application}"
11
+ end
12
+
13
+ after "deploy:setup", "kapify:logrotate"
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ require 'kapify/logrotate/configuration'
@@ -0,0 +1,105 @@
1
+ # kapify/nginx
2
+
3
+ Capistrano tasks for configuration of nginx web server.
4
+
5
+ Provides capistrano tasks to:
6
+
7
+ * easily add application to nginx and reload it's configuration
8
+
9
+ Provides several capistrano variables for easy customization.
10
+ Also, for full customization, all configs can be copied to the application using generators.
11
+
12
+ ## Usage
13
+
14
+ Add this line to your `deploy.rb`
15
+
16
+ require 'kapify/nginx'
17
+
18
+ Note, that following capistrano variables should be defined:
19
+
20
+ application
21
+ current_path
22
+ shared_path
23
+ user
24
+
25
+ You can check that new tasks are available (`cap -T`):
26
+
27
+ # add and enable application to nginx
28
+ cap kapify:nginx:setup
29
+
30
+ # reload nginx configuration
31
+ cap kapify:nginx:reload
32
+
33
+ There is no need to execute any of these tasks manually.
34
+ They will be called automatically on different deploy stages:
35
+
36
+ * `kapify:nginx:setup` and `kapify:nginx:reload` are hooked to `deploy:setup`
37
+
38
+ This means that if you run `cap deploy:setup`,
39
+ nginx will be automatically configured.
40
+
41
+ However, if you changed variables or customized templates,
42
+ you can run any of these tasks to update configuration.
43
+
44
+ ## Customization
45
+
46
+ ### Using variables
47
+
48
+ You can customize nginx config using capistrano variables:
49
+
50
+
51
+ ```ruby
52
+ # path to customized templates (see below for details)
53
+ # default value: "config/deploy/templates"
54
+ set :templates_path, "config/deploy/templates"
55
+
56
+ # server name for nginx, default value: no (will be prompted if not set)
57
+ # set this to your site name as it is visible from outside
58
+ # this will allow 1 nginx to serve several sites with different `server_name`
59
+ set :nginx_server_name, "example.com"
60
+
61
+ # if set, nginx will be configured to 443 port and port 80 will be auto rewritten to 443
62
+ # also, on `nginx:setup`, paths to ssl certificate and key will be configured
63
+ # and certificate file and key will be copied to `/etc/ssl/certs` and `/etc/ssl/private/` directories
64
+ # default value: false
65
+ set :nginx_use_ssl, false
66
+
67
+ # remote file name of the certificate, only makes sense if `nginx_use_ssl` is set
68
+ # default value: `nginx_server_name + ".crt"`
69
+ set :nginx_ssl_certificate, "#{nginx_server_name}.crt"
70
+
71
+ # remote file name of the certificate, only makes sense if `nginx_use_ssl` is set
72
+ # default value: `nginx_server_name + ".key"`
73
+ set :nginx_ssl_certificate_key, "#{nginx_server_name}.key"
74
+
75
+ # local path to file with certificate, only makes sense if `nginx_use_ssl` is set
76
+ # this file will be copied to remote server
77
+ # default value: none (will be prompted if not set)
78
+ set :nginx_ssl_certificate_local_path, "/home/ivalkeen/ssl/myssl.cert"
79
+
80
+ # local path to file with certificate key, only makes sense if `nginx_use_ssl` is set
81
+ # this file will be copied to remote server
82
+ # default value: none (will be prompted if not set)
83
+ set :nginx_ssl_certificate_key_local_path, "/home/ivalkeen/ssl/myssl.key"
84
+ ```
85
+
86
+ For example, of you site name is `example.com`,
87
+ your `deploy.rb` will look like this:
88
+
89
+ ```ruby
90
+ set :server_name, "example.com"
91
+ require 'kapify/nginx'
92
+ ```
93
+
94
+ ### Template Customization
95
+
96
+ If you want to change default templates, you can generate them using `rails generator`
97
+
98
+ rails g kapify:nginx
99
+
100
+ This will copy default templates to `config/deploy/templates` directory,
101
+ so you can customize them as you like, and capistrano tasks will use this templates instead of default.
102
+
103
+ You can also provide path, where to generate templates:
104
+
105
+ rails g kapify/nginx config/templates
@@ -0,0 +1,41 @@
1
+ require 'capistrano'
2
+ require 'kapify/base'
3
+
4
+ Capistrano::Configuration.instance.load do
5
+ set_default(:nginx_server_name) { Capistrano::CLI.ui.ask "Nginx server name: " }
6
+ set_default(:nginx_use_ssl, false)
7
+ set_default(:nginx_ssl_certificate) { "#{nginx_server_name}.crt" }
8
+ set_default(:nginx_ssl_certificate_key) { "#{nginx_server_name}.key" }
9
+ set_default(:nginx_ssl_certificate_local_path) {Capistrano::CLI.ui.ask "Local path to ssl certificate: "}
10
+ set_default(:nginx_ssl_certificate_key_local_path) {Capistrano::CLI.ui.ask "Local path to ssl certificate key: "}
11
+
12
+ namespace :kapify do
13
+ namespace :nginx do
14
+ desc "Setup nginx configuration for this application"
15
+ task :setup, roles: :web do
16
+ kapify_template("nginx", "nginx_conf.erb", "/tmp/#{application}")
17
+ run "#{sudo} mv /tmp/#{application} /etc/nginx/sites-available/#{application}"
18
+ run "#{sudo} ln -fs /etc/nginx/sites-available/#{application} /etc/nginx/sites-enabled/#{application}"
19
+
20
+ if nginx_use_ssl
21
+ put File.read(nginx_ssl_certificate_local_path), "/tmp/#{nginx_ssl_certificate}"
22
+ put File.read(nginx_ssl_certificate_key_local_path), "/tmp/#{nginx_ssl_certificate_key}"
23
+
24
+ run "#{sudo} mv /tmp/#{nginx_ssl_certificate} /etc/ssl/certs/#{nginx_ssl_certificate}"
25
+ run "#{sudo} mv /tmp/#{nginx_ssl_certificate_key} /etc/ssl/private/#{nginx_ssl_certificate_key}"
26
+
27
+ run "#{sudo} chown root:root /etc/ssl/certs/#{nginx_ssl_certificate}"
28
+ run "#{sudo} chown root:root /etc/ssl/private/#{nginx_ssl_certificate_key}"
29
+ end
30
+ end
31
+
32
+ after "deploy:setup", "kapify:nginx:setup"
33
+ after "deploy:setup", "kapify:nginx:reload"
34
+
35
+ desc "Reload nginx configuration"
36
+ task :reload, roles: :web do
37
+ run "#{sudo} /etc/init.d/nginx reload"
38
+ end
39
+ end
40
+ end
41
+ end
@@ -0,0 +1 @@
1
+ require 'kapify/nginx/configuration'
@@ -0,0 +1,118 @@
1
+ # kapify/pg
2
+
3
+ Capistrano tasks for basic configuration and management of PostgreSQL database.
4
+
5
+ Provides capistrano tasks to:
6
+
7
+ * create database.yml in `shared` folder and symlink into `config`
8
+ * create user and database in postgres
9
+
10
+ Provides several capistrano variables for easy customization.
11
+ Also, for full customization, template of `database.yml` file can be copied to
12
+ the application using generator.
13
+
14
+ ## Usage
15
+
16
+ Add this line to your `deploy.rb`
17
+
18
+ require 'kapify/pg'
19
+
20
+ Next, add role `pg` to the server which has running instance of PostgreSQL.
21
+ Address of this server will be automatically used as `pg_host` (see below),
22
+ `create_user` and `create_database` tasks will be executed on this server:
23
+
24
+ ```ruby
25
+ # for dedicated database server it could look like this:
26
+ server "192.168.33.12", :db, :pg, no_release: true
27
+
28
+ # for all-in-one server it could look like this:
29
+ server "192.168.33.11", :web, :app, :db, :pg, primary: true
30
+ ```
31
+
32
+ Note, that following capistrano variables should be defined in the `deploy.rb` file:
33
+
34
+ application
35
+ current_path
36
+ shared_path
37
+ user
38
+
39
+ You can check that new tasks are available (`cap -T`):
40
+
41
+ # create database user for the application
42
+ cap kapify:pg:create_user
43
+
44
+ # create database for the application
45
+ cap kapify:pg:create_database
46
+
47
+ # generates `database.yml` file in the `shared/config` folder
48
+ cap kapify:pg:setup
49
+
50
+ # symlinks `database.yml` from the `shared/config` folder to `current/config` folder
51
+ cap kapify:pg:symlink
52
+
53
+ There is no need to execute any of these tasks manually.
54
+ They will be called automatically on different deploy stages:
55
+
56
+ * `kapify:pg:create_user`, `kapify:pg:create_database` and `kapify:pg:setup` are hooked to `deploy:setup`
57
+ * `kapify:pg:symlink` is hooked to `deploy:finalize_update`
58
+
59
+ This means that if you run `cap deploy:setup`,
60
+ user and database will be created and `database.yml` file will be generated.
61
+ And on each deploy, `database.yml` will be automatically linked to current version.
62
+
63
+ However, if you changed variables or customized templates,
64
+ you can run any of these tasks to update configuration.
65
+
66
+ ## Customization
67
+
68
+ ### Using variables
69
+
70
+ You can customize `database.yml` using capistrano variables:
71
+
72
+ ```ruby
73
+ # path to customized templates (see below for details)
74
+ # default value: "config/deploy/templates"
75
+ set :templates_path, "config/deploy/templates"
76
+
77
+ # `host` value in `database.yml`
78
+ # default value: address of the server, marked with `pg` role
79
+ set :pg_host, "localhost"
80
+
81
+ # `port` value in `database.yml`
82
+ # default value: 5432
83
+ set :pg_port, "5432"
84
+
85
+ # `database` value in `database.yml`
86
+ # default value: application variable value
87
+ set :pg_database, "myapp_production"
88
+
89
+ # `pool` value in `database.yml`
90
+ # default value: 5
91
+ set :pg_pool, "5"
92
+
93
+ # `username` value in `database.yml`
94
+ # default value: application variable value
95
+ set :pg_user, application
96
+
97
+ # `password` value in `database.yml`
98
+ # default value: will be asked if not set
99
+ # setting this value in config file is not recommended
100
+ set :pg_password, application
101
+
102
+ # indicates, it new database should be created on `deploy:setup` or not
103
+ # default value: true
104
+ set :pg_create_db, true
105
+ ```
106
+
107
+ ### Template Customization
108
+
109
+ If you want to change default template, you can generate it using `rails generator`
110
+
111
+ rails g kapify:pg
112
+
113
+ This will copy default template to `config/deploy/templates` directory,
114
+ so you can customize them as you like, and capistrano tasks will use this templates instead of default.
115
+
116
+ You can also provide path, where to generate template:
117
+
118
+ rails g kapify:pg config/templates
@@ -0,0 +1,52 @@
1
+ require 'capistrano'
2
+ require 'kapify/base'
3
+
4
+ Capistrano::Configuration.instance.load do
5
+ set_default(:pg_host) { find_servers(roles: :pg)[0] || "localhost" }
6
+ set_default(:pg_port, "5432")
7
+ set_default(:pg_database, application)
8
+ set_default(:pg_pool, 5)
9
+ set_default(:pg_user, application)
10
+ set_default(:pg_password) { Capistrano::CLI.password_prompt "PG password: " }
11
+ set_default(:pg_create_db, true)
12
+
13
+ namespace :kapify do
14
+ namespace :pg do
15
+ desc "Create user for application"
16
+ task :create_user, roles: :pg do
17
+ pg_params = "-p #{pg_port}"
18
+ check_user = %Q[#{sudo} -u postgres psql #{pg_params} postgres -c "select * from pg_user where usename='#{pg_user}'" | grep -c '#{pg_user}']
19
+ add_user = %Q[#{sudo} -u postgres psql #{pg_params} -c "create user #{pg_user}"]
20
+ run "#{check_user} || #{add_user}"
21
+ run %Q{#{sudo} -u postgres psql #{pg_params} -c "alter user #{pg_user} with password '#{pg_password}'" }
22
+ end
23
+
24
+ desc "Create database for application"
25
+ task :create_database, roles: :pg do
26
+ if pg_create_db
27
+ run %Q{#{sudo} -u postgres psql -c "create database #{pg_database} owner #{pg_user};"}
28
+ end
29
+ end
30
+
31
+ if find_servers(roles: :pg).size > 0
32
+ after "deploy:setup", "kapify:pg:create_user"
33
+ after "deploy:setup", "kapify:pg:create_database"
34
+ end
35
+
36
+ desc "Generate the database.yml configuration file."
37
+ task :setup, roles: :app do
38
+ run "mkdir -p #{shared_path}/config"
39
+ kapify_template("pg", "database.yml.erb", "#{shared_path}/config/database.yml")
40
+ end
41
+
42
+ after "deploy:setup", "kapify:pg:setup"
43
+
44
+ desc "Symlink the database.yml file into latest release"
45
+ task :symlink, roles: :app do
46
+ run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
47
+ end
48
+
49
+ after "deploy:finalize_update", "kapify:pg:symlink"
50
+ end
51
+ end
52
+ end
data/lib/kapify/pg.rb ADDED
@@ -0,0 +1 @@
1
+ require 'kapify/pg/configuration'
@@ -0,0 +1,104 @@
1
+ # kapify/pg
2
+
3
+ Capistrano tasks for basic configuration and management of Resque.
4
+
5
+ Provides capistrano tasks to:
6
+
7
+ * create resque init script for application, so it will be automatically started when OS restarts
8
+ * start/stop resque (also can be done using `sudo service resque_<your_app> start/stop`)
9
+ * gracefully restart resque on deployment
10
+
11
+ Provides several capistrano variables for easy customization.
12
+ Also, for full customization, init script's config can be copied to the application using generators.
13
+
14
+ ## Usage
15
+
16
+ Add this line to your `deploy.rb`
17
+
18
+ require 'kapify/resque'
19
+
20
+ Next, add role `resque_worker` to the server which you want resque workers to be started on.
21
+
22
+ Note, that following capistrano variables should be defined:
23
+
24
+ application
25
+ current_path
26
+ shared_path
27
+ user
28
+
29
+ You can check that new tasks are available (`cap -T`):
30
+
31
+ # create resque configuration and init script
32
+ cap kapify:resque:setup
33
+
34
+ # start resque
35
+ cap kapify:resque:start
36
+
37
+ # stop resque
38
+ cap kapify:resque:stop
39
+
40
+ # gracefully restart resque
41
+ cap kapify:resque:restart
42
+
43
+ There is no need to execute any of these tasks manually.
44
+ They will be called automatically on different deploy stages:
45
+
46
+ * `kapify:resque:setup` is hooked to `deploy:setup`
47
+ * `kapify:resque:restart` is hooked to `deploy:restart`
48
+
49
+ This means that if you run `cap deploy:setup`,
50
+ resque will be automatically configured.
51
+ And after each deploy, resque will be automatically reloaded.
52
+
53
+ However, if you changed variables or customized templates,
54
+ you can run any of these tasks to update configuration.
55
+
56
+ ## Customization
57
+
58
+ ### Using variables
59
+
60
+ You can customize resque configs using capistrano variables:
61
+
62
+ ```ruby
63
+ # user name to run resque
64
+ # default value: `user` (user varibale defined in your `deploy.rb`)
65
+ set :resque_user, "user"
66
+
67
+ # number of resque workers
68
+ # default value: 2
69
+ set :resque_workers, 4
70
+
71
+ # name of resque workers queue
72
+ # default value: *
73
+ set :resque_queue, "*"
74
+
75
+ # path to the bundle command
76
+ # default value: /usr/local/rbenv/shims/bundle (for globally installed rbenv)
77
+ set :resque_bundle, "/usr/bin/bundle"
78
+
79
+ # name of rake task to run resque worker
80
+ # default value: "environment resque:work"
81
+ set :resque_task, "resque:work"
82
+
83
+ ```
84
+
85
+ For example, if you don't want to load environment for your workers,
86
+ your `deploy.rb` will look like this:
87
+
88
+ ```ruby
89
+ set :resque_task, "resque:work"
90
+ require 'kapify/resque'
91
+ ```
92
+
93
+ ### Template Customization
94
+
95
+ If you want to change default templates, you can generate them using `rails generator`
96
+
97
+ rails g kapify:resque
98
+
99
+ This will copy default templates to `config/deploy/templates` directory,
100
+ so you can customize them as you like, and capistrano tasks will use this templates instead of default.
101
+
102
+ You can also provide path, where to generate templates:
103
+
104
+ rails g kapify:resque config/templates
@@ -0,0 +1,34 @@
1
+ require 'capistrano'
2
+ require 'kapify/base'
3
+
4
+ Capistrano::Configuration.instance.load do
5
+ set_default(:resque_user, user)
6
+ set_default(:resque_workers, 2)
7
+ set_default(:resque_queue, "*")
8
+ set_default(:resque_bundle, "/usr/local/rbenv/shims/bundle")
9
+ set_default(:resque_task, "environment resque:work")
10
+
11
+ namespace :kapify do
12
+ namespace :resque do
13
+ desc "Setup Resque initializer and app configuration"
14
+ task :setup, roles: :resque_worker do
15
+ run "mkdir -p #{shared_path}/config"
16
+ kapify_template "resque", "resque_init.erb", "/tmp/resque_init"
17
+ run "chmod +x /tmp/resque_init"
18
+ run "#{sudo} mv /tmp/resque_init /etc/init.d/resque_#{application}"
19
+ run "#{sudo} update-rc.d -f resque_#{application} defaults"
20
+ end
21
+
22
+ after "deploy:setup", "kapify:resque:setup"
23
+
24
+ %w[start stop restart].each do |command|
25
+ desc "#{command} resque"
26
+ task command, roles: :resque_worker do
27
+ run "service resque_#{application} #{command}"
28
+ end
29
+
30
+ after "deploy:#{command}", "kapify:resque:#{command}"
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1 @@
1
+ require 'kapify/resque/configuration'
@@ -0,0 +1,109 @@
1
+ # kapify/unicorn
2
+
3
+ Capistrano tasks for configuration and management unicorn for zero downtime deployments of Rails applications.
4
+
5
+ Provides capistrano tasks to:
6
+
7
+ * create unicorn init script for application, so it will be automatically started when OS restarts
8
+ * start/stop unicorn (also can be done using `sudo service unicorn_<your_app> start/stop`)
9
+ * restart unicorn using `USR2` signal to load new application version with zero downtime
10
+
11
+ Provides several capistrano variables for easy customization.
12
+ Also, for full customization, all configs can be copied to the application using generators.
13
+
14
+ ## Usage
15
+
16
+ Add this line to your `deploy.rb`
17
+
18
+ require 'kapify/unicorn'
19
+
20
+ Note, that following capistrano variables should be defined:
21
+
22
+ application
23
+ current_path
24
+ shared_path
25
+ user
26
+
27
+ You can check that new tasks are available (`cap -T`):
28
+
29
+ # create unicorn configuration and init script
30
+ cap kapify:unicorn:setup
31
+
32
+ # start unicorn
33
+ cap kapify:unicorn:start
34
+
35
+ # stop unicorn
36
+ cap kapify:unicorn:stop
37
+
38
+ # restart unicorn with no downtime
39
+ # old workers will process new request until new master is fully loaded
40
+ # then old workers will be automatically killed and new workers will start processing requests
41
+ cap kapify:unicorn:restart
42
+
43
+ There is no need to execute any of these tasks manually.
44
+ They will be called automatically on different deploy stages:
45
+
46
+ * `kapify:unicorn:setup` is hooked to `deploy:setup`
47
+ * `kapify:unicorn:restart` is hooked to `deploy:restart`
48
+
49
+ This means that if you run `cap deploy:setup`,
50
+ unicorn will be automatically configured.
51
+ And after each deploy, unicorn will be automatically restarted.
52
+
53
+ However, if you changed variables or customized templates,
54
+ you can run any of these tasks to update configuration.
55
+
56
+ ## Customization
57
+
58
+ ### Using variables
59
+
60
+ You can customize unicorn configs using capistrano variables:
61
+
62
+
63
+ ```ruby
64
+ # path to customized templates (see below for details)
65
+ # default value: "config/deploy/templates"
66
+ set :templates_path, "config/deploy/templates"
67
+
68
+ # path, where unicorn pid file will be stored
69
+ # default value: `"#{current_path}/tmp/pids/unicorn.pid"`
70
+ set :unicorn_pid, "#{current_path}/tmp/pids/unicorn.pid"
71
+
72
+ # path, where unicorn config file will be stored
73
+ # default value: `"#{shared_path}/config/unicorn.rb"`
74
+ set :unicorn_config, "#{shared_path}/config/unicorn.rb"
75
+
76
+ # path, where unicorn log file will be stored
77
+ # default value: `"#{shared_path}/config/unicorn.rb"`
78
+ set :unicorn_log, "#{shared_path}/config/unicorn.rb"
79
+
80
+ # user name to run unicorn
81
+ # default value: `user` (user varibale defined in your `deploy.rb`)
82
+ set :unicorn_user, "user"
83
+
84
+ # number of unicorn workers
85
+ # default value: no (will be prompted if not set)
86
+ set :unicorn_workers, 4
87
+
88
+ ```
89
+
90
+ For example, if you want to use 8 unicorn workers,
91
+ your `deploy.rb` will look like this:
92
+
93
+ ```ruby
94
+ set :unicorn_workers, 8
95
+ require 'kapify/unicorn'
96
+ ```
97
+
98
+ ### Template Customization
99
+
100
+ If you want to change default templates, you can generate them using `rails generator`
101
+
102
+ rails g kapify:unicorn
103
+
104
+ This will copy default templates to `config/deploy/templates` directory,
105
+ so you can customize them as you like, and capistrano tasks will use this templates instead of default.
106
+
107
+ You can also provide path, where to generate templates:
108
+
109
+ rails g kapify:unicorn config/templates