isaac-deprec 1.99.30 → 1.99.32
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/README +24 -2
- data/THANKS +12 -0
- data/bin/depify +12 -6
- data/lib/deprec/capistrano_extensions.rb +7 -0
- data/lib/deprec/recipes.rb +7 -2
- data/lib/deprec/recipes/apache.rb +19 -96
- data/lib/deprec/recipes/deprec.rb +32 -29
- data/lib/deprec/recipes/git.rb +3 -3
- data/lib/deprec/recipes/mongrel.rb +6 -35
- data/lib/deprec/recipes/mysql.rb +30 -1
- data/lib/deprec/recipes/network.rb +1 -1
- data/lib/deprec/recipes/nginx.rb +55 -12
- data/lib/deprec/recipes/passenger.rb +147 -27
- data/lib/deprec/recipes/rails.rb +98 -77
- data/lib/deprec/recipes/ree.rb +11 -10
- data/lib/deprec/recipes/ruby.rb +5 -14
- data/lib/deprec/recipes/utils.rb +21 -2
- data/lib/deprec/recipes/wordpress.rb +2 -5
- data/lib/deprec/recipes/xen.rb +38 -40
- data/lib/deprec/templates/apache/index.html.erb +0 -7
- data/lib/deprec/templates/mongrel/mongrel_cluster.yml.erb +3 -3
- data/lib/deprec/templates/passenger/apache_vhost.erb +21 -10
- data/lib/deprec/templates/ssh/ssh_config.erb +1 -1
- data/lib/deprec/templates/xen/xend-config.sxp.erb +1 -1
- metadata +2 -2
- data/lib/deprec/templates/passenger/passenger.erb +0 -20
- data/lib/deprec/templates/xen/15-disable-hwclock +0 -40
- data/lib/deprec/templates/xen/40-setup-networking +0 -145
- data/lib/deprec/templates/xen/xen-tools.conf.erb +0 -220
- data/lib/deprec/templates/xen/xm.tmpl.erb +0 -85
data/lib/deprec/recipes/mysql.rb
CHANGED
@@ -3,17 +3,21 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
3
3
|
namespace :deprec do
|
4
4
|
namespace :mysql do
|
5
5
|
|
6
|
+
set :mysql_admin_user, 'root'
|
7
|
+
set(:mysql_admin_pass) { Capistrano::CLI.password_prompt "Enter database password for '#{mysql_admin_user}':"}
|
8
|
+
|
6
9
|
# Installation
|
7
10
|
|
8
11
|
desc "Install mysql"
|
9
12
|
task :install, :roles => :db do
|
10
13
|
install_deps
|
14
|
+
start
|
11
15
|
# symlink_mysql_sockfile # XXX still needed?
|
12
16
|
end
|
13
17
|
|
14
18
|
# Install dependencies for Mysql
|
15
19
|
task :install_deps, :roles => :db do
|
16
|
-
apt.install( {:base => %w(mysql-server mysql-client)}, :stable )
|
20
|
+
apt.install( {:base => %w(mysql-server mysql-client libmysqlclient15-dev)}, :stable )
|
17
21
|
end
|
18
22
|
|
19
23
|
# task :symlink_mysql_sockfile, :roles => :db do
|
@@ -81,6 +85,31 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
81
85
|
|
82
86
|
task :restore, :roles => :db do
|
83
87
|
end
|
88
|
+
|
89
|
+
desc "Create a mysql user"
|
90
|
+
task :create_user, :roles => :db do
|
91
|
+
# TBA
|
92
|
+
end
|
93
|
+
|
94
|
+
desc "Create a database"
|
95
|
+
task :create_database, :roles => :db do
|
96
|
+
cmd = "CREATE DATABASE IF NOT EXISTS #{db_name}"
|
97
|
+
run "mysql -u #{mysql_admin_user} -p -e '#{cmd}'" do |channel, stream, data|
|
98
|
+
if data =~ /^Enter password:/
|
99
|
+
channel.send_data "#{mysql_admin_pass}\n"
|
100
|
+
end
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
desc "Grant user access to database"
|
105
|
+
task :grant_user_access_to_database, :roles => :db do
|
106
|
+
cmd = "GRANT ALL PRIVILEGES ON #{db_name}.* TO '#{db_user}'@localhost IDENTIFIED BY '#{db_password}';"
|
107
|
+
run "mysql -u #{mysql_admin_user} -p #{db_name} -e \"#{cmd}\"" do |channel, stream, data|
|
108
|
+
if data =~ /^Enter password:/
|
109
|
+
channel.send_data "#{mysql_admin_pass}\n"
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
84
113
|
|
85
114
|
end
|
86
115
|
end
|
@@ -29,7 +29,7 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
29
29
|
result
|
30
30
|
}
|
31
31
|
set(:network_hostname) {
|
32
|
-
Capistrano::CLI.ui.ask "hostname" do |q|
|
32
|
+
Capistrano::CLI.ui.ask "Enter the hostname for the server" do |q|
|
33
33
|
# q.validate = /add hostname validation here/
|
34
34
|
end
|
35
35
|
}
|
data/lib/deprec/recipes/nginx.rb
CHANGED
@@ -22,11 +22,9 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
22
22
|
deprec2.download_src(SRC_PACKAGES[:nginx], src_dir)
|
23
23
|
deprec2.install_from_src(SRC_PACKAGES[:nginx], src_dir)
|
24
24
|
create_nginx_user
|
25
|
-
|
26
|
-
SYSTEM_CONFIG_FILES[:nginx].each do |file|
|
27
|
-
deprec2.render_template(:nginx, file.merge(:remote => true))
|
28
|
-
end
|
25
|
+
initial_config
|
29
26
|
activate
|
27
|
+
start
|
30
28
|
end
|
31
29
|
|
32
30
|
# install dependencies for nginx
|
@@ -62,7 +60,26 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
62
60
|
:mode => 0644,
|
63
61
|
:owner => 'root:root'}
|
64
62
|
]
|
63
|
+
|
64
|
+
PROJECT_CONFIG_FILES[:nginx] = [
|
65
|
+
|
66
|
+
{:template => 'rails_nginx_vhost.conf.erb',
|
67
|
+
:path => "rails_nginx_vhost.conf",
|
68
|
+
:mode => 0644,
|
69
|
+
:owner => 'root:root'},
|
70
|
+
|
71
|
+
{:template => 'logrotate.conf.erb',
|
72
|
+
:path => "logrotate.conf",
|
73
|
+
:mode => 0644,
|
74
|
+
:owner => 'root:root'}
|
75
|
+
]
|
65
76
|
|
77
|
+
task :initial_config do
|
78
|
+
SYSTEM_CONFIG_FILES[:nginx].each do |file|
|
79
|
+
deprec2.render_template(:nginx, file.merge(:remote => true))
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
66
83
|
desc <<-DESC
|
67
84
|
Generate nginx config from template. Note that this does not
|
68
85
|
push the config to the server, it merely generates required
|
@@ -74,11 +91,33 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
74
91
|
deprec2.render_template(:nginx, file)
|
75
92
|
end
|
76
93
|
end
|
94
|
+
|
95
|
+
desc "Generate config files for rails app."
|
96
|
+
task :config_gen_project do
|
97
|
+
PROJECT_CONFIG_FILES[:nginx].each do |file|
|
98
|
+
deprec2.render_template(:nginx, file)
|
99
|
+
end
|
100
|
+
end
|
77
101
|
|
78
102
|
desc "Push nginx config files to server"
|
79
103
|
task :config, :roles => :web do
|
80
104
|
deprec2.push_configs(:nginx, SYSTEM_CONFIG_FILES[:nginx])
|
81
105
|
end
|
106
|
+
|
107
|
+
desc "Push out config files for rails app."
|
108
|
+
task :config_project, :roles => :web do
|
109
|
+
deprec2.push_configs(:nginx, PROJECT_CONFIG_FILES[:nginx])
|
110
|
+
symlink_nginx_vhost
|
111
|
+
symlink_nginx_logrotate_config
|
112
|
+
end
|
113
|
+
|
114
|
+
task :symlink_nginx_vhost, :roles => :web do
|
115
|
+
sudo "ln -sf #{deploy_to}/nginx/rails_nginx_vhost.conf #{nginx_vhost_dir}/#{application}.conf"
|
116
|
+
end
|
117
|
+
|
118
|
+
task :symlink_nginx_logrotate_config, :roles => :web do
|
119
|
+
sudo "ln -sf #{deploy_to}/nginx/logrotate.conf /etc/logrotate.d/nginx-#{application}"
|
120
|
+
end
|
82
121
|
|
83
122
|
desc <<-DESC
|
84
123
|
Activate nginx start scripts on server.
|
@@ -104,25 +143,29 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
104
143
|
|
105
144
|
desc "Start Nginx"
|
106
145
|
task :start, :roles => :web do
|
107
|
-
|
146
|
+
# Nginx returns error code if you try to start it when it's already running
|
147
|
+
# We don't want this to kill Capistrano.
|
148
|
+
send(run_method, "/etc/init.d/nginx start; exit 0")
|
108
149
|
end
|
109
150
|
|
110
151
|
desc "Stop Nginx"
|
111
152
|
task :stop, :roles => :web do
|
112
|
-
|
153
|
+
# Nginx returns error code if you try to stop when it's not running
|
154
|
+
# We don't want this to kill Capistrano.
|
155
|
+
send(run_method, "/etc/init.d/nginx stop; exit 0")
|
113
156
|
end
|
114
157
|
|
115
158
|
desc "Restart Nginx"
|
116
159
|
task :restart, :roles => :web do
|
117
|
-
|
118
|
-
|
119
|
-
send(run_method, "/etc/init.d/nginx stop; exit 0")
|
120
|
-
send(run_method, "/etc/init.d/nginx start")
|
160
|
+
stop
|
161
|
+
start
|
121
162
|
end
|
122
163
|
|
123
164
|
desc "Reload Nginx"
|
124
165
|
task :reload, :roles => :web do
|
125
|
-
|
166
|
+
# Nginx returns error code if you try to reload when it's not running
|
167
|
+
# We don't want this to kill Capistrano.
|
168
|
+
send(run_method, "/etc/init.d/nginx reload; exit 0")
|
126
169
|
end
|
127
170
|
|
128
171
|
task :backup, :roles => :web do
|
@@ -141,4 +184,4 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
141
184
|
|
142
185
|
end
|
143
186
|
end
|
144
|
-
end
|
187
|
+
end
|
@@ -2,13 +2,18 @@
|
|
2
2
|
Capistrano::Configuration.instance(:must_exist).load do
|
3
3
|
namespace :deprec do
|
4
4
|
namespace :passenger do
|
5
|
+
|
6
|
+
set(:passenger_install_dir) {
|
7
|
+
if passenger_use_ree
|
8
|
+
"#{ree_install_dir}/lib/ruby/gems/1.8/gems/passenger-2.0.6"
|
9
|
+
else
|
10
|
+
'/opt/passenger'
|
11
|
+
end
|
12
|
+
}
|
5
13
|
|
6
|
-
set :passenger_version, "passenger-2.1.0"
|
7
|
-
set :passenger_filename, "#{passenger_version}.tar.gz"
|
8
|
-
set :passenger_install_dir, "/opt/#{passenger_version}"
|
9
14
|
set(:passenger_document_root) { "#{current_path}/public" }
|
10
15
|
set :passenger_rails_allow_mod_rewrite, 'off'
|
11
|
-
set :passenger_vhost_dir, '/etc/apache2/sites-
|
16
|
+
set :passenger_vhost_dir, '/etc/apache2/sites-available'
|
12
17
|
# Default settings for Passenger config files
|
13
18
|
set :passenger_log_level, 0
|
14
19
|
set :passenger_user_switching, 'on'
|
@@ -20,18 +25,65 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
20
25
|
set :passenger_rails_spawn_method, 'smart' # smart | conservative
|
21
26
|
|
22
27
|
SRC_PACKAGES[:passenger] = {
|
23
|
-
:
|
24
|
-
:
|
25
|
-
:
|
28
|
+
:url => "git://github.com/FooBarWidget/passenger.git",
|
29
|
+
:download_method => :git,
|
30
|
+
:version => 'release-2.0.6', # Specify a tagged release to deploy
|
26
31
|
:configure => '',
|
27
32
|
:make => '',
|
28
|
-
:install => './bin/passenger-install-apache2-module
|
33
|
+
:install => './bin/passenger-install-apache2-module'
|
29
34
|
}
|
35
|
+
|
36
|
+
desc "Install passenger"
|
37
|
+
task :install, :roles => :app do
|
38
|
+
install_deps
|
39
|
+
deprec2.download_src(SRC_PACKAGES[:passenger], src_dir)
|
40
|
+
|
41
|
+
if passenger_use_ree
|
42
|
+
# Install the Passenger that came with Ruby Enterprise Edition
|
43
|
+
run "yes | #{sudo} env PATH=#{ree_install_dir}/bin:$PATH #{ree_install_dir}/bin/passenger-install-apache2-module"
|
44
|
+
else
|
45
|
+
# Non standard - passenger requires input
|
46
|
+
package_dir = File.join(src_dir, 'passenger.git')
|
47
|
+
dest_dir = passenger_install_dir + '-' + (SRC_PACKAGES[:passenger][:version] || 'trunk')
|
48
|
+
run "#{sudo} rsync -avz #{package_dir}/ #{dest_dir}"
|
49
|
+
run "cd #{dest_dir} && yes '' | #{sudo} ./bin/passenger-install-apache2-module"
|
50
|
+
run "#{sudo} unlink #{passenger_install_dir} 2>/dev/null; #{sudo} ln -sf #{dest_dir} #{passenger_install_dir}"
|
51
|
+
end
|
52
|
+
|
53
|
+
initial_config_push
|
54
|
+
|
55
|
+
end
|
56
|
+
|
57
|
+
task :initial_config_push, :roles => :web do
|
58
|
+
# XXX Non-standard!
|
59
|
+
# We need to push out the .load and .conf files for Passenger
|
60
|
+
SYSTEM_CONFIG_FILES[:passenger].each do |file|
|
61
|
+
deprec2.render_template(:passenger, file.merge(:remote => true))
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Install dependencies for Passenger
|
66
|
+
task :install_deps, :roles => :app do
|
67
|
+
apt.install( {:base => %w(apache2-mpm-prefork apache2-prefork-dev rsync)}, :stable )
|
68
|
+
gem2.install 'fastthread'
|
69
|
+
gem2.install 'rack'
|
70
|
+
gem2.install 'rake'
|
71
|
+
# These are more Rails than Passenger - Mike
|
72
|
+
# gem2.install 'rails'
|
73
|
+
# gem2.install "mysql -- --with-mysql-config='/usr/bin/mysql_config'"
|
74
|
+
# gem2.install 'sqlite3-ruby'
|
75
|
+
# gem2.install 'postgres'
|
76
|
+
end
|
30
77
|
|
31
78
|
SYSTEM_CONFIG_FILES[:passenger] = [
|
32
79
|
|
33
|
-
{:template => 'passenger.erb',
|
34
|
-
:path => '/etc/apache2/
|
80
|
+
{:template => 'passenger.load.erb',
|
81
|
+
:path => '/etc/apache2/mods-available/passenger.load',
|
82
|
+
:mode => 0755,
|
83
|
+
:owner => 'root:root'},
|
84
|
+
|
85
|
+
{:template => 'passenger.conf.erb',
|
86
|
+
:path => '/etc/apache2/mods-available/passenger.conf',
|
35
87
|
:mode => 0755,
|
36
88
|
:owner => 'root:root'}
|
37
89
|
|
@@ -40,23 +92,11 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
40
92
|
PROJECT_CONFIG_FILES[:passenger] = [
|
41
93
|
|
42
94
|
{ :template => 'apache_vhost.erb',
|
43
|
-
:path =>
|
95
|
+
:path => "apache_vhost",
|
44
96
|
:mode => 0755,
|
45
97
|
:owner => 'root:root'}
|
46
98
|
|
47
99
|
]
|
48
|
-
|
49
|
-
desc "Install passenger"
|
50
|
-
task :install, :roles => :passenger do
|
51
|
-
install_deps
|
52
|
-
deprec2.download_src(SRC_PACKAGES[:passenger], passenger_install_dir)
|
53
|
-
deprec2.install_from_src(SRC_PACKAGES[:passenger], passenger_install_dir)
|
54
|
-
end
|
55
|
-
|
56
|
-
# install dependencies for nginx
|
57
|
-
task :install_deps, :roles => :passenger do
|
58
|
-
apt.install( {:base => %w(apache2-mpm-prefork apache2-prefork-dev rsync)}, :stable )
|
59
|
-
end
|
60
100
|
|
61
101
|
desc "Generate Passenger apache configs (system & project level)."
|
62
102
|
task :config_gen do
|
@@ -79,26 +119,69 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
79
119
|
end
|
80
120
|
|
81
121
|
desc "Push Passenger config files (system & project level) to server"
|
82
|
-
task :config, :roles => :
|
122
|
+
task :config, :roles => :app do
|
83
123
|
config_system
|
84
124
|
config_project
|
85
125
|
end
|
86
126
|
|
87
127
|
desc "Push Passenger configs (system level) to server"
|
88
|
-
task :config_system, :roles => :
|
128
|
+
task :config_system, :roles => :app do
|
89
129
|
deprec2.push_configs(:passenger, SYSTEM_CONFIG_FILES[:passenger])
|
130
|
+
activate_system
|
90
131
|
end
|
91
132
|
|
92
133
|
desc "Push Passenger configs (project level) to server"
|
93
|
-
task :config_project, :roles => :
|
134
|
+
task :config_project, :roles => :app do
|
94
135
|
deprec2.push_configs(:passenger, PROJECT_CONFIG_FILES[:passenger])
|
95
136
|
symlink_passenger_vhost
|
137
|
+
activate_project
|
96
138
|
end
|
97
139
|
|
98
|
-
task :symlink_passenger_vhost, :roles => :
|
140
|
+
task :symlink_passenger_vhost, :roles => :app do
|
99
141
|
sudo "ln -sf #{deploy_to}/passenger/apache_vhost #{passenger_vhost_dir}/#{application}"
|
100
142
|
end
|
101
143
|
|
144
|
+
task :activate, :roles => :app do
|
145
|
+
activate_system
|
146
|
+
activate_project
|
147
|
+
end
|
148
|
+
|
149
|
+
task :activate_system, :roles => :app do
|
150
|
+
sudo "a2enmod passenger"
|
151
|
+
top.deprec.web.reload
|
152
|
+
end
|
153
|
+
|
154
|
+
task :activate_project, :roles => :app do
|
155
|
+
sudo "a2ensite #{application}"
|
156
|
+
top.deprec.web.reload
|
157
|
+
end
|
158
|
+
|
159
|
+
task :deactivate do
|
160
|
+
puts
|
161
|
+
puts "******************************************************************"
|
162
|
+
puts
|
163
|
+
puts "Danger!"
|
164
|
+
puts
|
165
|
+
puts "Do you want to deactivate just this project or all Passenger"
|
166
|
+
puts "projects on this server? Try a more granular command:"
|
167
|
+
puts
|
168
|
+
puts "cap deprec:passenger:deactivate_system # disable Passenger"
|
169
|
+
puts "cap deprec:passenger:deactivate_project # disable only this project"
|
170
|
+
puts
|
171
|
+
puts "******************************************************************"
|
172
|
+
puts
|
173
|
+
end
|
174
|
+
|
175
|
+
task :deactivate_system, :roles => :app do
|
176
|
+
sudo "a2dismod passenger"
|
177
|
+
top.deprec.web.reload
|
178
|
+
end
|
179
|
+
|
180
|
+
task :deactivate_project, :roles => :app do
|
181
|
+
sudo "a2dissite #{application}"
|
182
|
+
top.deprec.web.reload
|
183
|
+
end
|
184
|
+
|
102
185
|
desc "Restart Application"
|
103
186
|
task :restart, :roles => :app do
|
104
187
|
run "touch #{current_path}/tmp/restart.txt"
|
@@ -110,5 +193,42 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
110
193
|
end
|
111
194
|
|
112
195
|
end
|
196
|
+
|
197
|
+
namespace :ree do
|
198
|
+
|
199
|
+
set :ree_version, 'ruby-enterprise-1.8.6-20090113'
|
200
|
+
set :ree_install_dir, "/opt/#{ree_version}"
|
201
|
+
set :ree_short_path, '/opt/ruby-enterprise'
|
202
|
+
|
203
|
+
SRC_PACKAGES[:ree] = {
|
204
|
+
:md5sum => "e8d796a5bae0ec1029a88ba95c5d901d #{ree_version}.tar.gz",
|
205
|
+
:url => "http://rubyforge.org/frs/download.php/50087/#{ree_version}.tar.gz",
|
206
|
+
:configure => '',
|
207
|
+
:make => '',
|
208
|
+
:install => "./installer --auto /opt/#{ree_version}"
|
209
|
+
}
|
210
|
+
|
211
|
+
task :install do
|
212
|
+
install_deps
|
213
|
+
deprec2.download_src(SRC_PACKAGES[:ree], src_dir)
|
214
|
+
deprec2.install_from_src(SRC_PACKAGES[:ree], src_dir)
|
215
|
+
symlink_ree
|
216
|
+
end
|
217
|
+
|
218
|
+
task :install_deps do
|
219
|
+
apt.install({:base => %w(libssl-dev libmysqlclient15-dev libreadline5-dev)}, :stable)
|
220
|
+
end
|
221
|
+
|
222
|
+
task :symlink_ree do
|
223
|
+
sudo "ln -sf /opt/#{ree_version} #{ree_short_path}"
|
224
|
+
sudo "ln -fs #{ree_short_path}/bin/gem /usr/local/bin/gem"
|
225
|
+
sudo "ln -fs #{ree_short_path}/bin/irb /usr/local/bin/irb"
|
226
|
+
sudo "ln -fs #{ree_short_path}/bin/rake /usr/local/bin/rake"
|
227
|
+
sudo "ln -fs #{ree_short_path}/bin/rails /usr/local/bin/rails"
|
228
|
+
sudo "ln -fs #{ree_short_path}/bin/ruby /usr/local/bin/ruby"
|
229
|
+
end
|
230
|
+
|
231
|
+
end
|
232
|
+
|
113
233
|
end
|
114
234
|
end
|
data/lib/deprec/recipes/rails.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
# Copyright 2006-2008 by Mike Bailey. All rights reserved.
|
2
2
|
Capistrano::Configuration.instance(:must_exist).load do
|
3
3
|
|
4
|
+
set :app_user_prefix, 'app_'
|
5
|
+
set(:app_user) { app_user_prefix + application }
|
6
|
+
set :app_group_prefix, 'app_'
|
7
|
+
set(:app_group) { app_group_prefix + application }
|
4
8
|
set :database_yml_in_scm, true
|
5
9
|
set :app_symlinks, nil
|
6
10
|
set :rails_env, 'production'
|
@@ -11,21 +15,27 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
11
15
|
# Hook into the default capistrano deploy tasks
|
12
16
|
before 'deploy:setup', :except => { :no_release => true } do
|
13
17
|
top.deprec.rails.setup_user_perms
|
18
|
+
top.deprec.rails.create_app_user_and_group
|
14
19
|
top.deprec.rails.setup_paths
|
15
20
|
top.deprec.rails.setup_shared_dirs
|
16
21
|
top.deprec.rails.install_gems_for_project
|
17
22
|
end
|
18
23
|
|
19
24
|
after 'deploy:setup', :except => { :no_release => true } do
|
20
|
-
top.deprec.rails.setup_servers
|
21
25
|
top.deprec.rails.create_config_dir
|
26
|
+
top.deprec.rails.config_gen
|
27
|
+
top.deprec.rails.config
|
28
|
+
top.deprec.rails.activate_services
|
22
29
|
top.deprec.rails.set_perms_on_shared_and_releases
|
30
|
+
top.deprec.web.reload
|
31
|
+
top.deprec.rails.setup_database
|
23
32
|
end
|
24
33
|
|
25
34
|
after 'deploy:symlink', :roles => :app do
|
26
35
|
top.deprec.rails.symlink_shared_dirs
|
27
36
|
top.deprec.rails.symlink_database_yml unless database_yml_in_scm
|
28
|
-
top.deprec.
|
37
|
+
top.deprec.rails.make_writable_by_app
|
38
|
+
set_owner_of_environment_rb if web_server_type.to_s == 'passenger'
|
29
39
|
end
|
30
40
|
|
31
41
|
after :deploy, :roles => :app do
|
@@ -35,20 +45,31 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
35
45
|
namespace :deprec do
|
36
46
|
namespace :rails do
|
37
47
|
|
48
|
+
task :setup_database, :roles => :db do
|
49
|
+
if ! roles[:db].servers.empty? # Some apps don't use database!
|
50
|
+
deprec2.read_database_yml
|
51
|
+
top.deprec.db.create_user
|
52
|
+
top.deprec.db.create_database
|
53
|
+
top.deprec.db.grant_user_access_to_database
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
38
57
|
task :install, :roles => :app do
|
39
58
|
install_deps
|
40
59
|
install_gems
|
41
60
|
end
|
42
61
|
|
43
62
|
task :install_deps do
|
44
|
-
apt.install( {:base => %w(libmysqlclient15-dev sqlite3 libsqlite3-ruby libsqlite3-dev)}, :stable )
|
63
|
+
apt.install( {:base => %w(libmysqlclient15-dev sqlite3 libsqlite3-ruby libsqlite3-dev libpq-dev)}, :stable )
|
45
64
|
end
|
46
65
|
|
47
66
|
# install some required ruby gems
|
48
67
|
task :install_gems do
|
49
68
|
gem2.install 'sqlite3-ruby'
|
50
69
|
gem2.install 'mysql'
|
70
|
+
gem2.install 'ruby-pg'
|
51
71
|
gem2.install 'rails'
|
72
|
+
gem2.install 'rake'
|
52
73
|
gem2.install 'rspec'
|
53
74
|
end
|
54
75
|
|
@@ -56,27 +77,28 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
56
77
|
Install full rails stack on a stock standard ubuntu server (7.10, 8.04)
|
57
78
|
DESC
|
58
79
|
task :install_stack do
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
# XXX check this out before removing - Mike
|
67
|
-
deprec2.for_roles('app') do
|
68
|
-
top.deprec.svn.install
|
69
|
-
top.deprec.git.install
|
70
|
-
top.deprec.mongrel.install
|
71
|
-
top.deprec.monit.install
|
72
|
-
top.deprec.rails.install
|
80
|
+
|
81
|
+
if app_server_type.to_s == 'passenger' and passenger_use_ree
|
82
|
+
top.deprec.ree.install
|
83
|
+
else
|
84
|
+
top.deprec.ruby.install
|
85
|
+
top.deprec.rubygems.install
|
73
86
|
end
|
87
|
+
top.deprec.web.install # Uses value of web_server_type
|
88
|
+
top.deprec.svn.install
|
89
|
+
top.deprec.git.install
|
90
|
+
top.deprec.app.install # Uses value of app_server_type
|
91
|
+
top.deprec.monit.install
|
92
|
+
top.deprec.rails.install
|
93
|
+
top.deprec.logrotate.install
|
74
94
|
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
95
|
+
# We not longer install database server as part of this task.
|
96
|
+
# There is too much danger that someone will wreck an existing
|
97
|
+
# shared database.
|
98
|
+
#
|
99
|
+
# Install database server with:
|
100
|
+
#
|
101
|
+
# cap deprec:db:install
|
80
102
|
end
|
81
103
|
|
82
104
|
task :install_rails_stack do
|
@@ -84,69 +106,71 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
84
106
|
install_stack
|
85
107
|
end
|
86
108
|
|
87
|
-
task :install_gems_for_project, :roles => :app do
|
88
|
-
if gems_for_project
|
89
|
-
gems_for_project.each { |gem| gem2.install(gem) }
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
PROJECT_CONFIG_FILES[:nginx] = [
|
94
|
-
|
95
|
-
{:template => 'rails_nginx_vhost.conf.erb',
|
96
|
-
:path => "rails_nginx_vhost.conf",
|
97
|
-
:mode => 0644,
|
98
|
-
:owner => 'root:root'},
|
99
|
-
|
100
|
-
{:template => 'logrotate.conf.erb',
|
101
|
-
:path => "logrotate.conf",
|
102
|
-
:mode => 0644,
|
103
|
-
:owner => 'root:root'}
|
104
|
-
]
|
105
|
-
|
106
109
|
desc "Generate config files for rails app."
|
107
110
|
task :config_gen do
|
108
|
-
|
109
|
-
|
110
|
-
end
|
111
|
-
top.deprec.mongrel.config_gen_project
|
111
|
+
top.deprec.web.config_gen_project
|
112
|
+
top.deprec.app.config_gen_project
|
112
113
|
end
|
113
114
|
|
114
115
|
desc "Push out config files for rails app."
|
115
|
-
task :config
|
116
|
-
|
117
|
-
top.deprec.
|
118
|
-
symlink_nginx_vhost
|
119
|
-
symlink_nginx_logrotate_config
|
116
|
+
task :config do
|
117
|
+
top.deprec.web.config_project
|
118
|
+
top.deprec.app.config_project
|
120
119
|
end
|
121
120
|
|
122
|
-
task :
|
123
|
-
|
121
|
+
task :create_config_dir, :roles => :app do
|
122
|
+
deprec2.mkdir("#{shared_path}/config", :group => group, :mode => 0775, :via => :sudo)
|
124
123
|
end
|
125
124
|
|
126
|
-
|
127
|
-
|
128
|
-
|
125
|
+
# XXX This should be restricted a bit to limit what app can write to. - Mike
|
126
|
+
desc "set group ownership and permissions on dirs app server needs to write to"
|
127
|
+
task :make_writable_by_app, :roles => :app do
|
128
|
+
tmp_dir = "#{deploy_to}/current/tmp"
|
129
|
+
shared_dir = "#{deploy_to}/shared"
|
130
|
+
# XXX Factor this out
|
131
|
+
files = ["#{mongrel_log_dir}/mongrel.log", "#{mongrel_log_dir}/#{rails_env}.log"]
|
129
132
|
|
130
|
-
|
131
|
-
|
133
|
+
sudo "chgrp -R #{app_group} #{tmp_dir} #{shared_dir}"
|
134
|
+
sudo "chmod -R g+w #{tmp_dir} #{shared_dir}"
|
135
|
+
# set owner and group of log files
|
136
|
+
files.each { |file|
|
137
|
+
sudo "touch #{file}"
|
138
|
+
sudo "chown #{app_user} #{file}"
|
139
|
+
sudo "chgrp #{app_group} #{file}"
|
140
|
+
sudo "chmod g+w #{file}"
|
141
|
+
}
|
132
142
|
end
|
133
143
|
|
134
144
|
desc "Create deployment group and add current user to it"
|
135
145
|
task :setup_user_perms, :roles => [:app, :web] do
|
136
146
|
deprec2.groupadd(group)
|
137
147
|
deprec2.add_user_to_group(user, group)
|
138
|
-
deprec2.groupadd(
|
139
|
-
deprec2.add_user_to_group(user,
|
148
|
+
deprec2.groupadd(app_group)
|
149
|
+
deprec2.add_user_to_group(user, app_group)
|
140
150
|
# we've just added ourself to a group - need to teardown connection
|
141
151
|
# so that next command uses new session where we belong in group
|
142
152
|
deprec2.teardown_connections
|
143
153
|
end
|
144
154
|
|
155
|
+
desc "Create user and group for application to run as"
|
156
|
+
task :create_app_user_and_group, :roles => :app do
|
157
|
+
deprec2.groupadd(app_group)
|
158
|
+
deprec2.useradd(app_user, :group => app_group, :homedir => false)
|
159
|
+
# Set the primary group for the user the application runs as (in case
|
160
|
+
# user already existed when previous command was run)
|
161
|
+
sudo "usermod --gid #{app_group} #{app_user}"
|
162
|
+
end
|
163
|
+
|
145
164
|
task :set_perms_on_shared_and_releases, :roles => :app do
|
146
165
|
releases = File.join(deploy_to, 'releases')
|
147
166
|
sudo "chgrp -R #{group} #{shared_path} #{releases}"
|
148
167
|
sudo "chmod -R g+w #{shared_path} #{releases}"
|
149
168
|
end
|
169
|
+
|
170
|
+
# Passenger runs Rails as the owner of this file.
|
171
|
+
task :set_owner_of_environment_rb, :roles => :app do
|
172
|
+
sudo "chown #{app_user} #{current_path}/config/environment.rb"
|
173
|
+
end
|
150
174
|
|
151
175
|
# Setup database server.
|
152
176
|
task :setup_db, :roles => :db, :only => { :primary => true } do
|
@@ -183,12 +207,18 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
183
207
|
end
|
184
208
|
end
|
185
209
|
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
210
|
+
task :install_gems_for_project, :roles => :app do
|
211
|
+
if gems_for_project
|
212
|
+
gems_for_project.each { |gem| gem2.install(gem) }
|
213
|
+
end
|
214
|
+
end
|
215
|
+
|
216
|
+
desc "Activate web, app and monit"
|
217
|
+
task :activate_services do
|
218
|
+
top.deprec.web.activate
|
219
|
+
top.deprec.app.activate
|
220
|
+
top.deprec.monit.activate
|
221
|
+
end
|
192
222
|
|
193
223
|
# database.yml stuff
|
194
224
|
#
|
@@ -239,21 +269,10 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
239
269
|
task :symlink_database_yml, :roles => :app do
|
240
270
|
run "ln -nfs #{shared_path}/config/database.yml #{release_path}/config/database.yml"
|
241
271
|
end
|
242
|
-
|
243
|
-
|
244
272
|
|
245
|
-
desc "setup and configure servers"
|
246
|
-
task :setup_servers do
|
247
|
-
top.deprec.nginx.activate
|
248
|
-
top.deprec.mongrel.create_mongrel_user_and_group
|
249
|
-
top.deprec.mongrel.activate
|
250
|
-
top.deprec.monit.activate
|
251
|
-
top.deprec.rails.config_gen
|
252
|
-
top.deprec.rails.config
|
253
|
-
end
|
254
273
|
end
|
255
274
|
|
256
|
-
namespace :
|
275
|
+
namespace :database do
|
257
276
|
|
258
277
|
desc "Create database"
|
259
278
|
task :create, :roles => :db do
|
@@ -280,3 +299,5 @@ Capistrano::Configuration.instance(:must_exist).load do
|
|
280
299
|
end
|
281
300
|
|
282
301
|
end
|
302
|
+
|
303
|
+
|