isaac-deprec 1.99.30 → 1.99.32

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  }
@@ -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
- # install_index_page # XXX not done yet
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
- send(run_method, "/etc/init.d/nginx start")
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
- send(run_method, "/etc/init.d/nginx stop")
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
- # So that restart will work even if nginx is not running
118
- # we call stop and ignore the return code. We then start it.
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
- send(run_method, "/etc/init.d/nginx reload")
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-enabled'
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
- :md5 => "8e53ce6aee19afcf5cff88cf20fe4159 #{passenger_filename}"
24
- :url => "http://github.com/isaac/passenger/raw/master/pkg/#{passenger_filename}",
25
- :unpack => "tar xzvf #{passenger_filename};",
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 --auto'
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/conf.d/passenger',
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 => 'apache_vhost',
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 => :passenger do
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 => :passenger do
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 => :passenger do
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 => :passenger do
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
@@ -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.mongrel.set_perms_for_mongrel_dirs
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
- # Ruby everywhere!
61
- top.deprec.ruby.install
62
- top.deprec.rubygems.install
63
-
64
- top.deprec.nginx.install
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
- top.deprec.logrotate.install
76
-
77
- top.deprec.mysql.install
78
- top.deprec.mysql.start
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
- PROJECT_CONFIG_FILES[:nginx].each do |file|
109
- deprec2.render_template(:nginx, file)
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, :roles => [:app, :web] do
116
- deprec2.push_configs(:nginx, PROJECT_CONFIG_FILES[:nginx])
117
- top.deprec.mongrel.config_project
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 :symlink_nginx_vhost, :roles => :web do
123
- sudo "ln -sf #{deploy_to}/nginx/rails_nginx_vhost.conf #{nginx_vhost_dir}/#{application}.conf"
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
- task :symlink_nginx_logrotate_config, :roles => :web do
127
- sudo "ln -sf #{deploy_to}/nginx/logrotate.conf /etc/logrotate.d/nginx-#{application}"
128
- end
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
- task :create_config_dir, :roles => :app do
131
- deprec2.mkdir("#{shared_path}/config", :group => group, :mode => 0775, :via => :sudo)
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(mongrel_group)
139
- deprec2.add_user_to_group(user, mongrel_group)
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
- # desc "Symlink shared files."
187
- # task :symlink_shared_files, :roles => [:app, :web] do
188
- # if shared_files
189
- # shared_files.each { |file| run "ln -nfs #{shared_path}/#{file} #{current_path}/#{file}" }
190
- # end
191
- # end
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 :db do
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
+