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.
@@ -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
+