capistrano-mb 0.32.0 → 0.33.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/CHANGELOG.md +10 -1
- data/README.md +32 -19
- data/capistrano-mb.gemspec +4 -5
- data/lib/capistrano/mb.rb +0 -2
- data/lib/capistrano/mb/dsl.rb +0 -42
- data/lib/capistrano/mb/templates/sidekiq.service.erb +20 -0
- data/lib/capistrano/mb/templates/unicorn.service.erb +21 -0
- data/lib/capistrano/mb/version.rb +1 -1
- data/lib/capistrano/tasks/aptitude.rake +31 -54
- data/lib/capistrano/tasks/defaults.rake +18 -21
- data/lib/capistrano/tasks/sidekiq.rake +20 -17
- data/lib/capistrano/tasks/unicorn.rake +17 -7
- metadata +9 -13
- data/lib/capistrano/fiftyfive.rb +0 -6
- data/lib/capistrano/mb/templates/delayed_job_init.erb +0 -36
- data/lib/capistrano/mb/templates/sidekiq_init.erb +0 -100
- data/lib/capistrano/mb/templates/unicorn_init.erb +0 -84
- data/lib/capistrano/tasks/delayed_job.rake +0 -33
- data/lib/capistrano/tasks/fiftyfive.rake +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 8d012ef97efa6109de978f625fdaf6d4aae4d78f333f422123b3d381f5a29307
|
4
|
+
data.tar.gz: '081b8e13f41d0a3aa9e53275f78e891bf5007788705ec8a4900c9878b0568c1a'
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0be64b92ed0576bc6b599abdc65dff915b77b6951c1625f8b454eb8a697987a3e1a26fcd63fa620156cc03e7f02fe42bcf7366b3b79e29d9cbf42a791df996ef
|
7
|
+
data.tar.gz: ea3c1da247e09e60b954cdd08a2421f80626c9017f34c490372c9b6cfb7e0692965a66cdb402af86a0a0b26a5f9447dc4c6e8514397a8de23e7cab5be3ad7abe
|
data/CHANGELOG.md
CHANGED
@@ -2,6 +2,14 @@
|
|
2
2
|
|
3
3
|
* Your contribution here!
|
4
4
|
|
5
|
+
## [0.33.0][] (2017-12-29)
|
6
|
+
|
7
|
+
* Remove the deprecated `fiftyfive` compatibility layer
|
8
|
+
* Drop compatibility with older Ubuntu releases; now only Ubuntu 16.04 is supported via a single `provision` task
|
9
|
+
* Remove dependencies on `ppa:pitti` and `ppa:chris-lea` for postgres and node.js, respectively; use the official Ubuntu releases instead
|
10
|
+
* Replace init_d scripts with systemd configs
|
11
|
+
* Completely remove delayed_job support
|
12
|
+
|
5
13
|
## [0.32.0][] (2017-05-26)
|
6
14
|
|
7
15
|
* Add [immutable cache-control header](https://code.facebook.com/posts/557147474482256) to further boost performance of static assets
|
@@ -193,7 +201,8 @@ Flush console output after each line is printed. This allows deployment progress
|
|
193
201
|
|
194
202
|
Initial Rubygems release!
|
195
203
|
|
196
|
-
[Unreleased]: https://github.com/mattbrictson/capistrano-mb/compare/v0.
|
204
|
+
[Unreleased]: https://github.com/mattbrictson/capistrano-mb/compare/v0.33.0...HEAD
|
205
|
+
[0.33.0]: https://github.com/mattbrictson/capistrano-mb/compare/v0.32.0...v0.33.0
|
197
206
|
[0.32.0]: https://github.com/mattbrictson/capistrano-mb/compare/v0.31.0...v0.32.0
|
198
207
|
[0.31.0]: https://github.com/mattbrictson/capistrano-mb/compare/v0.30.0...v0.31.0
|
199
208
|
[0.30.0]: https://github.com/mattbrictson/capistrano-mb/compare/v0.29.0...v0.30.0
|
data/README.md
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
# capistrano-mb
|
2
2
|
|
3
|
-
|
3
|
+
**An opinionated Capistrano task library for deploying Rails apps from scratch on Ubuntu 16.04 LTS.**
|
4
|
+
|
5
|
+
[![Gem Version](https://badge.fury.io/rb/capistrano-mb.svg)](https://rubygems.org/gems/capistrano-mb)
|
4
6
|
|
5
7
|
Capistrano is great for deploying Rails applications, but what about all the prerequisites, like Nginx and PostgreSQL? Do you have a firewall configured on your VPS? Have you installed the latest OS security updates? Is HTTPS working right?
|
6
8
|
|
@@ -17,9 +19,9 @@ The capistrano-mb gem adds a `cap <stage> provision` task to Capistrano that tak
|
|
17
19
|
* Install `rbenv` and use `ruby-build` to compile the version of Ruby required by your app (by inspecting your `.ruby-version` file)
|
18
20
|
* And more!
|
19
21
|
|
20
|
-
The gem is named "capistrano-mb" because it is prescribes my ([@mattbrictson](https://github.com/mattbrictson)) personal preferences for automating deployments of Rails projects. I'
|
22
|
+
The gem is named "capistrano-mb" because it is prescribes my ([@mattbrictson](https://github.com/mattbrictson)) personal preferences for automating deployments of Rails projects. I've worked several years as a freelance developer juggling lots of Rails codebases, so its important for me to have a good, consistent server configuration. You'll notice that capistrano-mb is opinionated and strictly uses the following stack:
|
21
23
|
|
22
|
-
* Ubuntu
|
24
|
+
* Ubuntu 16.04 LTS
|
23
25
|
* PostgreSQL
|
24
26
|
* Unicorn
|
25
27
|
* Nginx
|
@@ -30,14 +32,24 @@ In addition, capistrano-mb changes many of Capistrano's defaults, including the
|
|
30
32
|
|
31
33
|
Not quite to your liking? Consider forking the project to meet your needs.
|
32
34
|
|
35
|
+
## Roadmap
|
36
|
+
|
37
|
+
I plan to continue maintaining this project for the benefit of deploying my own Rails apps for the foreseeable future. In practice, this means a new version of two per year. The behavior of capistrano-mb may change as I upgrade my apps to new versions of Rails. For example, at some point I might:
|
38
|
+
|
39
|
+
* Replace Unicorn with Puma
|
40
|
+
* Switch from dotenv to encrypted credentials
|
41
|
+
* Add Let's Encrypt
|
42
|
+
* Use a more robust database backup solution
|
43
|
+
|
44
|
+
*Future changes in capistrano-mb are not guaranteed to have graceful migration paths, so I recommend pinning your Gemfile dependency to a specific version and upgrading with extreme care.*
|
33
45
|
|
34
46
|
## Quick start
|
35
47
|
|
36
48
|
Please note that this project requires **Capistrano 3.x**, which is a complete rewrite of Capistrano 2.x. The two major versions are not compatible.
|
37
49
|
|
38
|
-
### 1. Purchase an Ubuntu
|
50
|
+
### 1. Purchase an Ubuntu 16.04 VPS
|
39
51
|
|
40
|
-
To use capistrano-mb, you'll need a clean Ubuntu server to deploy to. The only special requirement is that your public SSH key must be installed on the server for the `root` user.
|
52
|
+
To use capistrano-mb, you'll need a clean **Ubuntu 16.04** server to deploy to. The only special requirement is that your public SSH key must be installed on the server for the `root` user.
|
41
53
|
|
42
54
|
Test that you can SSH to the server as `root` without being prompted for a password. If that works, capistrano-mb can take care of the rest. You're ready to proceed!
|
43
55
|
|
@@ -46,10 +58,10 @@ Test that you can SSH to the server as `root` without being prompted for a passw
|
|
46
58
|
capistrano-mb needs to know the version of Ruby that your app requires, so that it can install Ruby during the provisioning process. Place a `.ruby-version` file in the root of your project containing the desired version, like this:
|
47
59
|
|
48
60
|
```
|
49
|
-
2.
|
61
|
+
2.5.0
|
50
62
|
```
|
51
63
|
|
52
|
-
*If you are using `rbenv`, just run `rbenv local 2.
|
64
|
+
*If you are using `rbenv`, just run `rbenv local 2.5.0` and it will create this file for you.*
|
53
65
|
|
54
66
|
### 3. Gemfile
|
55
67
|
|
@@ -67,15 +79,15 @@ Then for the capistrano-mb tools themselves, add these gems to the development g
|
|
67
79
|
group :development do
|
68
80
|
gem "capistrano-bundler", :require => false
|
69
81
|
gem "capistrano-rails", :require => false
|
70
|
-
gem "capistrano", "~> 3.
|
71
|
-
gem "capistrano-mb", :require => false
|
82
|
+
gem "capistrano", "~> 3.10", :require => false
|
83
|
+
gem "capistrano-mb", "~> 0.33.0" :require => false
|
72
84
|
end
|
73
85
|
```
|
74
86
|
|
75
87
|
And then execute:
|
76
88
|
|
77
89
|
```
|
78
|
-
$ bundle
|
90
|
+
$ bundle install
|
79
91
|
```
|
80
92
|
|
81
93
|
### 4. cap install
|
@@ -83,7 +95,7 @@ $ bundle
|
|
83
95
|
If your project doesn't yet have a `Capfile`, run `cap install` with the list of desired stages (environments). For simplicity, this installation guide will assume a single production stage:
|
84
96
|
|
85
97
|
```
|
86
|
-
cap install STAGES=production
|
98
|
+
bundle exec cap install STAGES=production
|
87
99
|
```
|
88
100
|
|
89
101
|
### 5. Capfile
|
@@ -112,14 +124,14 @@ Modify `config/deploy/production.rb` to specify the IP address of your productio
|
|
112
124
|
```ruby
|
113
125
|
server "my.production.ip",
|
114
126
|
:user => "deployer",
|
115
|
-
:roles => %w
|
127
|
+
:roles => %w[app backup cron db web]
|
116
128
|
```
|
117
129
|
|
118
130
|
*Note that you must include the `backup` and `cron` roles if you want to make use of capistrano-mb's database backups and crontab features.*
|
119
131
|
|
120
132
|
### 8. secrets.yml
|
121
133
|
|
122
|
-
|
134
|
+
Your Rails apps may have a `config/secrets.yml` file that specifies the Rails secret key. capistrano-mb configures dotenv to provide this secret in a `RAILS_SECRET_KEY_BASE` environment variable. You'll therefore need to modify `secrets.yml` as follows:
|
123
135
|
|
124
136
|
```ruby
|
125
137
|
production:
|
@@ -128,10 +140,10 @@ production:
|
|
128
140
|
|
129
141
|
### 9. Provision and deploy!
|
130
142
|
|
131
|
-
Run capistrano-mb's `provision
|
143
|
+
Run capistrano-mb's `provision` task. This will ask you a few questions, install Ruby, PostgreSQL, Nginx, etc., and set everything up. The entire process takes about 10 minutes (mostly due to compiling Ruby from source).
|
132
144
|
|
133
145
|
```
|
134
|
-
bundle exec cap production provision
|
146
|
+
bundle exec cap production provision
|
135
147
|
```
|
136
148
|
|
137
149
|
Once that's done, your app is now ready to deploy!
|
@@ -151,8 +163,9 @@ Most of the capistrano-mb recipes are designed to run automatically as part of `
|
|
151
163
|
The following list will suffice for most out-of-the-box Rails apps. The order of the list is not important.
|
152
164
|
|
153
165
|
```ruby
|
154
|
-
set :mb_recipes, %w
|
166
|
+
set :mb_recipes, %w[
|
155
167
|
aptitude
|
168
|
+
bundler
|
156
169
|
crontab
|
157
170
|
dotenv
|
158
171
|
logrotate
|
@@ -166,7 +179,7 @@ set :mb_recipes, %w(
|
|
166
179
|
unicorn
|
167
180
|
user
|
168
181
|
version
|
169
|
-
|
182
|
+
]
|
170
183
|
```
|
171
184
|
|
172
185
|
Even if you don't include a recipe in the auto-run list, you can still invoke the tasks of those recipes manually at your discretion. Run `bundle exec cap -T` to see the full list of tasks.
|
@@ -189,9 +202,9 @@ Check out my [rails-template][] project, which generates Rails applications with
|
|
189
202
|
|
190
203
|
## History
|
191
204
|
|
192
|
-
This gem used to be called capistrano-fiftyfive
|
205
|
+
This gem used to be called `capistrano-fiftyfive`. If you are upgrading from capistrano-fiftyfive, refer to the [CHANGELOG entry for v0.22.0](CHANGELOG.md#0220-2015-06-22) for migration instructions.
|
193
206
|
|
194
|
-
|
207
|
+
As of 0.33.0, capistrano-mb no longer supports Ubuntu 12.04 or 14.04. If your server runs one of these older versions, use [capistrano-mb 0.32.0](https://github.com/mattbrictson/capistrano-mb/tree/v0.32.0).
|
195
208
|
|
196
209
|
## Contributing
|
197
210
|
|
data/capistrano-mb.gemspec
CHANGED
@@ -9,11 +9,10 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.author = "Matt Brictson"
|
10
10
|
spec.email = "matt@mattbrictson.com"
|
11
11
|
spec.description = \
|
12
|
-
"Production-ready provisioning and deployment recipes for
|
13
|
-
"Rails
|
14
|
-
"PostgreSQL, dotenv, and more onto Ubuntu
|
15
|
-
|
16
|
-
spec.summary = "Additional Capistrano 3 recipes"
|
12
|
+
"Production-ready provisioning and deployment recipes for Rails 4 and "\
|
13
|
+
"Rails 5 stacks. Installs and configures Ruby, Nginx, Unicorn, "\
|
14
|
+
"PostgreSQL, dotenv, and more onto Ubuntu 16.04 LTS using Capistrano."
|
15
|
+
spec.summary = "Deploy Rails apps from scratch on Ubuntu 16.04 LTS"
|
17
16
|
spec.homepage = "https://github.com/mattbrictson/capistrano-mb"
|
18
17
|
spec.license = "MIT"
|
19
18
|
|
data/lib/capistrano/mb.rb
CHANGED
@@ -16,7 +16,6 @@ load File.expand_path("../tasks/dotenv.rake", __FILE__)
|
|
16
16
|
load File.expand_path("../tasks/postgresql.rake", __FILE__)
|
17
17
|
load File.expand_path("../tasks/nginx.rake", __FILE__)
|
18
18
|
load File.expand_path("../tasks/unicorn.rake", __FILE__)
|
19
|
-
load File.expand_path("../tasks/delayed_job.rake", __FILE__)
|
20
19
|
load File.expand_path("../tasks/crontab.rake", __FILE__)
|
21
20
|
load File.expand_path("../tasks/logrotate.rake", __FILE__)
|
22
21
|
load File.expand_path("../tasks/rbenv.rake", __FILE__)
|
@@ -27,4 +26,3 @@ load File.expand_path("../tasks/version.rake", __FILE__)
|
|
27
26
|
load File.expand_path("../tasks/rake.rake", __FILE__)
|
28
27
|
load File.expand_path("../tasks/sidekiq.rake", __FILE__)
|
29
28
|
load File.expand_path("../tasks/bundler.rake", __FILE__)
|
30
|
-
load File.expand_path("../tasks/fiftyfive.rake", __FILE__)
|
data/lib/capistrano/mb/dsl.rb
CHANGED
@@ -154,45 +154,3 @@ module Capistrano
|
|
154
154
|
end
|
155
155
|
end
|
156
156
|
end
|
157
|
-
|
158
|
-
require "capistrano/dsl/env"
|
159
|
-
|
160
|
-
module Capistrano
|
161
|
-
module DSL
|
162
|
-
module Env
|
163
|
-
# Overrides capistrano's default `set` to assist developers that are
|
164
|
-
# migrating from the `fiftyfive_*` to `mb_*` variable names. This will
|
165
|
-
# be removed in a future version of capistrano-mb.
|
166
|
-
alias_method :_orig_capistrano_set, :set
|
167
|
-
def set(name, *args, &block)
|
168
|
-
if name.to_s =~ /^fiftyfive_/
|
169
|
-
mb_name = name.to_s.gsub(/^fiftyfive_/, "mb_")
|
170
|
-
compatibility_warning(
|
171
|
-
"Use `set :#{mb_name}` instead of `set :#{name}` to ensure "\
|
172
|
-
"compatibility with future versions of capistrano-mb. The "\
|
173
|
-
"fiftyfive_* names have been deprecated."
|
174
|
-
)
|
175
|
-
name = mb_name.intern
|
176
|
-
end
|
177
|
-
_orig_capistrano_set(name, *args, &block)
|
178
|
-
end
|
179
|
-
|
180
|
-
# Overrides capistrano's default `fetch` to assist developers that are
|
181
|
-
# migrating from the `fiftyfive_*` to `mb_*` variable names. This will
|
182
|
-
# be removed in a future version of capistrano-mb.
|
183
|
-
alias_method :_orig_capistrano_fetch, :fetch
|
184
|
-
def fetch(name, *args, &block)
|
185
|
-
if name.to_s =~ /^fiftyfive_/
|
186
|
-
mb_name = name.to_s.gsub(/^fiftyfive_/, "mb_")
|
187
|
-
compatibility_warning(
|
188
|
-
"Use `fetch :#{mb_name}` instead of `fetch :#{name}` to ensure "\
|
189
|
-
"compatibility with future versions of capistrano-mb. The "\
|
190
|
-
"fiftyfive_* names have been deprecated."
|
191
|
-
)
|
192
|
-
name = mb_name.intern
|
193
|
-
end
|
194
|
-
_orig_capistrano_fetch(name, *args, &block)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
[Unit]
|
2
|
+
Description=sidekiq worker for <%= fetch(:application) %>
|
3
|
+
After=syslog.target network.target
|
4
|
+
|
5
|
+
[Service]
|
6
|
+
Environment=RAILS_ENV=<%= fetch(:rails_env) %>
|
7
|
+
ExecStart=/bin/bash -lc 'exec bin/sidekiq -e <%= fetch(:rails_env) %> -P tmp/pids/sidekiq.pid --concurrency <%= fetch(:mb_sidekiq_concurrency) %>'
|
8
|
+
PIDFile=<%= current_path %>/tmp/pids/sidekiq.pid
|
9
|
+
Restart=on-failure
|
10
|
+
RestartSec=1
|
11
|
+
StandardError=syslog
|
12
|
+
StandardInput=null
|
13
|
+
StandardOutput=syslog
|
14
|
+
SyslogIdentifier=<%= application_basename %>-sidekiq
|
15
|
+
TimeoutStopSec=5
|
16
|
+
User=<%= sidekiq_user %>
|
17
|
+
WorkingDirectory=<%= current_path %>
|
18
|
+
|
19
|
+
[Install]
|
20
|
+
WantedBy=multi-user.target
|
@@ -0,0 +1,21 @@
|
|
1
|
+
[Unit]
|
2
|
+
Description=unicorn for <%= fetch(:application) %>
|
3
|
+
After=syslog.target network.target
|
4
|
+
|
5
|
+
[Service]
|
6
|
+
Environment=RAILS_ENV=<%= fetch(:rails_env) %>
|
7
|
+
ExecReload=/usr/bin/kill -USR2 $MAINPID
|
8
|
+
ExecStart=/bin/bash -lc 'exec bin/unicorn -c <%= fetch(:mb_unicorn_config) %> -E <%= fetch(:rails_env) %>'
|
9
|
+
ExecStop=/usr/bin/kill -QUIT $MAINPID
|
10
|
+
PIDFile=<%= fetch(:mb_unicorn_pid) %>
|
11
|
+
Restart=always
|
12
|
+
StandardError=syslog
|
13
|
+
StandardInput=null
|
14
|
+
StandardOutput=syslog
|
15
|
+
SyslogIdentifier=<%= application_basename %>-unicorn
|
16
|
+
TimeoutStopSec=5
|
17
|
+
User=<%= unicorn_user %>
|
18
|
+
WorkingDirectory=<%= current_path %>
|
19
|
+
|
20
|
+
[Install]
|
21
|
+
WantedBy=multi-user.target
|
@@ -1,23 +1,30 @@
|
|
1
1
|
mb_recipe :aptitude do
|
2
|
-
during :provision, %w
|
3
|
-
before "provision:14_04", "mb:aptitude:install_software_properties"
|
4
|
-
before "provision:14_04", "mb:aptitude:install_postgres_repo"
|
5
|
-
before "provision:14_04", "mb:aptitude:change_postgres_packages"
|
2
|
+
during :provision, %w[check upgrade install]
|
6
3
|
end
|
7
4
|
|
8
5
|
namespace :mb do
|
9
6
|
namespace :aptitude do
|
7
|
+
desc "Verify server is Ubuntu 16.04"
|
8
|
+
task :check do
|
9
|
+
privileged_on roles(:all) do
|
10
|
+
version = capture(:sudo, "lsb_release -a")[/^Release:\s+(\S+)$/, 1]
|
11
|
+
next if version == "16.04"
|
12
|
+
|
13
|
+
raise "Ubuntu version #{version || "unknown"} is not supported by "\
|
14
|
+
"capistrano-mb. Only Ubuntu 16.04 is supported. Downgrade "\
|
15
|
+
"capistrano-mb if you need to use an older version of Ubuntu."
|
16
|
+
end
|
17
|
+
end
|
10
18
|
|
11
|
-
desc "Run `
|
19
|
+
desc "Run `apt update` and then run `apt upgrade`"
|
12
20
|
task :upgrade do
|
13
|
-
privileged_on roles(:all) do
|
21
|
+
privileged_on roles(:all) do
|
14
22
|
_update
|
15
|
-
|
23
|
+
_upgrade
|
16
24
|
end
|
17
25
|
end
|
18
26
|
|
19
|
-
|
20
|
-
desc "Run `aptitude install` for packages required by the roles of "\
|
27
|
+
desc "Run `apt install` for packages required by the roles of "\
|
21
28
|
"each server."
|
22
29
|
task :install do
|
23
30
|
privileged_on roles(:all) do |host|
|
@@ -37,69 +44,39 @@ namespace :mb do
|
|
37
44
|
end
|
38
45
|
end
|
39
46
|
|
40
|
-
desc "Add the official apt repository for PostgreSQL"
|
41
|
-
task :install_postgres_repo do
|
42
|
-
privileged_on roles(:all) do |host|
|
43
|
-
_add_repository(
|
44
|
-
"deb http://apt.postgresql.org/pub/repos/apt/ trusty-pgdg main",
|
45
|
-
:key => "https://www.postgresql.org/media/keys/ACCC4CF8.asc")
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
desc "Change 12.04 PostgreSQL package requirements to 14.04 versions"
|
50
|
-
task :change_postgres_packages do
|
51
|
-
packages = fetch(:mb_aptitude_packages, {})
|
52
|
-
packages = Hash[packages.map do |key, value|
|
53
|
-
[key.sub(/@ppa:pitti\/postgresql$/, ""), value]
|
54
|
-
end]
|
55
|
-
set(:mb_aptitude_packages, packages)
|
56
|
-
end
|
57
|
-
|
58
|
-
desc "Install package needed for apt-add-repository on 14.04"
|
59
|
-
task :install_software_properties do
|
60
|
-
privileged_on roles(:all) do |host|
|
61
|
-
unless _already_installed?("software-properties-common")
|
62
|
-
_install("software-properties-common")
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
47
|
def _already_installed?(pkg)
|
68
|
-
test(:sudo,
|
48
|
+
test(:sudo,
|
49
|
+
"dpkg", "-s", pkg,
|
50
|
+
"2>/dev/null", "|", :grep, "-q 'ok installed'")
|
69
51
|
end
|
70
52
|
|
71
|
-
def _add_repository(repo
|
72
|
-
unless _already_installed?("
|
73
|
-
_install("
|
53
|
+
def _add_repository(repo)
|
54
|
+
unless _already_installed?("software-properties-common")
|
55
|
+
_install("software-properties-common")
|
74
56
|
end
|
75
57
|
execute :sudo, "apt-add-repository", "-y '#{repo}'"
|
76
|
-
|
77
|
-
if (key = options.fetch(:key, nil))
|
78
|
-
execute "wget --prefer-family=IPv4 --quiet -O - #{key} | sudo apt-key add -"
|
79
|
-
end
|
80
58
|
end
|
81
59
|
|
82
60
|
def _install(pkg)
|
83
|
-
|
84
|
-
execute :sudo, "aptitude", "-y -q install", pkg
|
85
|
-
end
|
61
|
+
execute :sudo, "DEBIAN_FRONTEND=noninteractive apt-get -y install", pkg
|
86
62
|
end
|
87
63
|
|
88
64
|
def _update
|
89
|
-
|
90
|
-
execute :sudo, "aptitude", "-q -q -y update"
|
91
|
-
end
|
65
|
+
execute :sudo, "DEBIAN_FRONTEND=noninteractive apt-get -y update"
|
92
66
|
end
|
93
67
|
|
94
|
-
def
|
95
|
-
|
96
|
-
|
97
|
-
|
68
|
+
def _upgrade
|
69
|
+
execute :sudo,
|
70
|
+
"DEBIAN_FRONTEND=noninteractive apt-get -y "\
|
71
|
+
'-o DPkg::options::="--force-confdef" '\
|
72
|
+
'-o DPkg::options::="--force-confold" '\
|
73
|
+
"upgrade"
|
98
74
|
end
|
99
75
|
|
100
76
|
def _each_package(host)
|
101
77
|
return to_enum(:_each_package, host) unless block_given?
|
102
78
|
hostname = host.hostname
|
79
|
+
|
103
80
|
fetch(:mb_aptitude_packages).each do |package_spec, *role_list|
|
104
81
|
next unless roles(*role_list.flatten).map(&:hostname).include?(hostname)
|
105
82
|
|
@@ -22,32 +22,29 @@ namespace :load do
|
|
22
22
|
set :mb_privileged_user, "root"
|
23
23
|
|
24
24
|
set :mb_aptitude_packages,
|
25
|
-
"build-essential"
|
26
|
-
"curl"
|
27
|
-
"debian-goodies"
|
28
|
-
"git-core"
|
29
|
-
"libpq-dev
|
30
|
-
"libreadline-gplv2-dev"
|
31
|
-
"libssl-dev"
|
32
|
-
"libxml2"
|
33
|
-
"libxml2-dev"
|
34
|
-
"libxslt1-dev"
|
35
|
-
"nginx@ppa:nginx/stable"
|
36
|
-
"nodejs
|
37
|
-
"ntp"
|
38
|
-
"postgresql
|
39
|
-
"postgresql
|
40
|
-
"tklib"
|
41
|
-
"ufw"
|
42
|
-
"zlib1g-dev"
|
25
|
+
"build-essential" => :all,
|
26
|
+
"curl" => :all,
|
27
|
+
"debian-goodies" => :all,
|
28
|
+
"git-core" => :all,
|
29
|
+
"libpq-dev" => :all,
|
30
|
+
"libreadline-gplv2-dev" => :all,
|
31
|
+
"libssl-dev" => :all,
|
32
|
+
"libxml2" => :all,
|
33
|
+
"libxml2-dev" => :all,
|
34
|
+
"libxslt1-dev" => :all,
|
35
|
+
"nginx@ppa:nginx/stable" => :web,
|
36
|
+
"nodejs" => :all,
|
37
|
+
"ntp" => :all,
|
38
|
+
"postgresql" => :db,
|
39
|
+
"postgresql-client" => :all,
|
40
|
+
"tklib" => :all,
|
41
|
+
"ufw" => :all,
|
42
|
+
"zlib1g-dev" => :all
|
43
43
|
|
44
44
|
set :mb_bundler_lockfile, "Gemfile.lock"
|
45
45
|
set :mb_bundler_gem_install_command,
|
46
46
|
"gem install bundler --conservative --no-document"
|
47
47
|
|
48
|
-
set :mb_delayed_job_args, "-n 2"
|
49
|
-
set :mb_delayed_job_script, "bin/delayed_job"
|
50
|
-
|
51
48
|
set :mb_dotenv_keys, %w(rails_secret_key_base postmark_api_key)
|
52
49
|
set :mb_dotenv_filename, -> { ".env.#{fetch(:rails_env)}" }
|
53
50
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
mb_recipe :sidekiq do
|
2
|
-
during :provision, "
|
2
|
+
during :provision, "systemd"
|
3
3
|
during "deploy:start", "start"
|
4
4
|
during "deploy:stop", "stop"
|
5
5
|
during "deploy:restart", "restart"
|
@@ -8,35 +8,38 @@ end
|
|
8
8
|
|
9
9
|
namespace :mb do
|
10
10
|
namespace :sidekiq do
|
11
|
-
desc "Install sidekiq
|
12
|
-
task :
|
11
|
+
desc "Install sidekiq systemd config"
|
12
|
+
task :systemd do
|
13
13
|
privileged_on roles(fetch(:mb_sidekiq_role)) do |host, user|
|
14
|
-
|
15
|
-
|
14
|
+
sidekiq_user = fetch(:mb_sidekiq_user) || user
|
15
|
+
|
16
|
+
template "sidekiq.service.erb",
|
17
|
+
"/etc/systemd/system/sidekiq_#{application_basename}.service",
|
16
18
|
:mode => "a+rx",
|
17
19
|
:binding => binding,
|
18
20
|
:sudo => true
|
19
21
|
|
20
|
-
execute
|
22
|
+
execute :sudo, "systemctl daemon-reload"
|
23
|
+
execute :sudo, "systemctl enable sidekiq_#{application_basename}.service"
|
24
|
+
|
25
|
+
unless test(:sudo, "grep -qs sidekiq_#{application_basename}.service /etc/sudoers.d/#{user}")
|
26
|
+
execute :sudo, "touch -f /etc/sudoers.d/#{user}"
|
27
|
+
execute :sudo, "chmod u+w /etc/sudoers.d/#{user}"
|
28
|
+
execute :sudo, "echo '#{user} ALL=NOPASSWD: /bin/systemctl start sidekiq_#{application_basename}.service' >> /etc/sudoers.d/#{user}"
|
29
|
+
execute :sudo, "echo '#{user} ALL=NOPASSWD: /bin/systemctl stop sidekiq_#{application_basename}.service' >> /etc/sudoers.d/#{user}"
|
30
|
+
execute :sudo, "echo '#{user} ALL=NOPASSWD: /bin/systemctl restart sidekiq_#{application_basename}.service' >> /etc/sudoers.d/#{user}"
|
31
|
+
execute :sudo, "chmod 440 /etc/sudoers.d/#{user}"
|
32
|
+
end
|
21
33
|
end
|
22
34
|
end
|
23
35
|
|
24
|
-
%w[start stop].each do |command|
|
36
|
+
%w[start stop restart].each do |command|
|
25
37
|
desc "#{command} sidekiq"
|
26
38
|
task command do
|
27
39
|
on roles(fetch(:mb_sidekiq_role)) do
|
28
|
-
execute "
|
40
|
+
execute :sudo, "systemctl #{command} sidekiq_#{application_basename}.service"
|
29
41
|
end
|
30
42
|
end
|
31
43
|
end
|
32
|
-
|
33
|
-
desc "restart sidekiq"
|
34
|
-
task :restart do
|
35
|
-
# Re-enable the "stop" task, just in case we called it once already
|
36
|
-
# (as would happen during deploy:migrate_and_restart).
|
37
|
-
Rake::Task["mb:sidekiq:stop"].reenable
|
38
|
-
invoke "mb:sidekiq:stop"
|
39
|
-
invoke "mb:sidekiq:start"
|
40
|
-
end
|
41
44
|
end
|
42
45
|
end
|
@@ -1,5 +1,5 @@
|
|
1
1
|
mb_recipe :unicorn do
|
2
|
-
during :provision, %w(
|
2
|
+
during :provision, %w(systemd config_rb)
|
3
3
|
during "deploy:start", "start"
|
4
4
|
during "deploy:stop", "stop"
|
5
5
|
during "deploy:restart", "restart"
|
@@ -8,18 +8,28 @@ end
|
|
8
8
|
|
9
9
|
namespace :mb do
|
10
10
|
namespace :unicorn do
|
11
|
-
desc "Install
|
12
|
-
task :
|
11
|
+
desc "Install unicorn systemd config"
|
12
|
+
task :systemd do
|
13
13
|
privileged_on roles(:app) do |host, user|
|
14
14
|
unicorn_user = fetch(:mb_unicorn_user) || user
|
15
15
|
|
16
|
-
template "
|
17
|
-
"/etc/
|
16
|
+
template "unicorn.service.erb",
|
17
|
+
"/etc/systemd/system/unicorn_#{application_basename}.service",
|
18
18
|
:mode => "a+rx",
|
19
19
|
:binding => binding,
|
20
20
|
:sudo => true
|
21
21
|
|
22
|
-
execute
|
22
|
+
execute :sudo, "systemctl daemon-reload"
|
23
|
+
execute :sudo, "systemctl enable unicorn_#{application_basename}.service"
|
24
|
+
|
25
|
+
unless test(:sudo, "grep -qs unicorn_#{application_basename}.service /etc/sudoers.d/#{user}")
|
26
|
+
execute :sudo, "touch -f /etc/sudoers.d/#{user}"
|
27
|
+
execute :sudo, "chmod u+w /etc/sudoers.d/#{user}"
|
28
|
+
execute :sudo, "echo '#{user} ALL=NOPASSWD: /bin/systemctl start unicorn_#{application_basename}.service' >> /etc/sudoers.d/#{user}"
|
29
|
+
execute :sudo, "echo '#{user} ALL=NOPASSWD: /bin/systemctl stop unicorn_#{application_basename}.service' >> /etc/sudoers.d/#{user}"
|
30
|
+
execute :sudo, "echo '#{user} ALL=NOPASSWD: /bin/systemctl restart unicorn_#{application_basename}.service' >> /etc/sudoers.d/#{user}"
|
31
|
+
execute :sudo, "chmod 440 /etc/sudoers.d/#{user}"
|
32
|
+
end
|
23
33
|
end
|
24
34
|
end
|
25
35
|
|
@@ -34,7 +44,7 @@ namespace :mb do
|
|
34
44
|
desc "#{command} unicorn"
|
35
45
|
task command do
|
36
46
|
on roles(:app) do
|
37
|
-
execute "
|
47
|
+
execute :sudo, "systemctl #{command} unicorn_#{application_basename}.service"
|
38
48
|
end
|
39
49
|
end
|
40
50
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: capistrano-mb
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.33.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matt Brictson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-12-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: capistrano
|
@@ -80,9 +80,9 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
-
description:
|
84
|
-
|
85
|
-
onto Ubuntu
|
83
|
+
description: Production-ready provisioning and deployment recipes for Rails 4 and
|
84
|
+
Rails 5 stacks. Installs and configures Ruby, Nginx, Unicorn, PostgreSQL, dotenv,
|
85
|
+
and more onto Ubuntu 16.04 LTS using Capistrano.
|
86
86
|
email: matt@mattbrictson.com
|
87
87
|
executables: []
|
88
88
|
extensions: []
|
@@ -95,14 +95,12 @@ files:
|
|
95
95
|
- README.md
|
96
96
|
- Rakefile
|
97
97
|
- capistrano-mb.gemspec
|
98
|
-
- lib/capistrano/fiftyfive.rb
|
99
98
|
- lib/capistrano/mb.rb
|
100
99
|
- lib/capistrano/mb/compatibility.rb
|
101
100
|
- lib/capistrano/mb/dsl.rb
|
102
101
|
- lib/capistrano/mb/recipe.rb
|
103
102
|
- lib/capistrano/mb/templates/crontab.erb
|
104
103
|
- lib/capistrano/mb/templates/csr_config.erb
|
105
|
-
- lib/capistrano/mb/templates/delayed_job_init.erb
|
106
104
|
- lib/capistrano/mb/templates/logrotate.erb
|
107
105
|
- lib/capistrano/mb/templates/maintenance.html.erb
|
108
106
|
- lib/capistrano/mb/templates/nginx.erb
|
@@ -110,19 +108,17 @@ files:
|
|
110
108
|
- lib/capistrano/mb/templates/pgpass.erb
|
111
109
|
- lib/capistrano/mb/templates/postgresql-backup-logrotate.erb
|
112
110
|
- lib/capistrano/mb/templates/rbenv_bashrc
|
113
|
-
- lib/capistrano/mb/templates/
|
111
|
+
- lib/capistrano/mb/templates/sidekiq.service.erb
|
114
112
|
- lib/capistrano/mb/templates/ssl_setup
|
115
113
|
- lib/capistrano/mb/templates/unicorn.rb.erb
|
116
|
-
- lib/capistrano/mb/templates/
|
114
|
+
- lib/capistrano/mb/templates/unicorn.service.erb
|
117
115
|
- lib/capistrano/mb/templates/version.rb.erb
|
118
116
|
- lib/capistrano/mb/version.rb
|
119
117
|
- lib/capistrano/tasks/aptitude.rake
|
120
118
|
- lib/capistrano/tasks/bundler.rake
|
121
119
|
- lib/capistrano/tasks/crontab.rake
|
122
120
|
- lib/capistrano/tasks/defaults.rake
|
123
|
-
- lib/capistrano/tasks/delayed_job.rake
|
124
121
|
- lib/capistrano/tasks/dotenv.rake
|
125
|
-
- lib/capistrano/tasks/fiftyfive.rake
|
126
122
|
- lib/capistrano/tasks/logrotate.rake
|
127
123
|
- lib/capistrano/tasks/maintenance.rake
|
128
124
|
- lib/capistrano/tasks/migrate.rake
|
@@ -158,8 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
154
|
version: '0'
|
159
155
|
requirements: []
|
160
156
|
rubyforge_project:
|
161
|
-
rubygems_version: 2.
|
157
|
+
rubygems_version: 2.7.3
|
162
158
|
signing_key:
|
163
159
|
specification_version: 4
|
164
|
-
summary:
|
160
|
+
summary: Deploy Rails apps from scratch on Ubuntu 16.04 LTS
|
165
161
|
test_files: []
|
data/lib/capistrano/fiftyfive.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
### BEGIN INIT INFO
|
3
|
-
# Provides: delayed_job
|
4
|
-
# Required-Start: $remote_fs $syslog
|
5
|
-
# Required-Stop: $remote_fs $syslog
|
6
|
-
# Default-Start: 2 3 4 5
|
7
|
-
# Default-Stop: 0 1 6
|
8
|
-
# Short-Description: Manage delayed_job worker
|
9
|
-
# Description: Start, stop, restart delayed_job workers for a specific application.
|
10
|
-
### END INIT INFO
|
11
|
-
set -e
|
12
|
-
|
13
|
-
# Feel free to change any of the following variables for your app:
|
14
|
-
CMD="cd <%= current_path %>; RAILS_ENV=<%= fetch(:rails_env) %> <%= fetch(:mb_delayed_job_script) %>"
|
15
|
-
AS_USER=<%= fetch(:mb_delayed_job_user, user) %>
|
16
|
-
set -u
|
17
|
-
|
18
|
-
run () {
|
19
|
-
if [ "$(id -un)" = "$AS_USER" ]; then
|
20
|
-
eval $1
|
21
|
-
else
|
22
|
-
su -c "$1" - $AS_USER
|
23
|
-
fi
|
24
|
-
}
|
25
|
-
|
26
|
-
case "$1" in
|
27
|
-
start)
|
28
|
-
run "$CMD start <%= fetch(:mb_delayed_job_args) %>"
|
29
|
-
;;
|
30
|
-
stop)
|
31
|
-
run "$CMD stop"
|
32
|
-
;;
|
33
|
-
restart)
|
34
|
-
run "$CMD restart <%= fetch(:mb_delayed_job_args) %>"
|
35
|
-
;;
|
36
|
-
esac
|
@@ -1,100 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
### BEGIN INIT INFO
|
3
|
-
# Provides: sidekiq
|
4
|
-
# Required-Start: $remote_fs $syslog
|
5
|
-
# Required-Stop: $remote_fs $syslog
|
6
|
-
# Default-Start: 2 3 4 5
|
7
|
-
# Default-Stop: 0 1 6
|
8
|
-
# Short-Description: Manage sidekiq worker
|
9
|
-
# Description: Start, stop, restart sidekiq worker.
|
10
|
-
### END INIT INFO
|
11
|
-
|
12
|
-
APP_DIR="<%= current_path %>"
|
13
|
-
LOG_FILE="$APP_DIR/log/sidekiq.log"
|
14
|
-
PID_FILE="$APP_DIR/tmp/pids/sidekiq.pid"
|
15
|
-
SIDEKIQ="sidekiq"
|
16
|
-
SIDEKIQCTL="sidekiqctl"
|
17
|
-
APP_ENV="<%= fetch(:rails_env) %>"
|
18
|
-
BUNDLE="bundle"
|
19
|
-
AS_USER=<%= fetch(:mb_sidekiq_user, user) %>
|
20
|
-
CONCURRENCY=<%= fetch(:mb_sidekiq_concurrency) %>
|
21
|
-
|
22
|
-
START_CMD="cd $APP_DIR; $BUNDLE exec $SIDEKIQ -d -e $APP_ENV -P $PID_FILE --concurrency $CONCURRENCY -L $LOG_FILE"
|
23
|
-
CTL_CMD="cd $APP_DIR; $BUNDLE exec $SIDEKIQCTL"
|
24
|
-
RETVAL=0
|
25
|
-
|
26
|
-
|
27
|
-
run () {
|
28
|
-
if [ "$(id -un)" = "$AS_USER" ]; then
|
29
|
-
eval $1
|
30
|
-
else
|
31
|
-
su -c "$1" - $AS_USER
|
32
|
-
fi
|
33
|
-
}
|
34
|
-
|
35
|
-
start() {
|
36
|
-
|
37
|
-
status
|
38
|
-
if [ $? -eq 1 ]; then
|
39
|
-
|
40
|
-
[ -d $APP_DIR ] || (echo "$APP_DIR not found!.. Exiting"; exit 6)
|
41
|
-
echo "Starting $SIDEKIQ message processor .. "
|
42
|
-
run "$START_CMD"
|
43
|
-
RETVAL=$?
|
44
|
-
#Sleeping for 8 seconds for process to be precisely visible in process table - See status ()
|
45
|
-
sleep 8
|
46
|
-
return $RETVAL
|
47
|
-
else
|
48
|
-
echo "$SIDEKIQ message processor is already running .. "
|
49
|
-
fi
|
50
|
-
|
51
|
-
|
52
|
-
}
|
53
|
-
|
54
|
-
stop() {
|
55
|
-
|
56
|
-
status
|
57
|
-
if [ $? -eq 0 ]; then
|
58
|
-
|
59
|
-
echo "Stopping $SIDEKIQ message processor .."
|
60
|
-
run "$CTL_CMD stop $PID_FILE"
|
61
|
-
RETVAL=$?
|
62
|
-
return $RETVAL
|
63
|
-
|
64
|
-
else
|
65
|
-
echo "$SIDEKIQ message processor is already stopped .. "
|
66
|
-
fi
|
67
|
-
|
68
|
-
}
|
69
|
-
|
70
|
-
status() {
|
71
|
-
|
72
|
-
ps -ef | egrep 'sidekiq [0-9]+.[0-9]+.[0-9]+' | grep -v grep
|
73
|
-
return $?
|
74
|
-
}
|
75
|
-
|
76
|
-
|
77
|
-
case "$1" in
|
78
|
-
start)
|
79
|
-
start
|
80
|
-
;;
|
81
|
-
stop)
|
82
|
-
stop
|
83
|
-
;;
|
84
|
-
status)
|
85
|
-
status
|
86
|
-
|
87
|
-
if [ $? -eq 0 ]; then
|
88
|
-
echo "$SIDEKIQ message processor is running .."
|
89
|
-
RETVAL=0
|
90
|
-
else
|
91
|
-
echo "$SIDEKIQ message processor is stopped .."
|
92
|
-
RETVAL=1
|
93
|
-
fi
|
94
|
-
;;
|
95
|
-
*)
|
96
|
-
echo "Usage: $0 {start|stop|status}"
|
97
|
-
exit 0
|
98
|
-
;;
|
99
|
-
esac
|
100
|
-
exit $RETVAL
|
@@ -1,84 +0,0 @@
|
|
1
|
-
#!/bin/sh
|
2
|
-
### BEGIN INIT INFO
|
3
|
-
# Provides: unicorn
|
4
|
-
# Required-Start: $remote_fs $syslog
|
5
|
-
# Required-Stop: $remote_fs $syslog
|
6
|
-
# Default-Start: 2 3 4 5
|
7
|
-
# Default-Stop: 0 1 6
|
8
|
-
# Short-Description: Manage unicorn server
|
9
|
-
# Description: Start, stop, restart unicorn server for a specific application.
|
10
|
-
### END INIT INFO
|
11
|
-
set -e
|
12
|
-
|
13
|
-
# Feel free to change any of the following variables for your app:
|
14
|
-
TIMEOUT=${TIMEOUT-60}
|
15
|
-
APP_ROOT=<%= current_path %>
|
16
|
-
PID=<%= fetch(:mb_unicorn_pid) %>
|
17
|
-
CMD="cd <%= current_path %>; bundle exec unicorn -D -c <%= fetch(:mb_unicorn_config) %> -E <%= fetch(:rails_env) %>"
|
18
|
-
AS_USER=<%= unicorn_user %>
|
19
|
-
set -u
|
20
|
-
|
21
|
-
OLD_PIN="$PID.oldbin"
|
22
|
-
|
23
|
-
sig () {
|
24
|
-
test -s "$PID" && kill -$1 `cat $PID`
|
25
|
-
}
|
26
|
-
|
27
|
-
oldsig () {
|
28
|
-
test -s $OLD_PIN && kill -$1 `cat $OLD_PIN`
|
29
|
-
}
|
30
|
-
|
31
|
-
run () {
|
32
|
-
if [ "$(id -un)" = "$AS_USER" ]; then
|
33
|
-
eval $1
|
34
|
-
else
|
35
|
-
su -c "$1" - $AS_USER
|
36
|
-
fi
|
37
|
-
}
|
38
|
-
|
39
|
-
case "$1" in
|
40
|
-
start)
|
41
|
-
sig 0 && echo >&2 "Already running" && exit 0
|
42
|
-
run "$CMD"
|
43
|
-
;;
|
44
|
-
stop)
|
45
|
-
sig QUIT && exit 0
|
46
|
-
echo >&2 "Not running"
|
47
|
-
;;
|
48
|
-
force-stop)
|
49
|
-
sig TERM && exit 0
|
50
|
-
echo >&2 "Not running"
|
51
|
-
;;
|
52
|
-
restart|reload)
|
53
|
-
sig USR2 && echo reloaded OK && exit 0
|
54
|
-
echo >&2 "Couldn't reload, starting '$CMD' instead"
|
55
|
-
run "$CMD"
|
56
|
-
;;
|
57
|
-
upgrade)
|
58
|
-
if sig USR2 && sleep 2 && sig 0 && oldsig QUIT
|
59
|
-
then
|
60
|
-
n=$TIMEOUT
|
61
|
-
while test -s $OLD_PIN && test $n -ge 0
|
62
|
-
do
|
63
|
-
printf '.' && sleep 1 && n=$(( $n - 1 ))
|
64
|
-
done
|
65
|
-
echo
|
66
|
-
|
67
|
-
if test $n -lt 0 && test -s $OLD_PIN
|
68
|
-
then
|
69
|
-
echo >&2 "$OLD_PIN still exists after $TIMEOUT seconds"
|
70
|
-
exit 1
|
71
|
-
fi
|
72
|
-
exit 0
|
73
|
-
fi
|
74
|
-
echo >&2 "Couldn't upgrade, starting '$CMD' instead"
|
75
|
-
run "$CMD"
|
76
|
-
;;
|
77
|
-
reopen-logs)
|
78
|
-
sig USR1
|
79
|
-
;;
|
80
|
-
*)
|
81
|
-
echo >&2 "Usage: $0 <start|stop|restart|upgrade|force-stop|reopen-logs>"
|
82
|
-
exit 1
|
83
|
-
;;
|
84
|
-
esac
|
@@ -1,33 +0,0 @@
|
|
1
|
-
mb_recipe :delayed_job do
|
2
|
-
during :provision, "init_d"
|
3
|
-
during "deploy:start", "start"
|
4
|
-
during "deploy:stop", "stop"
|
5
|
-
during "deploy:restart", "restart"
|
6
|
-
during "deploy:publishing", "restart"
|
7
|
-
end
|
8
|
-
|
9
|
-
namespace :mb do
|
10
|
-
namespace :delayed_job do
|
11
|
-
desc "Install delayed_job service script"
|
12
|
-
task :init_d do
|
13
|
-
privileged_on roles(:delayed_job) do |host, user|
|
14
|
-
template "delayed_job_init.erb",
|
15
|
-
"/etc/init.d/delayed_job_#{application_basename}",
|
16
|
-
:mode => "a+rx",
|
17
|
-
:binding => binding,
|
18
|
-
:sudo => true
|
19
|
-
|
20
|
-
execute "sudo update-rc.d -f delayed_job_#{application_basename} defaults"
|
21
|
-
end
|
22
|
-
end
|
23
|
-
|
24
|
-
%w[start stop restart].each do |command|
|
25
|
-
desc "#{command} delayed_job"
|
26
|
-
task command do
|
27
|
-
on roles(:delayed_job) do
|
28
|
-
execute "service delayed_job_#{application_basename} #{command}"
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,59 +0,0 @@
|
|
1
|
-
# Provides backward compatibility with the old "fiftyfive" task names.
|
2
|
-
|
3
|
-
tasks = %w(
|
4
|
-
fiftyfive:aptitude:change_postgres_packages
|
5
|
-
fiftyfive:aptitude:install
|
6
|
-
fiftyfive:aptitude:install_postgres_repo
|
7
|
-
fiftyfive:aptitude:upgrade
|
8
|
-
fiftyfive:crontab
|
9
|
-
fiftyfive:delayed_job:init_d
|
10
|
-
fiftyfive:delayed_job:restart
|
11
|
-
fiftyfive:delayed_job:start
|
12
|
-
fiftyfive:delayed_job:stop
|
13
|
-
fiftyfive:dotenv:replace
|
14
|
-
fiftyfive:dotenv:update
|
15
|
-
fiftyfive:logrotate
|
16
|
-
fiftyfive:maintenance:disable
|
17
|
-
fiftyfive:maintenance:enable
|
18
|
-
fiftyfive:migrate:deploy
|
19
|
-
fiftyfive:nginx:configure
|
20
|
-
fiftyfive:nginx:restart
|
21
|
-
fiftyfive:nginx:start
|
22
|
-
fiftyfive:nginx:stop
|
23
|
-
fiftyfive:postgresql:create_database
|
24
|
-
fiftyfive:postgresql:create_user
|
25
|
-
fiftyfive:postgresql:database_yml
|
26
|
-
fiftyfive:postgresql:dump
|
27
|
-
fiftyfive:postgresql:logrotate_backup
|
28
|
-
fiftyfive:postgresql:pgpass
|
29
|
-
fiftyfive:postgresql:restore
|
30
|
-
fiftyfive:postgresql:tune
|
31
|
-
fiftyfive:rake
|
32
|
-
fiftyfive:rbenv:install
|
33
|
-
fiftyfive:rbenv:upgrade
|
34
|
-
fiftyfive:seed
|
35
|
-
fiftyfive:sidekiq:init_d
|
36
|
-
fiftyfive:sidekiq:restart
|
37
|
-
fiftyfive:sidekiq:start
|
38
|
-
fiftyfive:sidekiq:stop
|
39
|
-
fiftyfive:ssl:generate_csr
|
40
|
-
fiftyfive:ssl:generate_dh
|
41
|
-
fiftyfive:ssl:generate_self_signed_crt
|
42
|
-
fiftyfive:ufw:configure
|
43
|
-
fiftyfive:unicorn:config_rb
|
44
|
-
fiftyfive:unicorn:init_d
|
45
|
-
fiftyfive:unicorn:restart
|
46
|
-
fiftyfive:unicorn:start
|
47
|
-
fiftyfive:unicorn:stop
|
48
|
-
fiftyfive:user:add
|
49
|
-
fiftyfive:user:install_public_key
|
50
|
-
fiftyfive:version:write_initializer
|
51
|
-
)
|
52
|
-
|
53
|
-
tasks.each do |name|
|
54
|
-
task(name) do
|
55
|
-
mb_name = name.gsub(/^fiftyfive:/, "mb:")
|
56
|
-
compatibility_warning("The #{name} task has been renamed to #{mb_name}.")
|
57
|
-
invoke(mb_name)
|
58
|
-
end
|
59
|
-
end
|