capistrano-mb 0.32.0 → 0.33.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 +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
|
+
[](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
|