brightbox 2.1.2 → 2.2
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.
- data/bin/brightbox +91 -40
- data/brightbox-gemspec.rb +1 -1
- data/lib/brightbox/passenger.rb +21 -0
- data/lib/brightbox/recipes.rb +1 -0
- data/lib/brightbox/recipes/callbacks.rb +2 -6
- data/lib/brightbox/recipes/configure.rb +8 -115
- data/lib/brightbox/recipes/configure/mongrel.rb +139 -0
- data/lib/brightbox/recipes/configure/passenger.rb +57 -0
- data/lib/brightbox/recipes/deploy.rb +8 -55
- data/lib/brightbox/recipes/deploy/mongrel.rb +76 -0
- data/lib/brightbox/recipes/deploy/passenger.rb +55 -0
- data/lib/brightbox/recipes/gems.rb +16 -4
- data/lib/brightbox/recipes/variables.rb +3 -0
- data/lib/brightbox/version.rb +1 -1
- metadata +15 -9
data/bin/brightbox
CHANGED
@@ -55,6 +55,10 @@ opts = OptionParser.new do |opts|
|
|
55
55
|
"Brightbox virtual server",
|
56
56
|
"(e.g: example-001.vm.brightbox.net)\n"
|
57
57
|
) { |value| @server = value }
|
58
|
+
|
59
|
+
opts.on("-a TYPE", "--app TYPE", [:mongrel, :passenger],
|
60
|
+
"App server type, mongrel or passenger"
|
61
|
+
) { |value| @app_server = value }
|
58
62
|
|
59
63
|
begin
|
60
64
|
opts.parse!(ARGV)
|
@@ -78,6 +82,17 @@ def unindent(string)
|
|
78
82
|
string.strip.gsub(/^#{indentation}/, "")
|
79
83
|
end
|
80
84
|
|
85
|
+
def deploy_requires(app_server)
|
86
|
+
header = %Q{gem 'brightbox', '>=#{Brightbox::VERSION}'
|
87
|
+
require 'brightbox/recipes'
|
88
|
+
}
|
89
|
+
case app_server
|
90
|
+
when :passenger
|
91
|
+
header << %Q{require 'brightbox/passenger'}
|
92
|
+
end
|
93
|
+
return header
|
94
|
+
end
|
95
|
+
|
81
96
|
@domain ||= @server
|
82
97
|
@application ||= @server.gsub(/(-\d{3})?\..*\Z/,'')
|
83
98
|
|
@@ -149,36 +164,46 @@ unless Rake::Task.task_defined?("db:check:config")
|
|
149
164
|
pe "database name should start with '\#{config['username']}' if using cluster"
|
150
165
|
end
|
151
166
|
end
|
167
|
+
|
168
|
+
require 'yaml'
|
169
|
+
|
170
|
+
def read_database_yml
|
171
|
+
db_yml = File.join(File.dirname(__FILE__), "..", "..", "config", "database.yml")
|
172
|
+
if File.exist?(db_yml)
|
173
|
+
return YAML.load(File.open(db_yml))
|
174
|
+
else
|
175
|
+
return {}
|
176
|
+
end
|
177
|
+
end
|
152
178
|
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
else
|
165
|
-
pe "using \#{config['adapter']} - halting checks"
|
166
|
-
end
|
179
|
+
namespace(:db) do
|
180
|
+
namespace(:check) do
|
181
|
+
desc "Check database.yml config"
|
182
|
+
task :config do
|
183
|
+
p "Checking database mysql configuration..."
|
184
|
+
if config=read_database_yml[RAILS_ENV]
|
185
|
+
case config['adapter']
|
186
|
+
when nil
|
187
|
+
pe "adapter entry missing."
|
188
|
+
when 'mysql'
|
189
|
+
brightbox_sanity_checks(config)
|
167
190
|
else
|
168
|
-
pe "
|
191
|
+
pe "using \#{config['adapter']} - halting checks"
|
169
192
|
end
|
193
|
+
else
|
194
|
+
pe "section missing."
|
170
195
|
end
|
171
196
|
end
|
172
197
|
end
|
173
|
-
end
|
198
|
+
end
|
199
|
+
end
|
174
200
|
|
175
201
|
|
176
202
|
FILE
|
177
203
|
|
178
204
|
"config/deploy.rb" => unindent(<<-FILE),
|
179
205
|
## Generated with '#{opts.program_name}' on #{Time.now}
|
180
|
-
|
181
|
-
require 'brightbox/recipes'
|
206
|
+
#{deploy_requires(@app_server)}
|
182
207
|
|
183
208
|
# The name of your application. Used for deployment directory and filenames
|
184
209
|
# and Apache configs. Should be unique on the Brightbox
|
@@ -286,6 +311,30 @@ end
|
|
286
311
|
# or be explicit
|
287
312
|
# set :scm, :subversion
|
288
313
|
|
314
|
+
## Deployment settings
|
315
|
+
# The brightbox gem deploys as the user 'rails' by default and
|
316
|
+
# into the 'production' environment. You can change these as required.
|
317
|
+
# set :user, "rails"
|
318
|
+
# set :rails_env, :production
|
319
|
+
|
320
|
+
## Command running settings
|
321
|
+
# use_sudo is switched off by default so that commands are run
|
322
|
+
# directly as 'user' by the run command. If you switch on sudo
|
323
|
+
# make sure you set the :runner variable - which is the user the
|
324
|
+
# capistrano default tasks use to execute commands.
|
325
|
+
# NB. This just affects the default recipes unless you use the
|
326
|
+
# 'try_sudo' command to run your commands.
|
327
|
+
# set :use_sudo, false
|
328
|
+
# set :runner, user
|
329
|
+
|
330
|
+
## Dependencies
|
331
|
+
# Set the commands and gems that your application requires. e.g.
|
332
|
+
# depend :remote, :gem, "will_paginate", ">=2.2.2"
|
333
|
+
# depend :remote, :command, "brightbox"\n\n
|
334
|
+
FILE
|
335
|
+
}
|
336
|
+
|
337
|
+
mongrel_deploy = unindent(<<-FILE
|
289
338
|
## Mongrel settings
|
290
339
|
# Addresses that Mongrel listens on. Defaults to :local
|
291
340
|
# Use :remote if your mongrels are on a different host to the web
|
@@ -307,29 +356,31 @@ end
|
|
307
356
|
# set :mongrel_max_memory, 110
|
308
357
|
# Maximum cpu allowable per mongrel. Defaults to 80%
|
309
358
|
# set :mongrel_max_cpu, 80
|
310
|
-
|
311
|
-
## Deployment settings
|
312
|
-
# The brightbox gem deploys as the user 'rails' by default and
|
313
|
-
# into the 'production' environment. You can change these as required.
|
314
|
-
# set :user, "rails"
|
315
|
-
# set :rails_env, :production
|
316
|
-
|
317
|
-
## Command running settings
|
318
|
-
# use_sudo is switched off by default so that commands are run
|
319
|
-
# directly as 'user' by the run command. If you switch on sudo
|
320
|
-
# make sure you set the :runner variable - which is the user the
|
321
|
-
# capistrano default tasks use to execute commands.
|
322
|
-
# NB. This just affects the default recipes unless you use the
|
323
|
-
# 'try_sudo' command to run your commands.
|
324
|
-
# set :use_sudo, false
|
325
|
-
# set :runner, user
|
326
|
-
|
327
|
-
## Dependencies
|
328
|
-
# Set the commands and gems that your application requires. e.g.
|
329
|
-
# depend :remote, :gem, "will_paginate", ">=2.2.2"
|
330
|
-
# depend :remote, :command, "brightbox"
|
331
359
|
FILE
|
332
|
-
|
360
|
+
)
|
361
|
+
|
362
|
+
passenger_deploy = unindent(<<-FILE
|
363
|
+
## Ruby Enterprise
|
364
|
+
# Use the experimental Brightbox Ruby Enterprise Package for Ubuntu
|
365
|
+
# Don't enable this option unless you're testing this out as it is
|
366
|
+
# currently not recommended for production use
|
367
|
+
# set :use_ree, true
|
368
|
+
|
369
|
+
## Passenger Configuration
|
370
|
+
# Set the method of restarting passenger
|
371
|
+
# Defaults to :hard which is used to instantly free up database connections
|
372
|
+
# :soft uses the standard touch tmp/restart.txt which leaves database connections
|
373
|
+
# lingering until the workers time out
|
374
|
+
# set :passenger_restart_strategy, :hard
|
375
|
+
FILE
|
376
|
+
)
|
377
|
+
|
378
|
+
case @app_server
|
379
|
+
when :passenger
|
380
|
+
files["config/deploy.rb"] << passenger_deploy
|
381
|
+
when :mongrel
|
382
|
+
files["config/deploy.rb"] << mongrel_deploy
|
383
|
+
end
|
333
384
|
|
334
385
|
base = ARGV.shift
|
335
386
|
files.each do |file, content|
|
data/brightbox-gemspec.rb
CHANGED
@@ -20,7 +20,7 @@
|
|
20
20
|
require File.join(File.dirname(__FILE__),"lib/brightbox/version")
|
21
21
|
def add_common(spec)
|
22
22
|
spec.version = Brightbox::VERSION
|
23
|
-
spec.authors = ["John Leach","Neil Wilson"]
|
23
|
+
spec.authors = ["John Leach","Neil Wilson","David Smalley"]
|
24
24
|
spec.email = "support@brightbox.co.uk"
|
25
25
|
spec.homepage = "http://wiki.brightbox.co.uk/docs:thebrightboxgem"
|
26
26
|
spec.rubyforge_project = 'brightbox'
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# Brightbox - Easy Ruby Web Application Deployment
|
2
|
+
# Copyright (C) 2008, David Smalley, Brightbox Systems
|
3
|
+
#
|
4
|
+
# This file is part of the Brightbox deployment system
|
5
|
+
#
|
6
|
+
# Brightbox gem is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License,
|
9
|
+
# or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General
|
17
|
+
# Public License along with this program. If not, see
|
18
|
+
# <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
Capistrano::Configuration.instance(true).load File.join(File.dirname(__FILE__), "recipes", "deploy", "passenger.rb")
|
21
|
+
Capistrano::Configuration.instance(true).load File.join(File.dirname(__FILE__), "recipes", "configure", "passenger.rb")
|
data/lib/brightbox/recipes.rb
CHANGED
@@ -17,6 +17,7 @@
|
|
17
17
|
# Public License along with this program. If not, see
|
18
18
|
# <http://www.gnu.org/licenses/>.
|
19
19
|
#
|
20
|
+
require File.dirname(__FILE__) + '/version'
|
20
21
|
Dir[File.join(File.dirname(__FILE__), 'recipes', '*.rb')].each do |recipe|
|
21
22
|
Capistrano::Configuration.instance(true).load recipe
|
22
23
|
end
|
@@ -19,19 +19,16 @@
|
|
19
19
|
#
|
20
20
|
# Hook tasks into the standard deployment system
|
21
21
|
|
22
|
+
# Some mongrel specific callbacks have been moved to configure/mongrel.rb
|
23
|
+
|
22
24
|
after "deploy:setup",
|
23
25
|
"deploy:shared:global:setup",
|
24
26
|
"deploy:shared:local:setup",
|
25
27
|
"configure:maintenance",
|
26
28
|
"configure:logrotation",
|
27
|
-
"configure:monit",
|
28
|
-
"configure:mongrel",
|
29
29
|
"configure:apache",
|
30
30
|
"configure:nginx"
|
31
31
|
|
32
|
-
after "deploy:cold",
|
33
|
-
"deploy:monit:reload"
|
34
|
-
|
35
32
|
after "deploy:finalize_update",
|
36
33
|
"deploy:shared:global:symlink",
|
37
34
|
"deploy:shared:local:symlink",
|
@@ -40,7 +37,6 @@ after "deploy:finalize_update",
|
|
40
37
|
after "deploy:update",
|
41
38
|
"deploy:cleanup"
|
42
39
|
|
43
|
-
|
44
40
|
after "deploy:start",
|
45
41
|
"deploy:web:reload_if_new"
|
46
42
|
|
@@ -19,145 +19,38 @@
|
|
19
19
|
#
|
20
20
|
|
21
21
|
def monit_setup
|
22
|
-
"railsapp-monit"
|
22
|
+
"railsapp-monit _#{::Version}_"
|
23
23
|
end
|
24
24
|
depend :remote, :command, monit_setup
|
25
25
|
|
26
26
|
def apache_setup
|
27
|
-
"railsapp-apache"
|
27
|
+
"railsapp-apache _#{::Version}_"
|
28
28
|
end
|
29
29
|
depend :remote, :command, apache_setup
|
30
30
|
|
31
31
|
def nginx_setup
|
32
|
-
"railsapp-nginx"
|
32
|
+
"railsapp-nginx _#{::Version}_"
|
33
33
|
end
|
34
34
|
depend :remote, :command, nginx_setup
|
35
35
|
|
36
36
|
def mongrel_setup
|
37
|
-
"railsapp-mongrel"
|
37
|
+
"railsapp-mongrel _#{::Version}_"
|
38
38
|
end
|
39
39
|
depend :remote, :command, mongrel_setup
|
40
40
|
|
41
41
|
def logrotate_setup
|
42
|
-
"railsapp-logrotate"
|
42
|
+
"railsapp-logrotate _#{::Version}_"
|
43
43
|
end
|
44
44
|
depend :remote, :command, logrotate_setup
|
45
45
|
|
46
46
|
def maintenance_setup
|
47
|
-
"railsapp-maintenance"
|
47
|
+
"railsapp-maintenance _#{::Version}_"
|
48
48
|
end
|
49
49
|
depend :remote, :command, maintenance_setup
|
50
50
|
|
51
|
-
|
52
|
-
|
53
|
-
[:nginx, :apache].each do |webserver|
|
54
|
-
desc %Q{
|
55
|
-
[internal]Create #{webserver.to_s} config. Creates a load balancing virtual host \
|
56
|
-
configuration based upon your specified settings
|
57
|
-
|
58
|
-
:application Name of the application
|
59
|
-
:domain Domain name which will point to the application
|
60
|
-
:domain_aliases Comma separated list of aliased for the main domain
|
61
|
-
:mongrel_host Name of application layer host (default localhost)
|
62
|
-
:mongrel_port Start port of the mongrel cluster (default 8000)
|
63
|
-
:mongrel_servers Number of servers on app host (default 2)
|
64
|
-
:ssl_certificate Create SSL configuration with certificate
|
65
|
-
:ssl_key Name of private key to use with certificate
|
66
|
-
|
67
|
-
}
|
68
|
-
task webserver, :roles => :web, :except => {:no_release => true} do
|
69
|
-
app_hosts = case mongrel_host
|
70
|
-
when :local
|
71
|
-
"localhost"
|
72
|
-
when :remote
|
73
|
-
roles[:app].servers.join(",")
|
74
|
-
else
|
75
|
-
mongrel_host
|
76
|
-
end
|
77
|
-
sudo on_one_line( <<-END
|
78
|
-
#{send(webserver.to_s + "_setup")}
|
79
|
-
-n #{application}
|
80
|
-
-d #{domain}
|
81
|
-
#{'-a '+domain_aliases if domain_aliases}
|
82
|
-
-w #{File.join(current_path, 'public')}
|
83
|
-
-h #{app_hosts}
|
84
|
-
-p #{mongrel_port}
|
85
|
-
-s #{mongrel_servers}
|
86
|
-
#{'-m '+max_age if max_age}
|
87
|
-
#{'-c '+ssl_certificate if ssl_certificate}
|
88
|
-
#{'-k '+ssl_key if ssl_key}
|
89
|
-
END
|
90
|
-
)
|
91
|
-
end
|
92
|
-
end
|
51
|
+
Capistrano::Configuration.instance(true).load File.join(File.dirname(__FILE__), 'configure', 'mongrel.rb')
|
93
52
|
|
94
|
-
|
95
|
-
[internal]Create Mongrel config. Creates a set of mongrels running \
|
96
|
-
on the specified ports of the application server(s).
|
97
|
-
|
98
|
-
:application Name of the application
|
99
|
-
:mongrel_host Address for mongrels to listen to (default localhost)
|
100
|
-
:mongrel_port Start port of the mongrel cluster (default 8000)
|
101
|
-
:mongrel_servers Number of servers on app host (default 2)
|
102
|
-
:mongrel_pid_file The name of the file containing the mongrel PID
|
103
|
-
|
104
|
-
}
|
105
|
-
task :mongrel, :roles => :app, :except => {:no_release => true} do
|
106
|
-
listen_address = case mongrel_host
|
107
|
-
when :local
|
108
|
-
"localhost"
|
109
|
-
when :remote
|
110
|
-
"0.0.0.0"
|
111
|
-
else
|
112
|
-
mongrel_host
|
113
|
-
end
|
114
|
-
sudo on_one_line( <<-END
|
115
|
-
#{mongrel_setup}
|
116
|
-
-n #{application}
|
117
|
-
-r #{current_path}
|
118
|
-
-p #{mongrel_port}
|
119
|
-
-s #{mongrel_servers}
|
120
|
-
-h #{listen_address}
|
121
|
-
-C #{mongrel_config_file}
|
122
|
-
-P #{mongrel_pid_file}
|
123
|
-
-e #{rails_env}
|
124
|
-
END
|
125
|
-
)
|
126
|
-
end
|
127
|
-
|
128
|
-
desc %Q{
|
129
|
-
[internal]Create Monit config. Build a monit configuraton file \
|
130
|
-
to look after this application
|
131
|
-
|
132
|
-
:application Name of the application
|
133
|
-
:mongrel_host Name of application layer host (default localhost)
|
134
|
-
:mongrel_port Start port of the mongrel cluster (default 8000)
|
135
|
-
:mongrel_servers Number of servers on app host (default 2)
|
136
|
-
|
137
|
-
}
|
138
|
-
task :monit, :roles => :app, :except => {:no_release => true} do
|
139
|
-
listen_address = case mongrel_host
|
140
|
-
when :local, :remote
|
141
|
-
"localhost"
|
142
|
-
else
|
143
|
-
mongrel_host
|
144
|
-
end
|
145
|
-
sudo on_one_line( <<-END
|
146
|
-
#{monit_setup}
|
147
|
-
-n #{application}
|
148
|
-
-u #{user}
|
149
|
-
-r #{current_path}
|
150
|
-
-h #{listen_address}
|
151
|
-
-p #{mongrel_port}
|
152
|
-
-s #{mongrel_servers}
|
153
|
-
-C #{mongrel_config_file}
|
154
|
-
-P #{mongrel_pid_file}
|
155
|
-
-U #{mongrel_check_url}
|
156
|
-
-m #{mongrel_max_memory}
|
157
|
-
-c #{mongrel_max_cpu}
|
158
|
-
END
|
159
|
-
)
|
160
|
-
end
|
53
|
+
namespace :configure do
|
161
54
|
|
162
55
|
desc %Q{
|
163
56
|
[internal]Create logrotation config. Build a logrotate configuraton file \
|
@@ -0,0 +1,139 @@
|
|
1
|
+
# Brightbox - Easy Ruby Web Application Deployment
|
2
|
+
# Copyright (C) 2008, David Smalley, Brightbox Systems
|
3
|
+
#
|
4
|
+
# This file is part of the Brightbox deployment system
|
5
|
+
#
|
6
|
+
# Brightbox gem is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License,
|
9
|
+
# or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General
|
17
|
+
# Public License along with this program. If not, see
|
18
|
+
# <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
after "deploy:setup",
|
22
|
+
"configure:monit",
|
23
|
+
"configure:mongrel"
|
24
|
+
|
25
|
+
after "deploy:cold",
|
26
|
+
"deploy:monit:reload"
|
27
|
+
|
28
|
+
namespace :configure do
|
29
|
+
|
30
|
+
[:nginx, :apache].each do |webserver|
|
31
|
+
desc %Q{
|
32
|
+
[internal]Create #{webserver.to_s} config. Creates a load balancing virtual host \
|
33
|
+
configuration based upon your specified settings
|
34
|
+
|
35
|
+
:application Name of the application
|
36
|
+
:domain Domain name which will point to the application
|
37
|
+
:domain_aliases Comma separated list of aliased for the main domain
|
38
|
+
:mongrel_host Name of application layer host (default localhost)
|
39
|
+
:mongrel_port Start port of the mongrel cluster (default 8000)
|
40
|
+
:mongrel_servers Number of servers on app host (default 2)
|
41
|
+
:ssl_certificate Create SSL configuration with certificate
|
42
|
+
:ssl_key Name of private key to use with certificate
|
43
|
+
|
44
|
+
}
|
45
|
+
task webserver, :roles => :web, :except => {:no_release => true} do
|
46
|
+
app_hosts = case mongrel_host
|
47
|
+
when :local
|
48
|
+
"localhost"
|
49
|
+
when :remote
|
50
|
+
roles[:app].servers.join(",")
|
51
|
+
else
|
52
|
+
mongrel_host
|
53
|
+
end
|
54
|
+
sudo on_one_line( <<-END
|
55
|
+
#{send(webserver.to_s + "_setup")}
|
56
|
+
-n #{application}
|
57
|
+
-d #{domain}
|
58
|
+
#{'-a '+domain_aliases if domain_aliases}
|
59
|
+
-w #{File.join(current_path, 'public')}
|
60
|
+
-h #{app_hosts}
|
61
|
+
-p #{mongrel_port}
|
62
|
+
-s #{mongrel_servers}
|
63
|
+
#{'-m '+max_age if max_age}
|
64
|
+
#{'-c '+ssl_certificate if ssl_certificate}
|
65
|
+
#{'-k '+ssl_key if ssl_key}
|
66
|
+
END
|
67
|
+
)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
desc %Q{
|
72
|
+
[internal]Create Mongrel config. Creates a set of mongrels running \
|
73
|
+
on the specified ports of the application server(s).
|
74
|
+
|
75
|
+
:application Name of the application
|
76
|
+
:mongrel_host Address for mongrels to listen to (default localhost)
|
77
|
+
:mongrel_port Start port of the mongrel cluster (default 8000)
|
78
|
+
:mongrel_servers Number of servers on app host (default 2)
|
79
|
+
:mongrel_pid_file The name of the file containing the mongrel PID
|
80
|
+
|
81
|
+
}
|
82
|
+
task :mongrel, :roles => :app, :except => {:no_release => true} do
|
83
|
+
listen_address = case mongrel_host
|
84
|
+
when :local
|
85
|
+
"localhost"
|
86
|
+
when :remote
|
87
|
+
"0.0.0.0"
|
88
|
+
else
|
89
|
+
mongrel_host
|
90
|
+
end
|
91
|
+
sudo on_one_line( <<-END
|
92
|
+
#{mongrel_setup}
|
93
|
+
-n #{application}
|
94
|
+
-r #{current_path}
|
95
|
+
-p #{mongrel_port}
|
96
|
+
-s #{mongrel_servers}
|
97
|
+
-h #{listen_address}
|
98
|
+
-C #{mongrel_config_file}
|
99
|
+
-P #{mongrel_pid_file}
|
100
|
+
-e #{rails_env}
|
101
|
+
END
|
102
|
+
)
|
103
|
+
end
|
104
|
+
|
105
|
+
desc %Q{
|
106
|
+
[internal]Create Monit config. Build a monit configuraton file \
|
107
|
+
to look after this application
|
108
|
+
|
109
|
+
:application Name of the application
|
110
|
+
:mongrel_host Name of application layer host (default localhost)
|
111
|
+
:mongrel_port Start port of the mongrel cluster (default 8000)
|
112
|
+
:mongrel_servers Number of servers on app host (default 2)
|
113
|
+
|
114
|
+
}
|
115
|
+
task :monit, :roles => :app, :except => {:no_release => true} do
|
116
|
+
listen_address = case mongrel_host
|
117
|
+
when :local, :remote
|
118
|
+
"localhost"
|
119
|
+
else
|
120
|
+
mongrel_host
|
121
|
+
end
|
122
|
+
sudo on_one_line( <<-END
|
123
|
+
#{monit_setup}
|
124
|
+
-n #{application}
|
125
|
+
-u #{user}
|
126
|
+
-r #{current_path}
|
127
|
+
-h #{listen_address}
|
128
|
+
-p #{mongrel_port}
|
129
|
+
-s #{mongrel_servers}
|
130
|
+
-C #{mongrel_config_file}
|
131
|
+
-P #{mongrel_pid_file}
|
132
|
+
-U #{mongrel_check_url}
|
133
|
+
-m #{mongrel_max_memory}
|
134
|
+
-c #{mongrel_max_cpu}
|
135
|
+
END
|
136
|
+
)
|
137
|
+
end
|
138
|
+
|
139
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
# Brightbox - Easy Ruby Web Application Deployment
|
2
|
+
# Copyright (C) 2008, David Smalley, Brightbox Systems
|
3
|
+
#
|
4
|
+
# This file is part of the Brightbox deployment system
|
5
|
+
#
|
6
|
+
# Brightbox gem is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License,
|
9
|
+
# or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General
|
17
|
+
# Public License along with this program. If not, see
|
18
|
+
# <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
depend :remote, :gem, "rack", ">=0.9.0"
|
21
|
+
|
22
|
+
namespace :configure do
|
23
|
+
|
24
|
+
desc %Q{
|
25
|
+
[internal]Create Apache config. Creates a load balancing virtual host \
|
26
|
+
configuration based upon your specified settings
|
27
|
+
|
28
|
+
:application Name of the application
|
29
|
+
:domain Domain name which will point to the application
|
30
|
+
:domain_aliases Comma separated list of aliased for the main domain
|
31
|
+
:ssl_certificate Create SSL configuration with certificate
|
32
|
+
:ssl_key Name of private key to use with certificate
|
33
|
+
|
34
|
+
}
|
35
|
+
task :apache, :roles => :web, :except => {:no_release => true} do
|
36
|
+
sudo on_one_line( <<-END
|
37
|
+
#{send("apache_setup")}
|
38
|
+
-n #{application}
|
39
|
+
-d #{domain}
|
40
|
+
#{'-a '+domain_aliases if domain_aliases}
|
41
|
+
-w #{File.join(current_path, 'public')}
|
42
|
+
--passenger
|
43
|
+
--railsenv #{rails_env}
|
44
|
+
#{'-m '+max_age if max_age}
|
45
|
+
#{'-c '+ssl_certificate if ssl_certificate}
|
46
|
+
#{'-k '+ssl_key if ssl_key}
|
47
|
+
END
|
48
|
+
)
|
49
|
+
end
|
50
|
+
|
51
|
+
task :mongrel, :roles => :app, :except => {:no_release => true} do
|
52
|
+
end
|
53
|
+
|
54
|
+
task :monit, :roles => :app, :except => {:no_release => true} do
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
@@ -19,49 +19,10 @@
|
|
19
19
|
#
|
20
20
|
# Override standard tasks that don't do what we want
|
21
21
|
|
22
|
-
|
23
|
-
|
24
|
-
def mongrel_command
|
25
|
-
"/usr/bin/mongrel_rails"
|
26
|
-
end
|
27
|
-
depend :remote, :command, mongrel_command
|
28
|
-
|
29
|
-
def monit_command
|
30
|
-
"/usr/sbin/monit"
|
31
|
-
end
|
32
|
-
depend :remote, :command, monit_command
|
33
|
-
|
34
|
-
def mongrel_cluster_command(event)
|
35
|
-
"#{mongrel_command} cluster::#{event} -C #{mongrel_config_file}" <<
|
36
|
-
if event == "status"
|
37
|
-
""
|
38
|
-
else
|
39
|
-
" --clean"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def monitor_cluster_command(event)
|
44
|
-
case event
|
45
|
-
when "start","restart"
|
46
|
-
"#{monit_command} -g #{application} monitor all"
|
47
|
-
when "stop"
|
48
|
-
"#{monit_command} -g #{application} unmonitor all"
|
49
|
-
else
|
50
|
-
nil
|
51
|
-
end
|
52
|
-
end
|
22
|
+
# By default we require mongrel. In future we can just switch the default to passenger
|
23
|
+
Capistrano::Configuration.instance(true).load File.join(File.dirname(__FILE__), 'deploy', 'mongrel.rb')
|
53
24
|
|
54
|
-
|
55
|
-
#application servers
|
56
|
-
%w(start stop restart status).each do |event|
|
57
|
-
desc "Ask mongrel to #{event} your application."
|
58
|
-
task event, :roles => :app, :except => {:no_release => true } do
|
59
|
-
try_sudo mongrel_cluster_command(event)
|
60
|
-
if cmd = monitor_cluster_command(event)
|
61
|
-
sudo cmd
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
25
|
+
namespace :deploy do
|
65
26
|
|
66
27
|
namespace :web do
|
67
28
|
|
@@ -111,21 +72,11 @@ namespace :deploy do
|
|
111
72
|
|
112
73
|
end
|
113
74
|
|
114
|
-
namespace :monit do
|
115
|
-
|
116
|
-
desc %Q{
|
117
|
-
Reload monit
|
118
|
-
}
|
119
|
-
task :reload do
|
120
|
-
sudo "#{monit_command} reload"
|
121
|
-
end
|
122
|
-
|
123
|
-
end
|
124
|
-
|
125
75
|
desc %Q{Setup the directories and deploy the initial version of the
|
126
76
|
application
|
127
77
|
}
|
128
78
|
task :initial do
|
79
|
+
gems.check_server_tools
|
129
80
|
setup
|
130
81
|
cold
|
131
82
|
end
|
@@ -136,7 +87,9 @@ namespace :deploy do
|
|
136
87
|
Execute Rake tasks that need to be run once per system
|
137
88
|
}
|
138
89
|
task :singleton, :roles => :db, :only => {:primary => true} do
|
139
|
-
|
90
|
+
unless disable_db_check
|
91
|
+
run rake_task("db:check:config")
|
92
|
+
end
|
140
93
|
run rake_task("db:create")
|
141
94
|
end
|
142
95
|
|
@@ -151,8 +104,8 @@ namespace :deploy do
|
|
151
104
|
Execute Rake tasks
|
152
105
|
}
|
153
106
|
task :default do
|
154
|
-
singleton
|
155
107
|
global
|
108
|
+
singleton
|
156
109
|
end
|
157
110
|
end
|
158
111
|
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# Brightbox - Easy Ruby Web Application Deployment
|
2
|
+
# Copyright (C) 2008, David Smalley, Brightbox Systems
|
3
|
+
#
|
4
|
+
# This file is part of the Brightbox deployment system
|
5
|
+
#
|
6
|
+
# Brightbox gem is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License,
|
9
|
+
# or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General
|
17
|
+
# Public License along with this program. If not, see
|
18
|
+
# <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
namespace :deploy do
|
22
|
+
|
23
|
+
def mongrel_command
|
24
|
+
"/usr/bin/mongrel_rails"
|
25
|
+
end
|
26
|
+
depend :remote, :command, mongrel_command
|
27
|
+
|
28
|
+
def monit_command
|
29
|
+
"/usr/sbin/monit"
|
30
|
+
end
|
31
|
+
depend :remote, :command, monit_command
|
32
|
+
|
33
|
+
def mongrel_cluster_command(event)
|
34
|
+
"#{mongrel_command} cluster::#{event} -C #{mongrel_config_file}" <<
|
35
|
+
if event == "status"
|
36
|
+
""
|
37
|
+
else
|
38
|
+
" --clean"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def monitor_cluster_command(event)
|
43
|
+
case event
|
44
|
+
when "start","restart"
|
45
|
+
"#{monit_command} -g #{application} monitor all"
|
46
|
+
when "stop"
|
47
|
+
"#{monit_command} -g #{application} unmonitor all"
|
48
|
+
else
|
49
|
+
nil
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
#Override start, stop and restart so that they use mongrel to restart the
|
54
|
+
#application servers
|
55
|
+
%w(start stop restart status).each do |event|
|
56
|
+
desc "Ask mongrel to #{event} your application."
|
57
|
+
task event, :roles => :app, :except => {:no_release => true } do
|
58
|
+
try_sudo mongrel_cluster_command(event)
|
59
|
+
if cmd = monitor_cluster_command(event)
|
60
|
+
sudo cmd
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
namespace :monit do
|
66
|
+
|
67
|
+
desc %Q{
|
68
|
+
Reload monit
|
69
|
+
}
|
70
|
+
task :reload do
|
71
|
+
sudo "#{monit_command} reload"
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# Brightbox - Easy Ruby Web Application Deployment
|
2
|
+
# Copyright (C) 2008, David Smalley, Brightbox Systems
|
3
|
+
#
|
4
|
+
# This file is part of the Brightbox deployment system
|
5
|
+
#
|
6
|
+
# Brightbox gem is free software: you can redistribute it and/or modify it
|
7
|
+
# under the terms of the GNU Affero General Public License as published
|
8
|
+
# by the Free Software Foundation, either version 3 of the License,
|
9
|
+
# or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This program is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Affero General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Affero General
|
17
|
+
# Public License along with this program. If not, see
|
18
|
+
# <http://www.gnu.org/licenses/>.
|
19
|
+
#
|
20
|
+
|
21
|
+
namespace :deploy do
|
22
|
+
|
23
|
+
#Override start and stop, they are useless for passenger
|
24
|
+
%w(start stop status).each do |event|
|
25
|
+
desc "Dummy command to #{event} your application, not used by Passenger."
|
26
|
+
task event, :roles => :app, :except => {:no_release => true } do
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
desc "Restart your application using passenger."
|
31
|
+
task :restart, :roles => :app, :except => {:no_release => true} do
|
32
|
+
case passenger_restart_strategy
|
33
|
+
when :hard
|
34
|
+
deploy.passenger.hard_restart
|
35
|
+
when :soft
|
36
|
+
deploy.passenger.soft_restart
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
namespace :passenger do
|
41
|
+
|
42
|
+
desc "Hard restart your passenger instances by killing the dispatcher"
|
43
|
+
task :hard_restart, :roles => :app, :except => {:no_release => true} do
|
44
|
+
soft_restart
|
45
|
+
sudo "kill \$( passenger-memory-stats | grep 'Passenger spawn server' | awk '{ print \$1 }' )"
|
46
|
+
end
|
47
|
+
|
48
|
+
desc "Soft restart you passenger instances by issuing touch tmp/restart.txt"
|
49
|
+
task :soft_restart, :roles => :app, :except => {:no_release => true} do
|
50
|
+
run "touch #{current_path}/tmp/restart.txt"
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end
|
@@ -19,6 +19,20 @@
|
|
19
19
|
#
|
20
20
|
|
21
21
|
namespace :gems do
|
22
|
+
|
23
|
+
desc "[internal]Install the matching brightbox-server-tools gem for this client gem version"
|
24
|
+
task :check_server_tools, :except => {:no_release => true} do
|
25
|
+
puts "Checking for brightbox-server-tools at #{::Version}"
|
26
|
+
install_gem("brightbox-server-tools", ::Version)
|
27
|
+
end
|
28
|
+
|
29
|
+
def install_gem(gem, version)
|
30
|
+
sudo %Q{sh -c "
|
31
|
+
gem spec #{gem} --version '#{version}' 2>/dev/null|egrep -q '^name:' ||
|
32
|
+
sudo gem install --no-ri --no-rdoc --version '#{version}' #{gem}"
|
33
|
+
}
|
34
|
+
end
|
35
|
+
|
22
36
|
|
23
37
|
def gem_dependencies?
|
24
38
|
(fetch(:dependencies,{})[:remote]||{})[:gem]
|
@@ -30,10 +44,7 @@ namespace :gems do
|
|
30
44
|
gem = gemspec[0]
|
31
45
|
version = gemspec[1]
|
32
46
|
puts "Checking for #{gem} at #{version}"
|
33
|
-
|
34
|
-
gem spec #{gem} --version '#{version}' 2>/dev/null|egrep -q '^name:' ||
|
35
|
-
sudo gem install -y --no-ri --no-rdoc --version '#{version}' #{gem}"
|
36
|
-
}
|
47
|
+
install_gem(gem, version)
|
37
48
|
end
|
38
49
|
end
|
39
50
|
|
@@ -43,6 +54,7 @@ namespace :gems do
|
|
43
54
|
task :install, :except => {:no_release => true} do
|
44
55
|
if gem_dependencies?
|
45
56
|
install_gems
|
57
|
+
sudo rake_task("gems:install")
|
46
58
|
else
|
47
59
|
sudo rake_task("gems:install")
|
48
60
|
end
|
@@ -39,6 +39,9 @@ _cset :domain_aliases, nil
|
|
39
39
|
_cset :max_age, nil
|
40
40
|
_cset :user, "rails"
|
41
41
|
_cset :runner, user
|
42
|
+
_cset :disable_db_check, false
|
43
|
+
_cset :use_ree, false
|
44
|
+
_cset :passenger_restart_strategy, :hard
|
42
45
|
_cset :use_sudo, false
|
43
46
|
_cset :ssl_certificate, nil
|
44
47
|
_cset :ssl_key, nil
|
data/lib/brightbox/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: brightbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: "2.2"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Leach
|
8
8
|
- Neil Wilson
|
9
|
+
- David Smalley
|
9
10
|
autorequire:
|
10
11
|
bindir: bin
|
11
12
|
cert_chain: []
|
12
13
|
|
13
|
-
date:
|
14
|
+
date: 2009-01-09 00:00:00 +00:00
|
14
15
|
default_executable:
|
15
16
|
dependencies:
|
16
17
|
- !ruby/object:Gem::Dependency
|
@@ -35,17 +36,22 @@ files:
|
|
35
36
|
- LICENSE
|
36
37
|
- Rakefile
|
37
38
|
- brightbox-gemspec.rb
|
39
|
+
- lib/brightbox/maintenance.rb
|
40
|
+
- lib/brightbox/passenger.rb
|
41
|
+
- lib/brightbox/recipes/callbacks.rb
|
42
|
+
- lib/brightbox/recipes/configure/mongrel.rb
|
43
|
+
- lib/brightbox/recipes/configure/passenger.rb
|
38
44
|
- lib/brightbox/recipes/configure.rb
|
39
|
-
- lib/brightbox/recipes/
|
45
|
+
- lib/brightbox/recipes/database.rb
|
46
|
+
- lib/brightbox/recipes/deploy/mongrel.rb
|
47
|
+
- lib/brightbox/recipes/deploy/passenger.rb
|
48
|
+
- lib/brightbox/recipes/deploy.rb
|
40
49
|
- lib/brightbox/recipes/gems.rb
|
41
50
|
- lib/brightbox/recipes/helpers.rb
|
42
51
|
- lib/brightbox/recipes/shared_assets.rb
|
43
|
-
- lib/brightbox/recipes/
|
44
|
-
- lib/brightbox/recipes/database.rb
|
45
|
-
- lib/brightbox/recipes/deploy.rb
|
46
|
-
- lib/brightbox/version.rb
|
52
|
+
- lib/brightbox/recipes/variables.rb
|
47
53
|
- lib/brightbox/recipes.rb
|
48
|
-
- lib/brightbox/
|
54
|
+
- lib/brightbox/version.rb
|
49
55
|
- bin/brightbox
|
50
56
|
has_rdoc: false
|
51
57
|
homepage: http://wiki.brightbox.co.uk/docs:thebrightboxgem
|
@@ -69,7 +75,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
69
75
|
requirements: []
|
70
76
|
|
71
77
|
rubyforge_project: brightbox
|
72
|
-
rubygems_version: 1.
|
78
|
+
rubygems_version: 1.3.1
|
73
79
|
signing_key:
|
74
80
|
specification_version: 2
|
75
81
|
summary: Brightbox rails deployment scripts for Capistrano
|