chicken_soup 0.0.1 → 0.0.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/README.md +11 -1
- data/chicken_soup.gemspec +1 -4
- data/lib/chicken_soup/capabilities/apache.rb +235 -0
- data/lib/chicken_soup/capabilities/bundler.rb +64 -0
- data/lib/chicken_soup/capabilities/git.rb +65 -0
- data/lib/chicken_soup/capabilities/heroku.rb +286 -0
- data/lib/chicken_soup/capabilities/hoptoad.rb +6 -0
- data/lib/chicken_soup/capabilities/mysql.rb +48 -0
- data/lib/chicken_soup/capabilities/passenger.rb +31 -0
- data/lib/chicken_soup/capabilities/postgres.rb +6 -0
- data/lib/chicken_soup/capabilities/rvm.rb +42 -0
- data/lib/chicken_soup/capabilities/shared/db.rb +58 -0
- data/lib/chicken_soup/capabilities/unix.rb +163 -0
- data/lib/chicken_soup/deploy.rb +82 -0
- data/lib/chicken_soup/environment/checks.rb +39 -0
- data/lib/chicken_soup/environment/defaults.rb +53 -0
- data/lib/chicken_soup/environment.rb +15 -0
- data/lib/chicken_soup/global.rb +43 -0
- data/lib/chicken_soup/version.rb +1 -1
- data/lib/chicken_soup.rb +6 -2
- metadata +20 -37
@@ -0,0 +1,48 @@
|
|
1
|
+
######################################################################
|
2
|
+
# MYSQL TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/capabilities/shared/db'
|
6
|
+
|
7
|
+
namespace :db do
|
8
|
+
desc <<-DESC
|
9
|
+
Creates the MySQL database and user for the application.
|
10
|
+
|
11
|
+
* Creates a script that is uploaded to the user's home directory.
|
12
|
+
* The script is executed as `root` and as such, the user will be prompted
|
13
|
+
for `root`'s password.
|
14
|
+
* The DB and user name are equivalent to the application_underscored
|
15
|
+
variable.
|
16
|
+
* The DB user will be granted all privileges on the DB.
|
17
|
+
DESC
|
18
|
+
task :create do
|
19
|
+
create_script = <<-CREATESCRIPT
|
20
|
+
create database #{application_underscored} character set utf8;
|
21
|
+
create user '#{application_underscored}'@'localhost' identified by '#{db_app_password}';
|
22
|
+
grant all on #{application_underscored}.* to #{application_underscored}@localhost;
|
23
|
+
CREATESCRIPT
|
24
|
+
|
25
|
+
put create_script, "#{user_home}/create_#{application_underscored}_db_script"
|
26
|
+
run %Q{#{sudo} bash -c "mysql --user=root --password=#{db_root_password} < #{user_home}/create_#{application_underscored}_db_script"}
|
27
|
+
run "rm #{user_home}/create_#{application_underscored}_db_script"
|
28
|
+
end
|
29
|
+
|
30
|
+
desc <<-DESC
|
31
|
+
Drops the MySQL database and user for the application.
|
32
|
+
|
33
|
+
* Creates a script that is uploaded to the user's home directory.
|
34
|
+
* The script is executed as `root` and as such, the user will be prompted
|
35
|
+
for `root`'s password.
|
36
|
+
DESC
|
37
|
+
task :drop do
|
38
|
+
drop_script = <<-DROPSCRIPT
|
39
|
+
drop user #{application_underscored}@localhost;
|
40
|
+
drop database #{application_underscored};
|
41
|
+
DROPSCRIPT
|
42
|
+
|
43
|
+
put drop_script, "#{user_home}/drop_#{application_underscored}_db_script"
|
44
|
+
run %Q{#{sudo} bash -c "mysql --user=root --password=#{db_root_password} < #{user_home}/drop_#{application_underscored}_db_script"}
|
45
|
+
run "rm #{user_home}/drop_#{application_underscored}_db_script"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
######################################################################
|
2
|
+
# PASSENGER TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
namespace :deploy do
|
6
|
+
desc <<-DESC
|
7
|
+
There is no way to start the application via Passenger.
|
8
|
+
|
9
|
+
This task does nothing.
|
10
|
+
DESC
|
11
|
+
task :start do ; end
|
12
|
+
|
13
|
+
desc <<-DESC
|
14
|
+
There is no way to stop the application via Passenger.
|
15
|
+
|
16
|
+
This task does nothing.
|
17
|
+
DESC
|
18
|
+
task :stop do ; end
|
19
|
+
|
20
|
+
desc <<-DESC
|
21
|
+
Starts/Restarts the application.
|
22
|
+
|
23
|
+
Passenger knows when you'd like to reset by looking at a file in the `tmp`
|
24
|
+
directory called `restart.txt`. If the Last Access time for `restart.txt`
|
25
|
+
changes, Passenger restarts the app.
|
26
|
+
DESC
|
27
|
+
task :restart, :except => { :no_release => true } do
|
28
|
+
run "touch #{File.join(current_path,'tmp','restart.txt')}"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,6 @@
|
|
1
|
+
######################################################################
|
2
|
+
# POSTGRES TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/capabilities/shared/db'
|
6
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
######################################################################
|
2
|
+
# RVM TASKS #
|
3
|
+
######################################################################
|
4
|
+
def run_with_rvm(ruby_env_string, command)
|
5
|
+
run("rvm use #{ruby_env_string} && #{command}")
|
6
|
+
end
|
7
|
+
|
8
|
+
######################################################################
|
9
|
+
# RVM ENVIRONMENT CHECKS #
|
10
|
+
######################################################################
|
11
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
12
|
+
namespace :environment do
|
13
|
+
namespace :check do
|
14
|
+
desc <<-DESC
|
15
|
+
[internal] Checks to see if all necessary RVM variables have been set up.
|
16
|
+
DESC
|
17
|
+
task :rvm do
|
18
|
+
required_variables = [
|
19
|
+
:ruby_version,
|
20
|
+
:ruby_gemset,
|
21
|
+
:rvm_ruby_string,
|
22
|
+
]
|
23
|
+
|
24
|
+
verify_variables(required_variables)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
######################################################################
|
31
|
+
# DEFAULT RVM ENVIRONMENT SETUP #
|
32
|
+
######################################################################
|
33
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
34
|
+
namespace :environment do
|
35
|
+
namespace :defaults do
|
36
|
+
_cset :ruby_version, ENV["rvm_ruby_string"]
|
37
|
+
_cset :ruby_gemset, ENV["GEM_HOME"].split('@')[1]
|
38
|
+
|
39
|
+
_cset(:rvm_ruby_string) {ruby_gemset ? "#{ruby_version}@#{ruby_gemset}" : ruby_version}
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
######################################################################
|
2
|
+
# COMMON DB TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
_cset(:db_root_password) {Capistrano::CLI.password_prompt("Root Password For DB: ")}
|
6
|
+
_cset(:db_app_password) {Capistrano::CLI.password_prompt("App Password For DB: ")}
|
7
|
+
|
8
|
+
run_task "db:create", :as => "manager"
|
9
|
+
run_task "db:drop", :as => "manager"
|
10
|
+
|
11
|
+
namespace :db do
|
12
|
+
desc <<-DESC
|
13
|
+
Calls the rake task `db:backup` on the server for the given environment.
|
14
|
+
|
15
|
+
* The backup file is placed in a directory called `db_backups` under the `shared`
|
16
|
+
directory by default.
|
17
|
+
* The filenames are formatted with the timestamp of the backup.
|
18
|
+
* After export, each file is zipped up using a bzip2 compression format.
|
19
|
+
DESC
|
20
|
+
task :backup do
|
21
|
+
run "if [ ! -d #{shared_path}/db_backups ]; then mkdir #{shared_path}/db_backups; fi"
|
22
|
+
run "cd #{current_path} && bundle exec rake BACKUP_DIRECTORY=#{shared_path}/db_backups RAILS_ENV=#{rails_env} db:backup"
|
23
|
+
end
|
24
|
+
|
25
|
+
desc <<-DESC
|
26
|
+
Calls the rake task `db:reset_and_seed` on the server for the given environment.
|
27
|
+
|
28
|
+
Typically, this task will drop the DB, recreate the DB, load the development
|
29
|
+
schema and then populate the DB by calling the `db:seed` task.
|
30
|
+
|
31
|
+
Warning: This task cannot be called in production mode. If you truely wish
|
32
|
+
to run this in production, you'll need to log into the server and
|
33
|
+
run the rake task manually.
|
34
|
+
DESC
|
35
|
+
task :reset_and_seed do
|
36
|
+
raise "I'm sorry Dave, but I can't let you do that. I have full control over production." if rails_env == 'production'
|
37
|
+
db.backup
|
38
|
+
run "cd #{current_path} && rake RAILS_ENV=#{rails_env} db:reset_and_seed"
|
39
|
+
end
|
40
|
+
|
41
|
+
desc <<-DESC
|
42
|
+
Calls the rake task `db:seed` on the server for the given environment.
|
43
|
+
|
44
|
+
Typically, this task will populate the DB with valid data which is necessary
|
45
|
+
for the initial production deployment. An example may be that the `STATES`
|
46
|
+
table gets populated with all the information about the States.
|
47
|
+
|
48
|
+
Warning: This task cannot be called in production mode. If you truely wish
|
49
|
+
to run this in production, you'll need to log into the server and
|
50
|
+
run the rake task manually.
|
51
|
+
DESC
|
52
|
+
task :seed do
|
53
|
+
raise "I'm sorry Dave, but I can't let you do that. I have full control over production." if rails_env == 'production'
|
54
|
+
db.backup
|
55
|
+
run "cd #{current_path} && rake RAILS_ENV=#{rails_env} db:seed"
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,163 @@
|
|
1
|
+
######################################################################
|
2
|
+
# COMMON *NIX TASKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
before "deploy:config:symlink", "deploy:config:create"
|
6
|
+
|
7
|
+
namespace :deploy do
|
8
|
+
namespace :config do
|
9
|
+
desc <<-DESC
|
10
|
+
Creates the directory where the `symlink` task will look for its configuration files.
|
11
|
+
|
12
|
+
It will first look in the user's home directory to see if there is
|
13
|
+
a file of the same name as one of the shared files. If there is, it
|
14
|
+
will move that to the shared location. If not, it will create an
|
15
|
+
empty file.
|
16
|
+
DESC
|
17
|
+
task :create do
|
18
|
+
run "if [ ! -d #{shared_path}/config ]; then mkdir -p #{shared_path}/config; fi"
|
19
|
+
|
20
|
+
global_shared_files.each do |shared_file|
|
21
|
+
local_shared_file = "#{shared_file}.#{rails_env}"
|
22
|
+
|
23
|
+
if File.exists?(local_shared_file)
|
24
|
+
top.upload(local_shared_file, "#{shared_path}/#{shared_file}", :mode => "600")
|
25
|
+
else
|
26
|
+
run "touch #{shared_path}/#{shared_file}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
desc <<-DESC
|
32
|
+
Symlinks sensitive configuration files which shouldn't be checked into source control.
|
33
|
+
|
34
|
+
By default, these live in the shared directory that Capistrano sets up.
|
35
|
+
DESC
|
36
|
+
task :symlink do
|
37
|
+
global_shared_files.each do |shared_file|
|
38
|
+
run "ln -nfs #{shared_path}/#{shared_file} #{latest_release}/#{shared_file}"
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
namespace :os do
|
45
|
+
namespace :users do
|
46
|
+
namespace :root do
|
47
|
+
desc <<-DESC
|
48
|
+
[internal] Switches Capistrano to use the root user for all subsequent SSH actions.
|
49
|
+
|
50
|
+
It will prompt for the root user's password the first time it's needed.
|
51
|
+
(If the Kompanee Bash environment has been installed, you will no longer
|
52
|
+
be able to log in as root.)
|
53
|
+
DESC
|
54
|
+
task :use do
|
55
|
+
set_user_to("root")
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
namespace :manager do
|
60
|
+
desc <<-DESC
|
61
|
+
Switches Capistrano to use the manager user for all subsequent SSH actions.
|
62
|
+
|
63
|
+
It will prompt for the manager user's password the first time it's needed.
|
64
|
+
(If public key authentication is already installed, you will not be prompted.)
|
65
|
+
DESC
|
66
|
+
task :use do
|
67
|
+
set_user_to(manager_username)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
namespace :deploy do
|
72
|
+
desc <<-DESC
|
73
|
+
Switches Capistrano to use the deployment user for all subsequent SSH actions.
|
74
|
+
|
75
|
+
It will prompt for the deployment user's password the first time it's needed.
|
76
|
+
(If public key authentication is already installed, you will not be prompted.)
|
77
|
+
DESC
|
78
|
+
task :use do
|
79
|
+
set_user_to(deployment_username)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
######################################################################
|
87
|
+
# UNIX ENVIRONMENT CHECKS #
|
88
|
+
######################################################################
|
89
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
90
|
+
namespace :environment do
|
91
|
+
namespace :check do
|
92
|
+
desc <<-DESC
|
93
|
+
[internal] Checks to see if all necessary unix environment variables have been set up.
|
94
|
+
DESC
|
95
|
+
task :unix do
|
96
|
+
required_variables = [
|
97
|
+
:user,
|
98
|
+
:deployment_username,
|
99
|
+
:manager_username,
|
100
|
+
:user_home,
|
101
|
+
:deployment_user_home,
|
102
|
+
:manager_user_home,
|
103
|
+
:deploy_dir,
|
104
|
+
:deploy_name,
|
105
|
+
:deploy_to,
|
106
|
+
:app_server_ip,
|
107
|
+
:web_server_ip,
|
108
|
+
:db_server_ip,
|
109
|
+
:web_server_name,
|
110
|
+
:app_server_name,
|
111
|
+
:db_server_name
|
112
|
+
]
|
113
|
+
|
114
|
+
verify_variables(required_variables)
|
115
|
+
end
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
######################################################################
|
121
|
+
# DEFAULT UNIX SERVER ENVIRONMENT SETUP #
|
122
|
+
######################################################################
|
123
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
124
|
+
namespace :environment do
|
125
|
+
namespace :defaults do
|
126
|
+
desc "[internal] Sets intelligent defaults for unix server deployments."
|
127
|
+
task :unix do
|
128
|
+
_cset :deployment_username, "deploy"
|
129
|
+
_cset :manager_username, "manager"
|
130
|
+
_cset :user, deployment_username
|
131
|
+
|
132
|
+
_cset :user_home, "/home/#{user}"
|
133
|
+
_cset :manager_user_home, "/home/#{manager_username}"
|
134
|
+
_cset :deployment_user_home, "/home/#{deployment_username}"
|
135
|
+
_cset :deploy_dir, "/var/www"
|
136
|
+
_cset :deploy_name, "#{application_short}.#{domain}"
|
137
|
+
set :deploy_to, "#{deploy_dir}/#{deploy_name}"
|
138
|
+
|
139
|
+
_cset :keep_releases, 15
|
140
|
+
|
141
|
+
_cset :global_shared_files, ["config/database.yml"]
|
142
|
+
|
143
|
+
_cset :app_server_ip, server_ip
|
144
|
+
_cset :web_server_ip, server_ip
|
145
|
+
_cset :db_server_ip, server_ip
|
146
|
+
|
147
|
+
_cset :app_server_name, server_name
|
148
|
+
_cset :web_server_name, server_name
|
149
|
+
_cset :db_server_name, server_name
|
150
|
+
|
151
|
+
# Evidently roles can't be assigned in a namespace :-/
|
152
|
+
set_unix_server_roles
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
|
157
|
+
desc "[internal] This task is only here because `role` cannot be used within a `namespace`"
|
158
|
+
task :set_unix_server_roles do
|
159
|
+
role :web, web_server_name, :primary => true
|
160
|
+
role :app, app_server_name, :primary => true
|
161
|
+
role :db, db_server_name, :primary => true
|
162
|
+
end
|
163
|
+
end
|
@@ -0,0 +1,82 @@
|
|
1
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
2
|
+
before "deploy", "deploy:web:disable"
|
3
|
+
after "deploy", "deploy:web:enable"
|
4
|
+
|
5
|
+
before "deploy:migrate", "db:backup"
|
6
|
+
|
7
|
+
namespace :deploy do
|
8
|
+
desc <<-DESC
|
9
|
+
[internal] The list of tasks used by `deploy`, `deploy:cold`, `deploy:subzero` and `deploy:initial`
|
10
|
+
DESC
|
11
|
+
task :base do
|
12
|
+
transaction do
|
13
|
+
deploy.update
|
14
|
+
deploy.config.symlink
|
15
|
+
gems.install
|
16
|
+
deploy.migrate
|
17
|
+
deploy.cleanup
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
desc <<-DESC
|
22
|
+
Used when you would like to be more forceful with your deployment.
|
23
|
+
|
24
|
+
It will forceably disable the site (from the web server layer), run a standard
|
25
|
+
deployment and re-enable the site.
|
26
|
+
DESC
|
27
|
+
task :cold do
|
28
|
+
transaction do
|
29
|
+
website.disable
|
30
|
+
deploy.base
|
31
|
+
website.enable
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
desc <<-DESC
|
36
|
+
When you just want to "FINISH HIM!", hit "Forward, Down, Forward, High Punch" \
|
37
|
+
and your website will be at your mercy.
|
38
|
+
|
39
|
+
It will forceably stop the web server, run a standard deployment, and restart \
|
40
|
+
the web server.
|
41
|
+
DESC
|
42
|
+
task :subzero do
|
43
|
+
transaction do
|
44
|
+
web_server.stop
|
45
|
+
deploy.base
|
46
|
+
web_server.start
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
desc <<-DESC
|
51
|
+
This task should be used only on the first deployment.
|
52
|
+
|
53
|
+
It will set up the deployment structure that Capistrano uses, create the DB, install
|
54
|
+
the website configuration files into the web server, and then run a standard "cold"
|
55
|
+
deployment.
|
56
|
+
DESC
|
57
|
+
task :initial do
|
58
|
+
transaction do
|
59
|
+
deploy.setup
|
60
|
+
db.create
|
61
|
+
website.install
|
62
|
+
deploy.cold
|
63
|
+
deploy.check
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
desc <<-DESC
|
68
|
+
The standard deployment task.
|
69
|
+
|
70
|
+
It will check out a new release of the code to the `releases` directory, update the
|
71
|
+
symlinks to the desired shared configuration files, install all necessary gems,
|
72
|
+
run all pending migrations, tag the git commit, perform a cleanup and restart
|
73
|
+
the application layer so that the changes will take effect.
|
74
|
+
DESC
|
75
|
+
task :default do
|
76
|
+
transaction do
|
77
|
+
deploy.base
|
78
|
+
deploy.restart
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
######################################################################
|
2
|
+
# ENVIRONMENT CHECKS #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
on :start, 'environment:check', :except => ['staging', 'production']
|
6
|
+
|
7
|
+
before 'environment:check', 'environment:check:common'
|
8
|
+
|
9
|
+
namespace :environment do
|
10
|
+
namespace :check do
|
11
|
+
desc "[internal] Checks for environment variables shared among all deployment types."
|
12
|
+
task :common do
|
13
|
+
abort "You need to specify staging or production when you deploy. ie 'cap staging db:backup'" unless exists?(:rails_env)
|
14
|
+
abort "You need to specify a deployment type in your application's 'deploy.rb' file. ie 'set :deployment_type, :heroku'" unless exists?(:deployment_type)
|
15
|
+
|
16
|
+
required_variables = [
|
17
|
+
:application,
|
18
|
+
:application_short
|
19
|
+
]
|
20
|
+
|
21
|
+
verify_variables(required_variables)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "[internal] Runs checks for all of the capabilities listed."
|
25
|
+
task :capabilities do
|
26
|
+
if exists?(:capabilities)
|
27
|
+
fetch(:capabilities).each do |capability|
|
28
|
+
environment.check.send(capability.to_s) if environment.check.respond_to?(capability.to_sym)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
desc "[internal] Checks to see if all the necessary environment variables have been set up for a proper deployment."
|
34
|
+
task :default do
|
35
|
+
environment.check.capabilities
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
######################################################################
|
2
|
+
# DEFAULT ENVIRONMENT SETUP #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
after 'production', 'environment:defaults:production', 'environment:defaults'
|
6
|
+
after 'staging', 'environment:defaults:staging', 'environment:defaults'
|
7
|
+
|
8
|
+
before 'environment:defaults', 'load_capabilities'
|
9
|
+
|
10
|
+
namespace :environment do
|
11
|
+
namespace :defaults do
|
12
|
+
desc "[internal] Used to set up the intelligent staging defaults we like for our projects"
|
13
|
+
task :staging do
|
14
|
+
set :rails_env, "staging"
|
15
|
+
end
|
16
|
+
|
17
|
+
desc "[internal] Used to set up the intelligent production defaults we like for our projects"
|
18
|
+
task :production do
|
19
|
+
set :rails_env, "production"
|
20
|
+
end
|
21
|
+
|
22
|
+
desc "[internal] Sets intelligent common defaults for deployments"
|
23
|
+
task :common do
|
24
|
+
_cset :use_sudo, false
|
25
|
+
_cset :default_shell, false
|
26
|
+
|
27
|
+
_cset :copy_compression, :bz2
|
28
|
+
|
29
|
+
_cset(:application_underscored) {application.gsub(/-/, "_")}
|
30
|
+
end
|
31
|
+
|
32
|
+
desc "[internal] Sets defaults for all of the capabilities listed."
|
33
|
+
task :capabilities do
|
34
|
+
if exists?(:capabilities)
|
35
|
+
fetch(:capabilities).each do |capability|
|
36
|
+
environment.defaults.send(capability.to_s) if environment.defaults.respond_to?(capability.to_sym)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
desc <<-DESC
|
42
|
+
[internal] Installs the entire environment for the given deployment type.
|
43
|
+
|
44
|
+
Most of these values can be overridden in each application's deploy.rb file.
|
45
|
+
DESC
|
46
|
+
task :default do
|
47
|
+
defaults.common
|
48
|
+
defaults.send(deployment_type.to_s)
|
49
|
+
defaults.capabilities
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
######################################################################
|
2
|
+
# ENVIRONMENT SETUP #
|
3
|
+
######################################################################
|
4
|
+
Capistrano::Configuration.instance(:must_exist).load do
|
5
|
+
require 'chicken_soup/environment/checks'
|
6
|
+
require 'chicken_soup/environment/defaults'
|
7
|
+
|
8
|
+
desc "[internal] This task is only here because `require` cannot be used within a `namespace`"
|
9
|
+
task :load_capabilities do
|
10
|
+
require "chicken_soup/capabilities/unix"
|
11
|
+
capabilities.each do |capability|
|
12
|
+
require "chicken_soup/capabilities/#{capability}"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
def close_sessions
|
2
|
+
sessions.values.each { |session| session.close }
|
3
|
+
sessions.clear
|
4
|
+
end
|
5
|
+
|
6
|
+
def set_user_to(username)
|
7
|
+
close_sessions
|
8
|
+
set :user, username
|
9
|
+
set(:password) {Capistrano::CLI.password_prompt("#{username.capitalize}'s Password: ")}
|
10
|
+
set(:user_home) { user == "root" ? "/root" : "/home/#{username}" }
|
11
|
+
end
|
12
|
+
|
13
|
+
def run_task(task_name, options = {})
|
14
|
+
raise "#run_task must be passed an `:as` option so that it knows who to change the user to." unless options[:as]
|
15
|
+
|
16
|
+
original_username = exists?(:user) ? user : nil
|
17
|
+
|
18
|
+
if options[:now]
|
19
|
+
set_user_to options[:as]
|
20
|
+
find_and_execute_task(task_name)
|
21
|
+
set_user_to original_username
|
22
|
+
else
|
23
|
+
before task_name, "os:users:#{options[:as]}:use"
|
24
|
+
after task_name, "os:users:#{original_username}:use"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def verify_variables(required_variables)
|
29
|
+
required_variables.each do |expected_variable|
|
30
|
+
abort( "You have not defined '#{expected_variable}' which is necessary for deployment." ) unless exists?(expected_variable)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Taken from the capistrano code.
|
35
|
+
def _cset(name, *args, &block)
|
36
|
+
unless exists?(name)
|
37
|
+
set(name, *args, &block)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def remote_file_exists?(file)
|
42
|
+
capture("if [ -f #{file} ]; then echo 'exists'; fi;").chomp == "exists"
|
43
|
+
end
|
data/lib/chicken_soup/version.rb
CHANGED
data/lib/chicken_soup.rb
CHANGED