gitpusshuten 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.bundle/config +2 -0
- data/.gitignore +4 -0
- data/Gemfile +9 -0
- data/Gemfile.lock +53 -0
- data/README.md +7 -0
- data/bin/gitpusshuten +4 -0
- data/bin/heavenly +4 -0
- data/bin/ten +4 -0
- data/gitpusshuten.gemspec +26 -0
- data/lib/gitpusshuten/cli.rb +78 -0
- data/lib/gitpusshuten/command.rb +147 -0
- data/lib/gitpusshuten/commands/base.rb +246 -0
- data/lib/gitpusshuten/commands/delete.rb +27 -0
- data/lib/gitpusshuten/commands/help.rb +36 -0
- data/lib/gitpusshuten/commands/initialize.rb +61 -0
- data/lib/gitpusshuten/commands/push.rb +54 -0
- data/lib/gitpusshuten/commands/remote.rb +29 -0
- data/lib/gitpusshuten/commands/user.rb +252 -0
- data/lib/gitpusshuten/commands/version.rb +21 -0
- data/lib/gitpusshuten/configuration.rb +122 -0
- data/lib/gitpusshuten/environment.rb +70 -0
- data/lib/gitpusshuten/gem.rb +33 -0
- data/lib/gitpusshuten/git.rb +111 -0
- data/lib/gitpusshuten/helpers/environment/installers.rb +59 -0
- data/lib/gitpusshuten/helpers/environment/packages.rb +21 -0
- data/lib/gitpusshuten/helpers/environment/scp.rb +57 -0
- data/lib/gitpusshuten/helpers/environment/ssh.rb +77 -0
- data/lib/gitpusshuten/helpers/environment/ssh_key.rb +79 -0
- data/lib/gitpusshuten/helpers/environment/user.rb +70 -0
- data/lib/gitpusshuten/helpers/spinner.rb +98 -0
- data/lib/gitpusshuten/hook.rb +26 -0
- data/lib/gitpusshuten/hooks.rb +147 -0
- data/lib/gitpusshuten/initializer.rb +95 -0
- data/lib/gitpusshuten/local.rb +35 -0
- data/lib/gitpusshuten/log.rb +83 -0
- data/lib/gitpusshuten/modules/active_record/hooks.rb +19 -0
- data/lib/gitpusshuten/modules/apache/command.rb +354 -0
- data/lib/gitpusshuten/modules/bundler/command.rb +43 -0
- data/lib/gitpusshuten/modules/bundler/hooks.rb +8 -0
- data/lib/gitpusshuten/modules/mysql/command.rb +192 -0
- data/lib/gitpusshuten/modules/nanoc/hooks.rb +9 -0
- data/lib/gitpusshuten/modules/nginx/command.rb +447 -0
- data/lib/gitpusshuten/modules/passenger/command.rb +310 -0
- data/lib/gitpusshuten/modules/passenger/hooks.rb +4 -0
- data/lib/gitpusshuten/modules/rvm/command.rb +277 -0
- data/lib/gitpusshuten.rb +21 -0
- data/lib/templates/config.rb +37 -0
- data/lib/templates/hooks.rb +40 -0
- data/spec/cli_spec.rb +83 -0
- data/spec/command_spec.rb +76 -0
- data/spec/configuration_spec.rb +45 -0
- data/spec/environment_spec.rb +64 -0
- data/spec/fixtures/combined_hooks.rb +23 -0
- data/spec/fixtures/config.rb +23 -0
- data/spec/fixtures/hooks.rb +37 -0
- data/spec/fixtures/passenger.json +1 -0
- data/spec/gem_spec.rb +28 -0
- data/spec/git_spec.rb +59 -0
- data/spec/gitpusshuten_spec.rb +9 -0
- data/spec/hook_spec.rb +48 -0
- data/spec/hooks_spec.rb +150 -0
- data/spec/initializer_spec.rb +26 -0
- data/spec/log_spec.rb +20 -0
- data/spec/spec_helper.rb +43 -0
- metadata +220 -0
@@ -0,0 +1,310 @@
|
|
1
|
+
module GitPusshuTen
|
2
|
+
module Commands
|
3
|
+
class Passenger < GitPusshuTen::Commands::Base
|
4
|
+
description "[Module] Phusion Passenger commands."
|
5
|
+
usage "passenger <command> for <environment>"
|
6
|
+
example "heavenly passenger install for staging # Installs Phusion Passenger with the NginX or Apache2 web server"
|
7
|
+
example "heavenly passenger update for staging # Updates Phusion Passenger and the NginX or Apache2 web server if a new version is available"
|
8
|
+
example "heavenly passenger restart for production # Restarts the Passenger instance for the specified environment"
|
9
|
+
|
10
|
+
##
|
11
|
+
# Contains the webserver we're working with
|
12
|
+
# Either NginX or Apache
|
13
|
+
attr_accessor :webserver
|
14
|
+
|
15
|
+
def initialize(*objects)
|
16
|
+
super
|
17
|
+
|
18
|
+
@command = cli.arguments.shift
|
19
|
+
|
20
|
+
help if command.nil? or e.name.nil?
|
21
|
+
end
|
22
|
+
|
23
|
+
##
|
24
|
+
# Restarts a Passenger instance for the specified environment
|
25
|
+
def perform_restart!
|
26
|
+
message "Restarting Passenger for #{y(c.application)} (#{y(e.name)} environment)."
|
27
|
+
e.execute_as_user("cd #{e.app_dir}; mkdir -p tmp; touch tmp/restart.txt")
|
28
|
+
end
|
29
|
+
|
30
|
+
##
|
31
|
+
# Installs Phusion Passenger
|
32
|
+
def perform_install!
|
33
|
+
|
34
|
+
if not e.installed?('gem')
|
35
|
+
error "Could not find RubyGems."
|
36
|
+
error "Install RVM (Ruby Version Manager) and at least one Ruby version."
|
37
|
+
error "To do this, run: #{y("heavenly rvm install for #{e.name}")}."
|
38
|
+
exit
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# If no web server is specified, it'll prompt the user to
|
43
|
+
# select one of the available (NginX or Apache)
|
44
|
+
if webserver.nil?
|
45
|
+
message "For which web server would you like to install #{y('Phusion Passenger')}?"
|
46
|
+
@webserver = webserver?
|
47
|
+
end
|
48
|
+
|
49
|
+
message "Starting #{y('Phusion Passenger')} installation for #{y(webserver)}!"
|
50
|
+
|
51
|
+
##
|
52
|
+
# Install the latest Passenger Gem
|
53
|
+
Spinner.return :message => "Installing latest Phusion Passenger Gem.." do
|
54
|
+
e.execute_as_root("gem install passenger --no-ri --no-rdoc")
|
55
|
+
g("Done!")
|
56
|
+
end
|
57
|
+
|
58
|
+
##
|
59
|
+
# Install dependencies for Passenger
|
60
|
+
Spinner.return :message => "Ensuring #{y('Phusion Passenger')} dependencies are installed.." do
|
61
|
+
|
62
|
+
##
|
63
|
+
# Install dependencies for installing NginX
|
64
|
+
if nginx?
|
65
|
+
e.install!("libcurl4-openssl-dev")
|
66
|
+
end
|
67
|
+
|
68
|
+
##
|
69
|
+
# Install dependencies for installing Apache
|
70
|
+
if apache?
|
71
|
+
e.install!("libcurl4-openssl-dev apache2-mpm-prefork apache2-prefork-dev libapr1-dev libaprutil1-dev")
|
72
|
+
end
|
73
|
+
|
74
|
+
g("Done!")
|
75
|
+
end
|
76
|
+
|
77
|
+
if not @updating
|
78
|
+
standard "Installing #{y('Phusion Passenger')} and #{y(webserver)}."
|
79
|
+
else
|
80
|
+
standard "Updating #{y('Phusion Passenger')} and #{y(webserver)}."
|
81
|
+
end
|
82
|
+
|
83
|
+
Spinner.return :message => "This may take a while.." do
|
84
|
+
|
85
|
+
##
|
86
|
+
# Run the Passenger NginX installation module if we're working with NginX
|
87
|
+
if nginx?
|
88
|
+
e.execute_as_root("passenger-install-nginx-module --auto --auto-download --prefix=/etc/nginx")
|
89
|
+
end
|
90
|
+
|
91
|
+
##
|
92
|
+
# Run the Passenger Apache installation module if we're working with Apache
|
93
|
+
if apache?
|
94
|
+
e.execute_as_root("passenger-install-apache2-module --auto")
|
95
|
+
end
|
96
|
+
|
97
|
+
g("Done!")
|
98
|
+
end
|
99
|
+
|
100
|
+
##
|
101
|
+
# Configures NginX to setup a managable vhost environment like Apache2
|
102
|
+
if nginx?
|
103
|
+
GitPusshuTen::Initializer.new("nginx", "setup", "#{e.name}", "environment")
|
104
|
+
end
|
105
|
+
|
106
|
+
##
|
107
|
+
# Inject the Passenger paths into the Apache2 configuration file
|
108
|
+
if apache?
|
109
|
+
Spinner.return :message => "Configuring Apache for Phusion Passenger.." do
|
110
|
+
if not e.execute_as_root('cat /etc/apache2/apache2.conf').include?("passenger_module")
|
111
|
+
if e.execute_as_root('passenger-config --root') =~ /\/usr\/local\/rvm\/gems\/(.+)\/gems\/passenger-.+/
|
112
|
+
@ruby_version = $1.chomp.strip
|
113
|
+
@passenger_version = e.execute_as_root('passenger-config --version').chomp.strip
|
114
|
+
end
|
115
|
+
|
116
|
+
e.execute_as_root <<-PASSENGER
|
117
|
+
cat <<-CONFIG >> /etc/apache2/apache2.conf
|
118
|
+
|
119
|
+
LoadModule passenger_module /usr/local/rvm/gems/#{@ruby_version}/gems/passenger-#{@passenger_version}/ext/apache2/mod_passenger.so
|
120
|
+
PassengerRoot /usr/local/rvm/gems/#{@ruby_version}/gems/passenger-#{@passenger_version}
|
121
|
+
PassengerRuby /usr/local/rvm/wrappers/#{@ruby_version}/ruby
|
122
|
+
|
123
|
+
CONFIG
|
124
|
+
PASSENGER
|
125
|
+
end
|
126
|
+
g('Done!')
|
127
|
+
end # spinner
|
128
|
+
end
|
129
|
+
|
130
|
+
if not @updating
|
131
|
+
message "#{y('Phusion Passenger')} and #{y(webserver)} have been installed!"
|
132
|
+
else
|
133
|
+
message "#{y('Phusion Passenger')} and #{y(webserver)} have been updated!"
|
134
|
+
end
|
135
|
+
|
136
|
+
if nginx?
|
137
|
+
message "NginX directory: #{y('/etc/nginx')}"
|
138
|
+
end
|
139
|
+
|
140
|
+
if apache?
|
141
|
+
message "Apache directory: #{y('/etc/apache2')}"
|
142
|
+
GitPusshuTen::Initializer.new('apache', 'create-vhost', 'for', "#{e.name}")
|
143
|
+
end
|
144
|
+
end
|
145
|
+
|
146
|
+
##
|
147
|
+
# Updates the Passenger Gem and NginX or Apache2 itself
|
148
|
+
# Compares the currently installed Passenger Gem with the latest (stable) version
|
149
|
+
# on RubyGems.org to see if anything newer than the current version is out.
|
150
|
+
# If there is, then it will continue to update NginX/Apache2 using Phussions's NginX/Apache2 installation module.
|
151
|
+
def perform_update!
|
152
|
+
prompt_for_root_password!
|
153
|
+
|
154
|
+
##
|
155
|
+
# If no web server is specified, it'll prompt the user to
|
156
|
+
# select one of the available (NginX or Apache)
|
157
|
+
if webserver.nil?
|
158
|
+
@webserver = webserver?
|
159
|
+
end
|
160
|
+
|
161
|
+
##
|
162
|
+
# Check if RubyGems (RVM + Ruby) has been installed
|
163
|
+
Spinner.return :message => "Checking if RubyGems is installed.." do
|
164
|
+
@rubygems_installed = e.installed?('gem')
|
165
|
+
if not @rubygems_installed
|
166
|
+
r("Couldn't find RubyGems.")
|
167
|
+
else
|
168
|
+
g("Done!")
|
169
|
+
end
|
170
|
+
end
|
171
|
+
|
172
|
+
if not @rubygems_installed
|
173
|
+
error "Install RVM (Ruby Version Manager) and at least one Ruby version."
|
174
|
+
error "To do this, run: #{y("heavenly rvm install for #{e.name}")}."
|
175
|
+
exit
|
176
|
+
end
|
177
|
+
|
178
|
+
##
|
179
|
+
# Check if Phusion Passenger is installed
|
180
|
+
Spinner.return :message => "Checking if Phusion Passenger is installed.." do
|
181
|
+
@passenger_installed = e.installed?("passenger")
|
182
|
+
if not @passenger_installed
|
183
|
+
@ruby_version = e.execute_as_root("ruby -v").chomp
|
184
|
+
r("Couldn't find Phusion Passenger")
|
185
|
+
else
|
186
|
+
g("Found!")
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
if not @passenger_installed
|
191
|
+
error "Passenger has not been installed for #{y(@ruby_version)}"
|
192
|
+
error "If you want to install Passenger, please run the following command:"
|
193
|
+
error y("heavenly passenger install for #{e.name}")
|
194
|
+
exit
|
195
|
+
end
|
196
|
+
|
197
|
+
##
|
198
|
+
# Check if a newer version of Phusion Passenger Gem is available
|
199
|
+
Spinner.return :message => "Checking if there's a newer (stable) Phusion Passenger available.." do
|
200
|
+
@latest_passenger_version = GitPusshuTen::Gem.new(:passenger).latest_version
|
201
|
+
@current_passenger_version = e.execute_as_root("passenger-config --version").chomp.strip
|
202
|
+
if @latest_passenger_version > @current_passenger_version
|
203
|
+
@new_passenger_version_available = true
|
204
|
+
y("There appears to be a newer version of Phusion Passenger available!")
|
205
|
+
else
|
206
|
+
g("Your Phusion Passenger is #{@current_passenger_version}. This is the latest version.")
|
207
|
+
end
|
208
|
+
end
|
209
|
+
|
210
|
+
exit unless @new_passenger_version_available
|
211
|
+
|
212
|
+
message "Phusion Passenger #{y(@latest_passenger_version)} is out!"
|
213
|
+
message "You are currently using version #{y(@current_passenger_version)}.\n\n"
|
214
|
+
message "Would you like to update Phusion Passenger?"
|
215
|
+
message "This will update the #{y('Phusion Passenger Gem')} as well as #{y(webserver)} and #{y("Phusion Passenger's #{webserver} Module")}."
|
216
|
+
|
217
|
+
##
|
218
|
+
# Prompt user for confirmation for the update
|
219
|
+
if yes?
|
220
|
+
|
221
|
+
##
|
222
|
+
# Search for NginX installation directory by finding the configuration file
|
223
|
+
if nginx?
|
224
|
+
find_nginx_conf!
|
225
|
+
|
226
|
+
if not @nginx_conf
|
227
|
+
error "Could not find the NginX configuration file in #{y('/etc/nginx')} or #{y('/etc/nginx/conf')}."
|
228
|
+
exit
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
##
|
233
|
+
# Ensures the Apache2 configuration file exists
|
234
|
+
if apache?
|
235
|
+
find_apache2_conf!
|
236
|
+
|
237
|
+
if not @apache2_conf
|
238
|
+
error "Could not find the Apache2 configuration file in #{y('/etc/apache2')}."
|
239
|
+
exit
|
240
|
+
end
|
241
|
+
end
|
242
|
+
|
243
|
+
##
|
244
|
+
# Installation directory has been found
|
245
|
+
message "#{y(webserver)} installation found in #{y(@nginx_conf || @apache2_conf)}."
|
246
|
+
|
247
|
+
##
|
248
|
+
# Invoke the installation command to install NginX
|
249
|
+
@updating = true
|
250
|
+
perform_install!
|
251
|
+
|
252
|
+
##
|
253
|
+
# Update the webserver configuration file
|
254
|
+
message "The #{y(webserver)} configuration file needs to be updated with the new #{y('Passenger')} version."
|
255
|
+
message "Invoking #{y("heavenly #{webserver.downcase} update-configuration for #{e.name}")} for you..\n\n\n"
|
256
|
+
GitPusshuTen::Initializer.new([webserver.downcase, 'update-configuration', 'for', "#{e.name}"])
|
257
|
+
end
|
258
|
+
end
|
259
|
+
|
260
|
+
##
|
261
|
+
# Returns true if we're working with NginX
|
262
|
+
def nginx?
|
263
|
+
webserver == 'NginX'
|
264
|
+
end
|
265
|
+
|
266
|
+
##
|
267
|
+
# Returns true if we're working with Apache
|
268
|
+
def apache?
|
269
|
+
webserver == 'Apache'
|
270
|
+
end
|
271
|
+
|
272
|
+
##
|
273
|
+
# Prompts the user to select a webserver
|
274
|
+
def webserver?
|
275
|
+
choose do |menu|
|
276
|
+
menu.prompt = ''
|
277
|
+
menu.choice('NginX')
|
278
|
+
menu.choice('Apache')
|
279
|
+
end
|
280
|
+
end
|
281
|
+
|
282
|
+
##
|
283
|
+
# Finds and sets the NginX Conf path
|
284
|
+
def find_nginx_conf!
|
285
|
+
##
|
286
|
+
# NginX Conf path you get from Passenger
|
287
|
+
if e.file?('/etc/nginx/conf/nginx.conf')
|
288
|
+
@nginx_conf = '/etc/nginx/conf/nginx.conf'
|
289
|
+
end
|
290
|
+
|
291
|
+
##
|
292
|
+
# NginX Conf path you get from Aptitude
|
293
|
+
if e.file?('/etc/nginx/nginx.conf')
|
294
|
+
@nginx_conf = '/etc/nginx/nginx.conf'
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|
298
|
+
##
|
299
|
+
# Finds and sets the Apache2 Conf path
|
300
|
+
def find_apache2_conf!
|
301
|
+
##
|
302
|
+
# Apache2 Conf path you get from Aptitude
|
303
|
+
if e.file?('/etc/apache2/apache2.conf')
|
304
|
+
@apache2_conf = '/etc/apache2/apache2.conf'
|
305
|
+
end
|
306
|
+
end
|
307
|
+
|
308
|
+
end
|
309
|
+
end
|
310
|
+
end
|
@@ -0,0 +1,277 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module GitPusshuTen
|
3
|
+
module Commands
|
4
|
+
class Rvm < GitPusshuTen::Commands::Base
|
5
|
+
description "[Module] Ruby Version Manager (RVM) commands."
|
6
|
+
usage "rvm <command> for <environment>"
|
7
|
+
example "heavenly rvm install for staging # Installs RVM (system wide)."
|
8
|
+
example "heavenly rvm update for staging # Updates RVM."
|
9
|
+
example "heavenly rvm list for staging # Lists installed Rubies under RVM."
|
10
|
+
example "heavenly rvm install-ruby for production # Installs one of the available Ruby versions."
|
11
|
+
example "heavenly rvm uninstall-ruby for production # Uninstalls an installed Ruby under RVM."
|
12
|
+
example "heavenly rvm remove-ruby for production # Uninstalls and removes the Ruby's complete source from RVM."
|
13
|
+
example "heavenly rvm set-default-ruby for production # Sets the system wide default Ruby."
|
14
|
+
example " This is required if you want to change the Ruby version"
|
15
|
+
example " for your Ruby applications running Passenger."
|
16
|
+
|
17
|
+
def initialize(*objects)
|
18
|
+
super
|
19
|
+
|
20
|
+
@command = cli.arguments.shift
|
21
|
+
|
22
|
+
help if command.nil? or e.name.nil?
|
23
|
+
|
24
|
+
@command = @command.underscore
|
25
|
+
end
|
26
|
+
|
27
|
+
##
|
28
|
+
# Installs RVM (Ruby Version Manager)
|
29
|
+
def perform_install!
|
30
|
+
prompt_for_root_password!
|
31
|
+
|
32
|
+
message "Which Ruby would you like to install and use as your default Ruby Interpreter?"
|
33
|
+
ruby_version = choose_ruby_version!
|
34
|
+
message "Going to install #{y(ruby_version)} after the #{y('RVM')} installation finishes."
|
35
|
+
|
36
|
+
##
|
37
|
+
# Update aptitude package list and install git/curl/wget
|
38
|
+
Spinner.return :message => "Updating package list and installing #{y('RVM')} requirements.." do
|
39
|
+
e.install!("git-core curl wget;")
|
40
|
+
g("Done!")
|
41
|
+
end
|
42
|
+
|
43
|
+
##
|
44
|
+
# Download Packages
|
45
|
+
Spinner.return :message => "Downloading Git Pusshu Ten #{y('packages')}.." do
|
46
|
+
e.download_packages!("$HOME", :root)
|
47
|
+
g("Done!")
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Install RVM (system wide)
|
52
|
+
Spinner.return :message => "Installing #{y('RVM')}.." do
|
53
|
+
e.execute_as_root("cd $HOME; wget -O rvm-install-system-wide --no-check-certificate http://bit.ly/rvm-install-system-wide; bash rvm-install-system-wide; rm rvm-install-system-wide;")
|
54
|
+
g("Done!")
|
55
|
+
end
|
56
|
+
|
57
|
+
##
|
58
|
+
# Download Git Packages and add the rvm load snippet into /etc/profile.
|
59
|
+
if not e.execute_as_root("cat /etc/profile").include?('source "/usr/local/rvm/scripts/rvm"')
|
60
|
+
Spinner.return :message => "Configuring #{y('/etc/profile')}.." do
|
61
|
+
e.execute_as_root("cd $HOME; cat gitpusshuten-packages/modules/rvm/profile >> /etc/profile")
|
62
|
+
g("Done!")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
##
|
67
|
+
# Add the gemrc into the root's home directory
|
68
|
+
if not e.file?('/root/.gemrc')
|
69
|
+
Spinner.return :message => "Configuring #{y('.gemrc')} file.." do
|
70
|
+
e.execute_as_root("cd $HOME; cat gitpusshuten-packages/modules/rvm/gemrc > ~/.gemrc")
|
71
|
+
g("Done!")
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
##
|
76
|
+
# Create a .bashrc in $HOME to load /etc/profile for non-interactive sessions
|
77
|
+
if not e.execute_as_root("cat $HOME/.bashrc").include?('source /etc/profile')
|
78
|
+
Spinner.return :message => "Configuring #{y('.bashrc')}.." do
|
79
|
+
e.execute_as_root("echo 'source /etc/profile' > $HOME/.bashrc; source $HOME/.bashrc")
|
80
|
+
g("Done!")
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
##
|
85
|
+
# Install required packages for installing Ruby
|
86
|
+
Spinner.return :message => "Installing the Ruby Interpreter #{y('dependency packages')}.." do
|
87
|
+
e.install!("build-essential bison openssl libreadline5 libreadline5-dev curl git-core zlib1g zlib1g-dev libssl-dev libsqlite3-0 libsqlite3-dev sqlite3 libxml2-dev")
|
88
|
+
g("Done!")
|
89
|
+
end
|
90
|
+
|
91
|
+
##
|
92
|
+
# Install a Ruby version
|
93
|
+
Spinner.return :message => "Installing #{y(ruby_version)} with #{y('rvm')}. This may take a while.." do
|
94
|
+
e.execute_as_root("rvm install #{ruby_version}")
|
95
|
+
g("Done!")
|
96
|
+
end
|
97
|
+
|
98
|
+
##
|
99
|
+
# Set the Ruby version as the default Ruby
|
100
|
+
Spinner.return :message => "Making #{y(ruby_version)} the default Ruby.." do
|
101
|
+
e.execute_as_root("rvm use #{ruby_version} --default")
|
102
|
+
g("Done!")
|
103
|
+
end
|
104
|
+
|
105
|
+
##
|
106
|
+
# Clean up Packages
|
107
|
+
Spinner.return :message => "Cleaning up Git Pusshu Ten #{y('packages')}.." do
|
108
|
+
e.clean_up_packages!("$HOME", :root)
|
109
|
+
g("Done!")
|
110
|
+
end
|
111
|
+
|
112
|
+
message "Finished!"
|
113
|
+
end
|
114
|
+
|
115
|
+
##
|
116
|
+
# Performs an update for RVM
|
117
|
+
def perform_update!
|
118
|
+
prompt_for_root_password!
|
119
|
+
|
120
|
+
message "Updating RVM."
|
121
|
+
message "Would you like to get the latest stable, or bleeding edge version?"
|
122
|
+
option = rvm_version?
|
123
|
+
Spinner.return :message => "Updating #{y('rvm')} to the #{y(option.nil? ? 'latest stable' : 'bleeding edge')}." do
|
124
|
+
e.execute_as_root("rvm update #{option}")
|
125
|
+
g("Done!")
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
##
|
130
|
+
# Displays a list of installed gems
|
131
|
+
def perform_list!
|
132
|
+
prompt_for_root_password!
|
133
|
+
|
134
|
+
Spinner.return :message => "Getting a list of installed Rubies.", :put => true do
|
135
|
+
e.execute_as_root("rvm list")
|
136
|
+
end
|
137
|
+
message "The ( #{y("=>")} ) arrow indicates which Ruby version is currently being used."
|
138
|
+
end
|
139
|
+
|
140
|
+
##
|
141
|
+
# Installs a Ruby version with RVM
|
142
|
+
def perform_install_ruby!
|
143
|
+
perform_list! # prompts root
|
144
|
+
|
145
|
+
message "Which Ruby version would you like to install?"
|
146
|
+
ruby_version = choose_ruby_version!
|
147
|
+
|
148
|
+
message "Would you like to make #{y(ruby_version)} your default Ruby?"
|
149
|
+
yes? ? make_default = true : make_default = false
|
150
|
+
|
151
|
+
Spinner.return :message => "Installing #{y(ruby_version)}, this may take a while.." do
|
152
|
+
e.execute_as_root("rvm install #{ruby_version}")
|
153
|
+
g("Done!")
|
154
|
+
end
|
155
|
+
|
156
|
+
if make_default
|
157
|
+
Spinner.return :message => "Setting #{y(ruby_version)} as the system wide default Ruby." do
|
158
|
+
e.execute_as_root("rvm use #{ruby_version} --default")
|
159
|
+
g("Done!")
|
160
|
+
end
|
161
|
+
|
162
|
+
ask_to_use_default_ruby_with_passenger!(ruby_version)
|
163
|
+
end
|
164
|
+
end
|
165
|
+
|
166
|
+
##
|
167
|
+
# Uninstalls a Ruby version
|
168
|
+
def perform_uninstall_ruby!
|
169
|
+
perform_list! # prompts root
|
170
|
+
|
171
|
+
message "Which Ruby version would you like to uninstall?"
|
172
|
+
ruby_version = choose_ruby_version!
|
173
|
+
|
174
|
+
Spinner.return :message => "Uninstalling #{y(ruby_version)}.." do
|
175
|
+
if not e.execute_as_root("rvm uninstall #{ruby_version}") =~ /has already been removed/
|
176
|
+
g("Ruby version #{ruby_version} has been uninstalled.")
|
177
|
+
else
|
178
|
+
r("Ruby version #{ruby_version} has already been removed.")
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
|
183
|
+
##
|
184
|
+
# Remove a Ruby version
|
185
|
+
def perform_remove_ruby!
|
186
|
+
perform_list! # prompts root
|
187
|
+
|
188
|
+
message "Which Ruby version would you like to remove?"
|
189
|
+
ruby_version = choose_ruby_version!
|
190
|
+
|
191
|
+
Spinner.return :message => "Removing #{y(ruby_version)}.." do
|
192
|
+
if not e.execute_as_root("rvm remove #{ruby_version}") =~ /is already non existent/
|
193
|
+
g("Ruby version #{ruby_version} has been removed.")
|
194
|
+
else
|
195
|
+
r("Ruby version #{ruby_version} is already non existent.")
|
196
|
+
end
|
197
|
+
end
|
198
|
+
end
|
199
|
+
|
200
|
+
##
|
201
|
+
# Change the default Ruby on the server
|
202
|
+
def perform_set_default_ruby!
|
203
|
+
perform_list! # prompts root
|
204
|
+
|
205
|
+
message "Which Ruby version would you like to make the system wide default?"
|
206
|
+
ruby_version = choose_ruby_version!
|
207
|
+
|
208
|
+
Spinner.return :message => "Changing system wide default Ruby to #{y(ruby_version)}" do
|
209
|
+
if not e.execute_as_root("rvm use #{ruby_version} --default") =~ /not installed/
|
210
|
+
@succeeded = true
|
211
|
+
g("Ruby version #{ruby_version} is now set as the system wide default.")
|
212
|
+
else
|
213
|
+
r("Could not set #{ruby_version} as default")
|
214
|
+
end
|
215
|
+
end
|
216
|
+
|
217
|
+
if @succeeded
|
218
|
+
ask_to_use_default_ruby_with_passenger!(ruby_version)
|
219
|
+
end
|
220
|
+
end
|
221
|
+
|
222
|
+
##
|
223
|
+
# Prompts the user to choose a Ruby to install
|
224
|
+
def choose_ruby_version!
|
225
|
+
choose do |menu|
|
226
|
+
menu.prompt = ''
|
227
|
+
|
228
|
+
%w[ruby-1.8.6 ruby-1.8.7 ruby-1.9.1 ruby-1.9.2].each do |mri|
|
229
|
+
menu.choice(mri)
|
230
|
+
end
|
231
|
+
|
232
|
+
%w[ree-1.8.6 ree-1.8.7].each do |ree|
|
233
|
+
menu.choice(ree)
|
234
|
+
end
|
235
|
+
end
|
236
|
+
end
|
237
|
+
|
238
|
+
##
|
239
|
+
# Prompts the user to choose a RVM version to install
|
240
|
+
def rvm_version?
|
241
|
+
choose do |menu|
|
242
|
+
menu.prompt = ''
|
243
|
+
menu.choice('latest stable') { nil }
|
244
|
+
menu.choice('bleeding edge') { '--head' }
|
245
|
+
end
|
246
|
+
end
|
247
|
+
|
248
|
+
##
|
249
|
+
# Prompts the user to select a webserver
|
250
|
+
def webserver?
|
251
|
+
choose do |menu|
|
252
|
+
menu.prompt = ''
|
253
|
+
menu.choice('NginX')
|
254
|
+
menu.choice('Apache')
|
255
|
+
end
|
256
|
+
end
|
257
|
+
|
258
|
+
##
|
259
|
+
# Asks the user if he intends to make the newly set default ruby version
|
260
|
+
# as the ruby version for the passenger driven ruby applications
|
261
|
+
def ask_to_use_default_ruby_with_passenger!(ruby_version)
|
262
|
+
message("If you want to use #{y(ruby_version)} for your Ruby applications with Phusion Passenger")
|
263
|
+
message("you must update your #{y("webserver's")} configuration file.\n\n")
|
264
|
+
message("Would you like to do this now?\n\n")
|
265
|
+
|
266
|
+
if yes?
|
267
|
+
message "Which webserver are you using?"
|
268
|
+
webserver = webserver?
|
269
|
+
|
270
|
+
message "Invoking #{y("heavenly #{webserver.downcase} update-configuration for #{e.name}")} for you..\n\n\n"
|
271
|
+
GitPusshuTen::Initializer.new(webserver.downcase, 'update-configuration', 'for', "#{e.name}")
|
272
|
+
end
|
273
|
+
end
|
274
|
+
|
275
|
+
end
|
276
|
+
end
|
277
|
+
end
|
data/lib/gitpusshuten.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'open-uri'
|
2
|
+
require 'yaml'
|
3
|
+
|
4
|
+
require 'rubygems'
|
5
|
+
require 'bundler/setup' unless @ignore_bundler
|
6
|
+
require 'active_support/inflector'
|
7
|
+
require 'net/ssh'
|
8
|
+
require 'net/scp'
|
9
|
+
require 'highline/import'
|
10
|
+
require 'rainbow'
|
11
|
+
require 'json'
|
12
|
+
|
13
|
+
Dir[File.expand_path(File.join(File.dirname(__FILE__), 'gitpusshuten/**/*'))].each do |file|
|
14
|
+
if not File.directory?(file) and not file =~ /\/modules\/.+\/hooks\.rb/
|
15
|
+
require file
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
module GitPusshuTen
|
20
|
+
VERSION = '0.0.1'
|
21
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
##
|
2
|
+
# Git Pusshu Ten - Configuration
|
3
|
+
#
|
4
|
+
# Here you specify all your environments. Most people will be
|
5
|
+
# satisfied with just 2: "staging" and "production". These are included
|
6
|
+
# in this configuration template. If you need more, feel free to add more.
|
7
|
+
#
|
8
|
+
# For more information, visit:
|
9
|
+
# http://gitpusshuten.com/documentation/getting-started/configuration/
|
10
|
+
|
11
|
+
|
12
|
+
##
|
13
|
+
# Example of configuring both a staging and production environment
|
14
|
+
pusshuten 'My Application', :staging, :production do
|
15
|
+
|
16
|
+
configure do |c|
|
17
|
+
c.user = 'gitpusshuten'
|
18
|
+
c.ip = '123.45.678.90'
|
19
|
+
# c.password = 'my-password'
|
20
|
+
# c.passphrase = 'my-ssh-passphrase'
|
21
|
+
# c.port = '22'
|
22
|
+
|
23
|
+
c.path = '/var/applications/'
|
24
|
+
end
|
25
|
+
|
26
|
+
modules do |m|
|
27
|
+
# m.add :bundler
|
28
|
+
# m.add :active_record
|
29
|
+
# m.add :passenger
|
30
|
+
# m.add :nginx
|
31
|
+
# m.add :apache
|
32
|
+
# m.add :nanoc
|
33
|
+
# m.add :rvm
|
34
|
+
# m.add :mysql
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
##
|
2
|
+
# Git Pusshu Ten - Hooks
|
3
|
+
#
|
4
|
+
# These are actions performed on the remote server
|
5
|
+
# from within the application root. Depending on what
|
6
|
+
# modules you included in the "config.rb" file, you might
|
7
|
+
# not have to create extra hooks here.
|
8
|
+
#
|
9
|
+
# For example, if you specified the :nginx module in the "config.rb"
|
10
|
+
# then you do not need to specify a nginx restart hook here since the
|
11
|
+
# module will automatically add a hook that already does that for you.
|
12
|
+
#
|
13
|
+
# For more information, visit:
|
14
|
+
# http://secretpreview.gitpusshuten.com/documentation/getting-started/deployment-hooks/
|
15
|
+
|
16
|
+
perform_on :staging, :production do
|
17
|
+
# pre "Echo out something" do
|
18
|
+
# run 'echo "Ready to Deploy"'
|
19
|
+
# end
|
20
|
+
end
|
21
|
+
|
22
|
+
perform_on :staging do
|
23
|
+
# post "Display application root directory contents" do
|
24
|
+
# run 'ls -la'
|
25
|
+
# end
|
26
|
+
|
27
|
+
# post "Restart NginX" do
|
28
|
+
# run '/etc/init.d/nginx restart'
|
29
|
+
# end
|
30
|
+
end
|
31
|
+
|
32
|
+
perform_on :production do
|
33
|
+
# post "Display application root directory contents" do
|
34
|
+
# run 'ls -la'
|
35
|
+
# end
|
36
|
+
|
37
|
+
# post "Restart NginX" do
|
38
|
+
# run '/etc/init.d/nginx restart'
|
39
|
+
# end
|
40
|
+
end
|