mina 0.3.0 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/.travis.yml +14 -5
- data/HISTORY.md +45 -1
- data/LICENSE +1 -1
- data/Makefile +29 -0
- data/Notes.md +70 -0
- data/Readme.md +1009 -0
- data/bin/mina +1 -1
- data/data/deploy.rb +13 -7
- data/lib/mina/bundler.rb +6 -1
- data/lib/mina/chruby.rb +49 -0
- data/lib/mina/default.rb +1 -0
- data/lib/mina/deploy.rb +17 -1
- data/lib/mina/deploy_helpers.rb +4 -4
- data/lib/mina/exec_helpers.rb +26 -19
- data/lib/mina/foreman.rb +5 -1
- data/lib/mina/git.rb +1 -1
- data/lib/mina/helpers.rb +22 -13
- data/lib/mina/rails.rb +6 -6
- data/lib/mina/rbenv.rb +1 -0
- data/lib/mina/rvm.rb +2 -4
- data/lib/mina/ssh_helpers.rb +2 -1
- data/lib/mina/version.rb +1 -1
- data/lib/mina/whenever.rb +6 -6
- data/mina.gemspec +2 -2
- data/spec/command_helper.rb +1 -1
- data/spec/commands/cleanup_spec.rb +16 -0
- data/spec/commands/command_spec.rb +18 -18
- data/spec/commands/custom_config_spec.rb +2 -2
- data/spec/commands/deploy_spec.rb +7 -7
- data/spec/commands/outside_project_spec.rb +7 -7
- data/spec/commands/real_deploy_spec.rb +21 -21
- data/spec/commands/verbose_spec.rb +2 -2
- data/spec/dsl/invoke_spec.rb +17 -2
- data/spec/dsl/queue_spec.rb +4 -4
- data/spec/dsl/settings_in_rake_spec.rb +6 -6
- data/spec/dsl/settings_spec.rb +16 -10
- data/spec/dsl/to_spec.rb +2 -2
- data/spec/helpers/exec_helper_spec.rb +19 -0
- data/spec/spec_helper.rb +6 -0
- data/support/Readme-footer.md +32 -0
- data/support/Readme-header.md +16 -0
- data/support/guide.md +297 -0
- data/support/index.html +53 -0
- data/support/to_md.rb +11 -0
- data/test_env/config/deploy.rb +2 -0
- metadata +96 -61
- checksums.yaml +0 -7
- data/README.md +0 -114
data/bin/mina
CHANGED
data/data/deploy.rb
CHANGED
@@ -15,6 +15,9 @@ set :deploy_to, '/var/www/foobar.com'
|
|
15
15
|
set :repository, 'git://...'
|
16
16
|
set :branch, 'master'
|
17
17
|
|
18
|
+
# For system-wide RVM install.
|
19
|
+
# set :rvm_path, '/usr/local/rvm/bin/rvm'
|
20
|
+
|
18
21
|
# Manually create these paths in shared/ (eg: shared/config/database.yml) in your server.
|
19
22
|
# They will be linked in the 'deploy:link_shared_paths' step.
|
20
23
|
set :shared_paths, ['config/database.yml', 'log']
|
@@ -22,6 +25,7 @@ set :shared_paths, ['config/database.yml', 'log']
|
|
22
25
|
# Optional settings:
|
23
26
|
# set :user, 'foobar' # Username in the server to SSH to.
|
24
27
|
# set :port, '30000' # SSH port number.
|
28
|
+
# set :forward_agent, true # SSH forward_agent.
|
25
29
|
|
26
30
|
# This task is the environment that is loaded for most commands, such as
|
27
31
|
# `mina deploy` or `mina rake`.
|
@@ -38,14 +42,14 @@ end
|
|
38
42
|
# For Rails apps, we'll make some of the shared paths that are shared between
|
39
43
|
# all releases.
|
40
44
|
task :setup => :environment do
|
41
|
-
queue! %[mkdir -p "#{deploy_to}/
|
42
|
-
queue! %[chmod g+rx,u+rwx "#{deploy_to}/
|
45
|
+
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/log"]
|
46
|
+
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/log"]
|
43
47
|
|
44
|
-
queue! %[mkdir -p "#{deploy_to}/
|
45
|
-
queue! %[chmod g+rx,u+rwx "#{deploy_to}/
|
48
|
+
queue! %[mkdir -p "#{deploy_to}/#{shared_path}/config"]
|
49
|
+
queue! %[chmod g+rx,u+rwx "#{deploy_to}/#{shared_path}/config"]
|
46
50
|
|
47
|
-
queue! %[touch "#{deploy_to}/
|
48
|
-
queue %[echo "-----> Be sure to edit '
|
51
|
+
queue! %[touch "#{deploy_to}/#{shared_path}/config/database.yml"]
|
52
|
+
queue %[echo "-----> Be sure to edit '#{deploy_to}/#{shared_path}/config/database.yml'."]
|
49
53
|
end
|
50
54
|
|
51
55
|
desc "Deploys the current version to the server."
|
@@ -58,9 +62,11 @@ task :deploy => :environment do
|
|
58
62
|
invoke :'bundle:install'
|
59
63
|
invoke :'rails:db_migrate'
|
60
64
|
invoke :'rails:assets_precompile'
|
65
|
+
invoke :'deploy:cleanup'
|
61
66
|
|
62
67
|
to :launch do
|
63
|
-
queue "
|
68
|
+
queue "mkdir -p #{deploy_to}/#{current_path}/tmp/"
|
69
|
+
queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt"
|
64
70
|
end
|
65
71
|
end
|
66
72
|
end
|
data/lib/mina/bundler.rb
CHANGED
@@ -19,10 +19,15 @@ set_default :bundle_bin, 'bundle'
|
|
19
19
|
|
20
20
|
set_default :bundle_path, './vendor/bundle'
|
21
21
|
|
22
|
+
# ### bundle_withouts
|
23
|
+
# Sets the colon-separated list of groups to be skipped from installation.
|
24
|
+
|
25
|
+
set_default :bundle_withouts, 'development:test'
|
26
|
+
|
22
27
|
# ### bundle_options
|
23
28
|
# Sets the options for installing gems via Bundler.
|
24
29
|
|
25
|
-
set_default :bundle_options, lambda { %{--without
|
30
|
+
set_default :bundle_options, lambda { %{--without #{bundle_withouts} --path "#{bundle_path}" --deployment} }
|
26
31
|
|
27
32
|
# ## Deploy tasks
|
28
33
|
# These tasks are meant to be invoked inside deploy scripts, not invoked on
|
data/lib/mina/chruby.rb
ADDED
@@ -0,0 +1,49 @@
|
|
1
|
+
# # Modules: chruby
|
2
|
+
# Adds settings and tasks for managing [chruby] installations.
|
3
|
+
#
|
4
|
+
# [chruby]: https://github.com/postmodern/chruby
|
5
|
+
#
|
6
|
+
# require 'mina/chruby'
|
7
|
+
#
|
8
|
+
# ## Common usage
|
9
|
+
#
|
10
|
+
# task :environment do
|
11
|
+
# invoke :'chruby[ruby-1.9.3-p392]'
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# task :deploy => :environment do
|
15
|
+
# ...
|
16
|
+
# end
|
17
|
+
|
18
|
+
# ## Settings
|
19
|
+
# Any and all of these settings can be overriden in your `deploy.rb`.
|
20
|
+
|
21
|
+
# ### chruby_path
|
22
|
+
# Path where *chruby* init scripts are installed.
|
23
|
+
#
|
24
|
+
set_default :chruby_path, "/etc/profile.d/chruby.sh"
|
25
|
+
|
26
|
+
# ## Tasks
|
27
|
+
|
28
|
+
# ### chruby[version]
|
29
|
+
# Switch to given Ruby version
|
30
|
+
|
31
|
+
task :chruby, :env do |t, args|
|
32
|
+
unless args[:env]
|
33
|
+
print_error "Task 'chruby' needs a Ruby version as an argument."
|
34
|
+
print_error "Example: invoke :'chruby[ruby-1.9.3-p392]'"
|
35
|
+
die
|
36
|
+
end
|
37
|
+
|
38
|
+
queue %{
|
39
|
+
echo "-----> chruby to version: '#{args[:env]}'"
|
40
|
+
|
41
|
+
if [[ ! -s "#{chruby_path}" ]]; then
|
42
|
+
echo "! chruby.sh init file not found"
|
43
|
+
exit 1
|
44
|
+
fi
|
45
|
+
|
46
|
+
source #{chruby_path}
|
47
|
+
#{echo_cmd %{chruby "#{args[:env]}"}} || exit 1
|
48
|
+
}
|
49
|
+
end
|
data/lib/mina/default.rb
CHANGED
data/lib/mina/deploy.rb
CHANGED
@@ -4,10 +4,26 @@
|
|
4
4
|
# ## Settings
|
5
5
|
# Any and all of these settings can be overriden in your `deploy.rb`.
|
6
6
|
|
7
|
+
# ### releases_path
|
8
|
+
# (default: 'releases')
|
7
9
|
set_default :releases_path, "releases"
|
10
|
+
|
11
|
+
# ### shared_path
|
12
|
+
# (default: 'shared')
|
8
13
|
set_default :shared_path, "shared"
|
14
|
+
|
15
|
+
# ### current_path
|
16
|
+
# (default: 'current_path')
|
9
17
|
set_default :current_path, "current"
|
18
|
+
|
19
|
+
# ### lock_file
|
20
|
+
# Name of the file to generate while a deploy is currently ongoing.
|
21
|
+
# (default: 'deploy.lock')
|
10
22
|
set_default :lock_file, "deploy.lock"
|
23
|
+
|
24
|
+
# ### keep_releases
|
25
|
+
# Number of releases to keep when doing the `deploy:cleanup` task.
|
26
|
+
# (default: 5)
|
11
27
|
set_default :keep_releases, 5
|
12
28
|
|
13
29
|
namespace :deploy do
|
@@ -65,7 +81,7 @@ namespace :deploy do
|
|
65
81
|
echo "-----> Cleaning up old releases (keeping #{keep_releases!})"
|
66
82
|
#{echo_cmd %{cd "#{deploy_to!}/#{releases_path!}" || exit 15}}
|
67
83
|
#{echo_cmd %{count=`ls -1d [0-9]* | sort -rn | wc -l`}}
|
68
|
-
#{echo_cmd %{remove=$((count >
|
84
|
+
#{echo_cmd %{remove=$((count > #{keep_releases} ? count - #{keep_releases} : 0))}}
|
69
85
|
#{echo_cmd %{ls -1d [0-9]* | sort -rn | tail -n $remove | xargs rm -rf {}}}
|
70
86
|
}
|
71
87
|
end
|
data/lib/mina/deploy_helpers.rb
CHANGED
@@ -15,11 +15,11 @@ module Mina
|
|
15
15
|
# ### deploy_script
|
16
16
|
# Wraps the things inside it in a deploy script.
|
17
17
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
-
#
|
18
|
+
# script = deploy_script do
|
19
|
+
# invoke :'git:checkout'
|
20
|
+
# end
|
21
21
|
#
|
22
|
-
#
|
22
|
+
# queue script
|
23
23
|
#
|
24
24
|
# Returns the deploy script as a string, ready for `queue`ing.
|
25
25
|
#
|
data/lib/mina/exec_helpers.rb
CHANGED
@@ -22,14 +22,14 @@ module Mina
|
|
22
22
|
trap("INT") { Sys.handle_sigint(coathooks += 1, pid, self) }
|
23
23
|
|
24
24
|
# __In the background,__ make stdin passthru, and stream stderr.
|
25
|
-
|
26
|
-
|
25
|
+
th_err = Sys.stream_stderr!(e) { |str| print_stderr str }
|
26
|
+
th_in = Sys.stream_stdin! { |chr| i.putc chr }
|
27
27
|
|
28
28
|
# __In the foreground,__ stream stdout to the output helper.
|
29
29
|
Sys.stream_stdout(o) { |ch| print_char ch }
|
30
30
|
|
31
|
-
|
32
|
-
|
31
|
+
th_err.join
|
32
|
+
th_in.terminate
|
33
33
|
end
|
34
34
|
|
35
35
|
status.exitstatus
|
@@ -59,31 +59,35 @@ module Mina
|
|
59
59
|
|
60
60
|
# ### Sys.stream_stderr!
|
61
61
|
# __Internal:__ Read from stderr stream `err` *[0]*, supress expected
|
62
|
-
# errors *[1]*, and yield. Returns the
|
62
|
+
# errors *[1]*, and yield. Returns the thread.
|
63
63
|
|
64
64
|
def stream_stderr!(err, &blk)
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
65
|
+
Thread.new do
|
66
|
+
begin
|
67
|
+
while str = err.gets #[0]
|
68
|
+
next if str.include? "bash: no job control in this shell" #[1]
|
69
|
+
next if str.include? "stdin is not a terminal"
|
70
|
+
|
71
|
+
yield str.strip #[2]
|
72
|
+
end
|
73
|
+
rescue Interrupt
|
73
74
|
end
|
74
75
|
end
|
75
76
|
end
|
76
77
|
|
77
78
|
# ### Sys.stream_stdin!
|
78
79
|
# __Internal:__ Read from the real stdin stream and pass it onto the given
|
79
|
-
# stdin stream `i`. Returns the
|
80
|
+
# stdin stream `i`. Returns the thread.
|
80
81
|
|
81
82
|
def stream_stdin!(&blk)
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
83
|
+
Thread.new do
|
84
|
+
begin
|
85
|
+
while (char = STDIN.getbyte rescue nil)
|
86
|
+
yield char if char
|
87
|
+
end
|
88
|
+
rescue Interrupt
|
89
|
+
# rubinius
|
90
|
+
rescue SignalException
|
87
91
|
end
|
88
92
|
end
|
89
93
|
end
|
@@ -94,6 +98,9 @@ module Mina
|
|
94
98
|
|
95
99
|
def stream_stdout(o, &blk)
|
96
100
|
while str = o.getc
|
101
|
+
# Ruby 1.8.7 fix
|
102
|
+
str = str.chr if str.is_a? Fixnum
|
103
|
+
|
97
104
|
yield str
|
98
105
|
end
|
99
106
|
end
|
data/lib/mina/foreman.rb
CHANGED
@@ -40,11 +40,15 @@
|
|
40
40
|
set_default :foreman_app, lambda { application }
|
41
41
|
set_default :foreman_user, lambda { user }
|
42
42
|
set_default :foreman_log, lambda { "#{deploy_to!}/#{shared_path}/log" }
|
43
|
+
set_default :foreman_sudo, true
|
44
|
+
set_default :foreman_format, 'upstart'
|
45
|
+
set_default :foreman_location, '/etc/init'
|
43
46
|
|
44
47
|
namespace :foreman do
|
45
48
|
desc 'Export the Procfile to Ubuntu upstart scripts'
|
46
49
|
task :export do
|
47
|
-
|
50
|
+
sudo_cmd = "sudo" if foreman_sudo
|
51
|
+
export_cmd = "#{sudo_cmd} bundle exec foreman export #{foreman_format} #{foreman_location} -a #{foreman_app} -u #{foreman_user} -d #{deploy_to!}/#{current_path!} -l #{foreman_log}"
|
48
52
|
|
49
53
|
queue %{
|
50
54
|
echo "-----> Exporting foreman procfile for #{foreman_app}"
|
data/lib/mina/git.rb
CHANGED
@@ -52,7 +52,7 @@ namespace :git do
|
|
52
52
|
status = %[
|
53
53
|
echo "-----> Using this git commit" &&
|
54
54
|
echo &&
|
55
|
-
#{echo_cmd %[git --no-pager log --format=
|
55
|
+
#{echo_cmd %[git --no-pager log --format='%aN (%h):%n> %s' -n 1]} &&
|
56
56
|
#{echo_cmd %[rm -rf .git]} &&
|
57
57
|
echo
|
58
58
|
]
|
data/lib/mina/helpers.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
# # Helpers
|
1
|
+
# # Helpers
|
2
2
|
|
3
3
|
module Mina
|
4
4
|
module Helpers
|
@@ -17,7 +17,10 @@ module Mina
|
|
17
17
|
|
18
18
|
def invoke(task, options = {})
|
19
19
|
Rake.application.invoke_task task
|
20
|
-
|
20
|
+
if options[:reenable]
|
21
|
+
name = Rake.application.parse_task_string(task).first
|
22
|
+
Rake::Task[name].reenable
|
23
|
+
end
|
21
24
|
end
|
22
25
|
|
23
26
|
# ### erb
|
@@ -64,7 +67,7 @@ module Mina
|
|
64
67
|
# end
|
65
68
|
#
|
66
69
|
# # Output:
|
67
|
-
# # Elapsed time: 2.
|
70
|
+
# # Elapsed time: 2.00 seconds
|
68
71
|
|
69
72
|
def report_time(&blk)
|
70
73
|
time, output = measure &blk
|
@@ -73,13 +76,13 @@ module Mina
|
|
73
76
|
end
|
74
77
|
|
75
78
|
# ### measure
|
76
|
-
# Measures the time (in
|
79
|
+
# Measures the time (in seconds) a block takes.
|
77
80
|
# Returns a [time, output] tuple.
|
78
81
|
|
79
82
|
def measure(&blk)
|
80
83
|
t = Time.now
|
81
84
|
output = yield
|
82
|
-
[
|
85
|
+
[Time.now - t, output]
|
83
86
|
end
|
84
87
|
|
85
88
|
# ### mina_cleanup
|
@@ -119,9 +122,9 @@ module Mina
|
|
119
122
|
# ## Queueing
|
120
123
|
|
121
124
|
# ### queue
|
122
|
-
# Queues code to be
|
125
|
+
# Queues code to be run.
|
123
126
|
#
|
124
|
-
# This queues code to be
|
127
|
+
# This queues code to be run to the current code bucket (defaults to `:default`).
|
125
128
|
# To get the things that have been queued, use commands[:default]
|
126
129
|
#
|
127
130
|
# Returns nothing.
|
@@ -217,17 +220,18 @@ module Mina
|
|
217
220
|
#
|
218
221
|
# Returns nothing.
|
219
222
|
#
|
220
|
-
#
|
221
|
-
#
|
222
|
-
#
|
223
|
+
# in_directory './webapp' do
|
224
|
+
# queue "./reload"
|
225
|
+
# end
|
223
226
|
#
|
224
|
-
#
|
227
|
+
# commands.should == ['cd ./webapp && (./reload && true)']
|
225
228
|
|
226
229
|
def in_directory(path, &blk)
|
227
230
|
isolated_commands = isolate { yield; commands }
|
228
231
|
isolated_commands.each { |cmd| queue "(cd #{path} && (#{cmd}))" }
|
229
232
|
end
|
230
233
|
|
234
|
+
# ### to
|
231
235
|
# Defines instructions on how to do a certain thing.
|
232
236
|
# This makes the commands that are `queue`d go into a different bucket in commands.
|
233
237
|
#
|
@@ -310,13 +314,17 @@ module Mina
|
|
310
314
|
# Checks if Rake was invoked with --verbose.
|
311
315
|
#
|
312
316
|
# Returns true or false.
|
317
|
+
#
|
318
|
+
# if verbose_mode?
|
319
|
+
# queue %[echo "-----> Starting a new process"]
|
320
|
+
# end
|
313
321
|
|
314
322
|
def verbose_mode?
|
315
323
|
if Rake.respond_to?(:verbose)
|
316
|
-
|
324
|
+
#- Rake 0.9.x
|
317
325
|
Rake.verbose == true
|
318
326
|
else
|
319
|
-
|
327
|
+
#- Rake 0.8.x
|
320
328
|
RakeFileUtils.verbose_flag != :default
|
321
329
|
end
|
322
330
|
end
|
@@ -369,6 +377,7 @@ module Mina
|
|
369
377
|
|
370
378
|
# ### capture
|
371
379
|
# Returns the output of command via SSH.
|
380
|
+
|
372
381
|
def capture(cmd, options={})
|
373
382
|
ssh cmd, options.merge(:return => true)
|
374
383
|
end
|
data/lib/mina/rails.rb
CHANGED
@@ -12,7 +12,7 @@ require 'mina/bundler'
|
|
12
12
|
# Sets the Rails environment for `rake` and `rails` commands.
|
13
13
|
#
|
14
14
|
# Note that changing this will NOT change the environment that your application
|
15
|
-
# is
|
15
|
+
# is run in.
|
16
16
|
|
17
17
|
set_default :rails_env, 'production'
|
18
18
|
|
@@ -118,7 +118,7 @@ make_run_task[:rake, 'db:migrate']
|
|
118
118
|
# ### console
|
119
119
|
# Opens the Ruby console for the currently-deployed version.
|
120
120
|
#
|
121
|
-
#
|
121
|
+
# $ mina console
|
122
122
|
|
123
123
|
desc "Starts an interactive console."
|
124
124
|
task :console do
|
@@ -141,10 +141,10 @@ namespace :rails do
|
|
141
141
|
'Migrating database'
|
142
142
|
|
143
143
|
queue check_for_changes_script \
|
144
|
-
:check => 'db/
|
145
|
-
:at => ['db/
|
144
|
+
:check => 'db/migrate/',
|
145
|
+
:at => ['db/migrate/'],
|
146
146
|
:skip => %[
|
147
|
-
echo "-----> DB
|
147
|
+
echo "-----> DB migrations unchanged; skipping DB migration"
|
148
148
|
],
|
149
149
|
:changed => %[
|
150
150
|
echo "-----> #{message}"
|
@@ -190,7 +190,7 @@ namespace :rails do
|
|
190
190
|
:at => [*asset_paths],
|
191
191
|
:skip => %[
|
192
192
|
echo "-----> Skipping asset precompilation"
|
193
|
-
#{echo_cmd %[cp -R "#{deploy_to}/#{current_path}/public/assets" "./public
|
193
|
+
#{echo_cmd %[cp -R "#{deploy_to}/#{current_path}/public/assets" "./public"]}
|
194
194
|
],
|
195
195
|
:changed => %[
|
196
196
|
echo "-----> #{message}"
|
data/lib/mina/rbenv.rb
CHANGED
data/lib/mina/rvm.rb
CHANGED
@@ -57,9 +57,8 @@ task :'rvm:use', :env do |t, args|
|
|
57
57
|
}
|
58
58
|
end
|
59
59
|
|
60
|
-
|
61
60
|
# ### rvm:wrapper[]
|
62
|
-
# Creates a rvm wrapper for a given executable
|
61
|
+
# Creates a rvm wrapper for a given executable.
|
63
62
|
#
|
64
63
|
# This is usually placed in the `:setup` task.
|
65
64
|
#
|
@@ -71,7 +70,7 @@ end
|
|
71
70
|
task :'rvm:wrapper', :env, :name, :bin do |t,args|
|
72
71
|
unless args[:env] && args[:name] && args[:bin]
|
73
72
|
print_error "Task 'rvm:wrapper' needs an RVM environment name, an wrapper name and the binary name as arguments"
|
74
|
-
print_error "Example: invoke :'rvm:
|
73
|
+
print_error "Example: invoke :'rvm:wrapper[ruby-1.9.2@myapp,myapp,unicorn_rails]'"
|
75
74
|
die
|
76
75
|
end
|
77
76
|
|
@@ -86,5 +85,4 @@ task :'rvm:wrapper', :env, :name, :bin do |t,args|
|
|
86
85
|
source #{rvm_path}
|
87
86
|
#{echo_cmd %{rvm wrapper #{args[:env]} #{args[:name]} #{args[:bin]} }} || exit 1
|
88
87
|
}
|
89
|
-
|
90
88
|
end
|
data/lib/mina/ssh_helpers.rb
CHANGED
@@ -83,7 +83,8 @@ module Mina
|
|
83
83
|
# `term_mode`. Called by `ssh`.
|
84
84
|
|
85
85
|
def invoke(script, this)
|
86
|
-
|
86
|
+
# Ruby 1.8.7 doesn't let you have empty symbols
|
87
|
+
term_mode = :"#{this.settings.term_mode}" if this.settings.term_mode
|
87
88
|
code = "#{this.ssh_command} -- #{script}"
|
88
89
|
|
89
90
|
# Certain environments can't do :pretty mode.
|
data/lib/mina/version.rb
CHANGED
data/lib/mina/whenever.rb
CHANGED
@@ -6,22 +6,22 @@ namespace :whenever do
|
|
6
6
|
desc "Clear crontab"
|
7
7
|
task :clear do
|
8
8
|
queue %{
|
9
|
-
echo "-----> Clear crontab for #{domain}"
|
10
|
-
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ;
|
9
|
+
echo "-----> Clear crontab for #{domain}_#{rails_env}"
|
10
|
+
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ; #{bundle_bin} exec whenever --clear-crontab #{domain}_#{rails_env} --set 'environment=#{rails_env}&path=#{deploy_to!}/#{current_path!}']}
|
11
11
|
}
|
12
12
|
end
|
13
13
|
desc "Update crontab"
|
14
14
|
task :update do
|
15
15
|
queue %{
|
16
|
-
echo "-----> Update crontab for #{domain}"
|
17
|
-
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ;
|
16
|
+
echo "-----> Update crontab for #{domain}_#{rails_env}"
|
17
|
+
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ; #{bundle_bin} exec whenever --update-crontab #{domain}_#{rails_env} --set 'environment=#{rails_env}&path=#{deploy_to!}/#{current_path!}']}
|
18
18
|
}
|
19
19
|
end
|
20
20
|
desc "Write crontab"
|
21
21
|
task :write do
|
22
22
|
queue %{
|
23
|
-
echo "-----> Update crontab for #{domain}"
|
24
|
-
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ;
|
23
|
+
echo "-----> Update crontab for #{domain}_#{rails_env}"
|
24
|
+
#{echo_cmd %[cd #{deploy_to!}/#{current_path!} ; #{bundle_bin} exec whenever --write-crontab #{domain}_#{rails_env} --set 'environment=#{rails_env}&path=#{deploy_to!}/#{current_path!}']}
|
25
25
|
}
|
26
26
|
end
|
27
27
|
end
|
data/mina.gemspec
CHANGED
@@ -12,6 +12,6 @@ Gem::Specification.new do |s|
|
|
12
12
|
s.executables = Dir["bin/*"].map { |f| File.basename(f) }
|
13
13
|
|
14
14
|
s.add_dependency "rake"
|
15
|
-
s.add_dependency "open4"
|
16
|
-
s.add_development_dependency "rspec"
|
15
|
+
s.add_dependency "open4", "~> 1.3.4"
|
16
|
+
s.add_development_dependency "rspec", "~> 3.0.0"
|
17
17
|
end
|
data/spec/command_helper.rb
CHANGED
@@ -0,0 +1,16 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'command_helper'
|
3
|
+
|
4
|
+
describe "Invoking the 'mina deploy:cleanup' command" do
|
5
|
+
before :each do
|
6
|
+
Dir.chdir root('test_env')
|
7
|
+
end
|
8
|
+
|
9
|
+
it "should cleanup old deployments", :ssh => true do
|
10
|
+
3.times { mina 'deploy' }
|
11
|
+
|
12
|
+
mina 'deploy:cleanup'
|
13
|
+
|
14
|
+
expect(Dir["deploy/releases/*"].length).to eq(2)
|
15
|
+
end
|
16
|
+
end
|
@@ -8,24 +8,24 @@ describe "Invoking the 'mina' command in a project" do
|
|
8
8
|
|
9
9
|
it "should think it's 'mina', not 'rake' (1)" do
|
10
10
|
run_command 'pinkledills'
|
11
|
-
exitstatus.
|
12
|
-
stderr.
|
11
|
+
expect(exitstatus).not_to eq(0)
|
12
|
+
expect(stderr).to include 'mina aborted'
|
13
13
|
end
|
14
14
|
|
15
15
|
it "should think it's 'mina', not 'rake' (1)" do
|
16
16
|
mina '-T'
|
17
|
-
stdout.
|
18
|
-
stdout.
|
17
|
+
expect(stdout).to include 'mina help'
|
18
|
+
expect(stdout).to include 'mina git:clone'
|
19
19
|
end
|
20
20
|
|
21
21
|
it 'with --version should print the version' do
|
22
22
|
mina '--version'
|
23
|
-
stdout.
|
23
|
+
expect(stdout).to include Mina.version
|
24
24
|
end
|
25
25
|
|
26
26
|
it 'with -V should print the version' do
|
27
27
|
mina '-V'
|
28
|
-
stdout.
|
28
|
+
expect(stdout).to include Mina.version
|
29
29
|
end
|
30
30
|
|
31
31
|
describe 'without arguments' do
|
@@ -35,37 +35,37 @@ describe "Invoking the 'mina' command in a project" do
|
|
35
35
|
|
36
36
|
it 'should print standard help tasks' do
|
37
37
|
mina
|
38
|
-
stdout.
|
39
|
-
stdout.
|
40
|
-
stdout.
|
38
|
+
expect(stdout).to include 'mina help'
|
39
|
+
expect(stdout).to include 'mina init'
|
40
|
+
expect(stdout).to include 'mina tasks'
|
41
41
|
end
|
42
42
|
|
43
43
|
it 'should print project-specific tasks' do
|
44
44
|
mina
|
45
|
-
stdout.
|
46
|
-
stdout.
|
47
|
-
stdout.
|
45
|
+
expect(stdout).to include 'mina deploy'
|
46
|
+
expect(stdout).to include 'mina restart'
|
47
|
+
expect(stdout).to include 'mina setup'
|
48
48
|
end
|
49
49
|
|
50
50
|
it "should be the same as running 'help'" do
|
51
51
|
previous_out = stdout
|
52
52
|
|
53
53
|
mina 'help'
|
54
|
-
stdout.
|
54
|
+
expect(stdout).to eq(previous_out)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
58
|
it "with 'mina -f' on a non-existing file should fail" do
|
59
59
|
run_command '-f', 'foobar'
|
60
|
-
stderr.
|
61
|
-
stderr.
|
60
|
+
expect(stderr).to include 'mina aborted'
|
61
|
+
expect(stderr).to include 'No Rakefile found'
|
62
62
|
end
|
63
63
|
|
64
64
|
it "with 'mina tasks' should print tasks" do
|
65
65
|
mina 'tasks'
|
66
66
|
|
67
|
-
stdout.
|
68
|
-
stdout.
|
69
|
-
stdout.
|
67
|
+
expect(stdout).to include('bundle:install')
|
68
|
+
expect(stdout).to include('Install gem dependencies using Bundler')
|
69
|
+
expect(stdout).to include('passenger:restart')
|
70
70
|
end
|
71
71
|
end
|
@@ -9,12 +9,12 @@ describe "Invoking the 'mina' command in a project without a deploy.rb" do
|
|
9
9
|
|
10
10
|
it 'should fail' do
|
11
11
|
run_command 'deploy', '--simulate'
|
12
|
-
exitstatus.
|
12
|
+
expect(exitstatus).to be > 0
|
13
13
|
end
|
14
14
|
|
15
15
|
it 'should pass if you provide a new rakefile' do
|
16
16
|
mina 'deploy', '--simulate', '-f', 'custom_deploy.rb'
|
17
|
-
stdout.
|
17
|
+
expect(stdout).to include 'Creating a temporary build path'
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|