engineyard-serverside 2.5.0 → 2.6.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/engineyard-serverside/cli.rb +2 -2
- data/lib/engineyard-serverside/configuration.rb +9 -4
- data/lib/engineyard-serverside/deploy.rb +61 -7
- data/lib/engineyard-serverside/paths.rb +9 -4
- data/lib/engineyard-serverside/rails_assets.rb +19 -10
- data/lib/engineyard-serverside/rails_assets/strategy.rb +1 -1
- data/lib/engineyard-serverside/shell.rb +21 -17
- data/lib/engineyard-serverside/shell/formatter.rb +37 -14
- data/lib/engineyard-serverside/version.rb +1 -1
- data/spec/archive_deploy_spec.rb +1 -1
- data/spec/bundler_deploy_spec.rb +3 -4
- data/spec/configuration_spec.rb +1 -0
- data/spec/deploy_hook_spec.rb +25 -25
- data/spec/fixtures/repos/assets_enabled_all/config/ey.yml +1 -0
- data/spec/fixtures/repos/assets_enabled_all/script/assets +5 -0
- data/spec/fixtures/repos/assets_enabled_all/tmp/obstruction +1 -0
- data/spec/fixtures/repos/assets_enabled_in_ey_yml/Rakefile +1 -0
- data/spec/lockfile_parser_spec.rb +6 -6
- data/spec/maintenance_spec.rb +6 -6
- data/spec/platform_configure_spec.rb +61 -0
- data/spec/rails31_deploy_spec.rb +17 -3
- data/spec/shell_spec.rb +7 -8
- metadata +9 -5
- data/spec/fixtures/repos/assets_enabled_all/Rakefile +0 -6
@@ -181,10 +181,10 @@ module EY
|
|
181
181
|
begin
|
182
182
|
yield servers, config, shell
|
183
183
|
rescue EY::Serverside::RemoteFailure => e
|
184
|
-
shell.
|
184
|
+
shell.fatal e.message
|
185
185
|
raise
|
186
186
|
rescue Exception => e
|
187
|
-
shell.
|
187
|
+
shell.fatal "#{e.backtrace[0]}: #{e.message} (#{e.class})"
|
188
188
|
raise
|
189
189
|
end
|
190
190
|
end
|
@@ -77,6 +77,7 @@ module EY
|
|
77
77
|
|
78
78
|
def_option :precompile_assets, 'detect'
|
79
79
|
def_option :precompile_assets_task, 'assets:precompile'
|
80
|
+
def_option(:precompile_assets_command) { "rake #{precompile_assets_task} RAILS_GROUPS=assets" }
|
80
81
|
def_option :asset_strategy, 'shifting'
|
81
82
|
def_option :asset_dependencies, %w[app/assets lib/assets vendor/assets Gemfile.lock config/routes.rb config/application.rb]
|
82
83
|
def_option :asset_roles, [:app_master, :app, :solo]
|
@@ -101,8 +102,6 @@ module EY
|
|
101
102
|
def_option :services_check_command, "which /usr/local/ey_resin/ruby/bin/ey-services-setup >/dev/null 2>&1"
|
102
103
|
def_option(:services_setup_command) { "/usr/local/ey_resin/ruby/bin/ey-services-setup #{app}" }
|
103
104
|
|
104
|
-
def_option :restart_groups, 1
|
105
|
-
|
106
105
|
DEFAULT_KEEP_RELEASES = 3
|
107
106
|
|
108
107
|
def_option :keep_releases, DEFAULT_KEEP_RELEASES
|
@@ -114,14 +113,20 @@ module EY
|
|
114
113
|
def_boolean_option :precompile_unchanged_assets, false
|
115
114
|
def_boolean_option :ignore_database_adapter_warning, false
|
116
115
|
def_boolean_option :ignore_gemfile_lock_warning, false
|
116
|
+
def_boolean_option :shared_tmp, true
|
117
117
|
def_boolean_option :eydeploy_rb, true
|
118
118
|
def_boolean_option :maintenance_on_migrate, true
|
119
119
|
def_boolean_option(:maintenance_on_restart) { required_downtime_stack? }
|
120
120
|
|
121
|
+
# experimental, need feedback from people using it, feature implementation subject to change or removal
|
122
|
+
def_option :restart_groups, 1
|
123
|
+
def_boolean_option :experimental_sync_assets, false
|
124
|
+
|
121
125
|
alias app_name app
|
122
126
|
alias environment framework_env # legacy because it would be nice to have less confusion around "environment"
|
123
127
|
alias migration_command migrate
|
124
128
|
alias repo git
|
129
|
+
alias ref branch # ref is used for input to cli, so it should work here.
|
125
130
|
|
126
131
|
def initialize(options)
|
127
132
|
opts = string_keys(options)
|
@@ -296,8 +301,8 @@ module EY
|
|
296
301
|
# The nodatabase.yml file is dropped by server configuration when there is
|
297
302
|
# no database in the cluster.
|
298
303
|
def has_database?
|
299
|
-
paths.shared_config
|
300
|
-
!paths.shared_config
|
304
|
+
paths.path(:shared_config, 'database.yml').exist? &&
|
305
|
+
!paths.path(:shared_config, 'nodatabase.yml').exist?
|
301
306
|
end
|
302
307
|
|
303
308
|
def check_database_adapter?
|
@@ -32,9 +32,10 @@ module EY
|
|
32
32
|
create_revision_file
|
33
33
|
run_with_callbacks(:bundle)
|
34
34
|
setup_services
|
35
|
+
configure_platform
|
35
36
|
symlink_configs
|
36
37
|
setup_sqlite3_if_necessary
|
37
|
-
run_with_callbacks(:compile_assets)
|
38
|
+
run_with_callbacks(:compile_assets)
|
38
39
|
enable_maintenance_page
|
39
40
|
run_with_callbacks(:migrate)
|
40
41
|
callback(:before_symlink)
|
@@ -341,25 +342,78 @@ YML
|
|
341
342
|
end
|
342
343
|
end
|
343
344
|
|
345
|
+
def configure_platform
|
346
|
+
run configure_command
|
347
|
+
end
|
348
|
+
|
349
|
+
def configure_command
|
350
|
+
ENV['EY_SERVERSIDE_CONFIGURE_COMMAND'] || begin
|
351
|
+
configure_script = "/engineyard/bin/app_#{config.app}_configure"
|
352
|
+
return <<-CONFIGURE
|
353
|
+
if [ -x "#{configure_script}" ] || which "#{configure_script}" >/dev/null 2>&1; then
|
354
|
+
EY_DEPLOY_APP='#{config.app}' EY_DEPLOY_RELEASE_PATH='#{paths.active_release.to_s}' #{configure_script};
|
355
|
+
fi
|
356
|
+
CONFIGURE
|
357
|
+
end
|
358
|
+
end
|
359
|
+
|
344
360
|
def symlink_configs
|
345
361
|
shell.status "Preparing shared resources for release."
|
362
|
+
|
363
|
+
shell.substatus "Set group write permissions"
|
364
|
+
run "chmod -R g+w #{paths.active_release}"
|
365
|
+
|
366
|
+
setup_shared_tmp
|
367
|
+
|
346
368
|
symlink_tasks.each do |what, cmd|
|
347
369
|
shell.substatus what
|
348
370
|
run(cmd)
|
349
371
|
end
|
350
372
|
end
|
351
373
|
|
374
|
+
def setup_shared_tmp
|
375
|
+
if config.shared_tmp?
|
376
|
+
shell.substatus "Creating and symlinking shared tmp directory if empty"
|
377
|
+
run <<-SETUP_TMP
|
378
|
+
if [ -e "#{paths.active_tmp}" ] && [ ! "$(ls #{paths.active_tmp} 2>&1)" ]; then
|
379
|
+
rm -rf #{paths.active_tmp};
|
380
|
+
fi;
|
381
|
+
if [ ! -e "#{paths.active_tmp}" ]; then
|
382
|
+
mkdir -p #{paths.shared_tmp} && ln -nfs #{paths.shared_tmp} #{paths.active_tmp};
|
383
|
+
fi
|
384
|
+
SETUP_TMP
|
385
|
+
|
386
|
+
unless paths.active_tmp.symlink?
|
387
|
+
note = "This application's repository has tmp/ with contents committed.\n"
|
388
|
+
if config.precompile_assets?
|
389
|
+
note << "Asset precompile speed can be increased by sharing tmp across releases.\n"
|
390
|
+
end
|
391
|
+
note << <<-NOTICE
|
392
|
+
Enable shared tmp with the follow git command (if applicable):
|
393
|
+
|
394
|
+
$ git rm -r tmp/* && echo '*' > tmp/.gitignore
|
395
|
+
|
396
|
+
Or, disable this feature via ey.yml configuration as follows:
|
397
|
+
|
398
|
+
defaults:
|
399
|
+
shared_tmp: false
|
400
|
+
NOTICE
|
401
|
+
shell.notice note
|
402
|
+
end
|
403
|
+
else
|
404
|
+
shell.substatus "Prepare shared pids directory"
|
405
|
+
run "rm -rf #{paths.active_tmp}/pids"
|
406
|
+
end
|
407
|
+
end
|
408
|
+
|
352
409
|
def symlink_tasks
|
353
410
|
[
|
354
|
-
["
|
411
|
+
["Symlink shared pids directory", "ln -nfs #{paths.shared}/pids #{paths.active_tmp}/pids"],
|
412
|
+
["Symlink shared log directory", "rm -rf #{paths.active_log} && ln -nfs #{paths.shared_log} #{paths.active_log}"],
|
355
413
|
["Remove public/system if symlinked", "if [ -L \"#{paths.public_system}\" ]; then rm -rf #{paths.public_system}; fi"],
|
356
|
-
["Remove symlinked shared directories", "rm -rf #{paths.active_log} #{paths.active_release}/tmp/pids"],
|
357
|
-
["Create tmp directory", "mkdir -p #{paths.active_release}/tmp"],
|
358
414
|
["Create public directory", "mkdir -p #{paths.public}"],
|
359
|
-
["Create config directory", "mkdir -p #{paths.active_release_config}"],
|
360
|
-
["Symlink shared log directory", "ln -nfs #{paths.shared_log} #{paths.active_log}"],
|
361
415
|
["Symlink public system directory", "if [ ! -e \"#{paths.public_system}\" ]; then ln -ns #{paths.shared_system} #{paths.public_system}; fi"],
|
362
|
-
["
|
416
|
+
["Create config directory", "mkdir -p #{paths.active_release_config}"],
|
363
417
|
["Symlink other shared config files", "find #{paths.shared_config} -maxdepth 1 -type f -not -name 'database.yml' -exec ln -s {} #{paths.active_release_config} \\;"],
|
364
418
|
["Symlink database.yml if needed", "if [ -f \"#{paths.shared_config}/database.yml\" ]; then ln -nfs #{paths.shared_config}/database.yml #{paths.active_release_config}/database.yml; fi"],
|
365
419
|
["Symlink newrelic.yml if needed", "if [ -f \"#{paths.shared_config}/newrelic.yml\" ]; then ln -nfs #{paths.shared_config}/newrelic.yml #{paths.active_release_config}/newrelic.yml; fi"],
|
@@ -51,8 +51,10 @@ module EY
|
|
51
51
|
end
|
52
52
|
|
53
53
|
# Load a path given a root and more parts
|
54
|
+
# Pathname#join is extremely inefficient.
|
55
|
+
# This implementation uses much less memory and way fewer objects.
|
54
56
|
def path(root, *parts)
|
55
|
-
send(root).
|
57
|
+
Pathname.new(File.join(send(root).to_s, *parts))
|
56
58
|
end
|
57
59
|
|
58
60
|
attr_reader :home, :deploy_root
|
@@ -64,6 +66,7 @@ module EY
|
|
64
66
|
def_path :releases_failed, [:deploy_root, 'releases_failed']
|
65
67
|
def_path :shared, [:deploy_root, 'shared']
|
66
68
|
def_path :shared_log, [:shared, 'log']
|
69
|
+
def_path :shared_tmp, [:shared, 'tmp']
|
67
70
|
def_path :shared_config, [:shared, 'config']
|
68
71
|
def_path :shared_system, [:shared, 'system']
|
69
72
|
def_path :default_repository_cache, [:shared, 'cached-copy']
|
@@ -79,6 +82,7 @@ module EY
|
|
79
82
|
def_path :gemfile, [:active_release, 'Gemfile']
|
80
83
|
def_path :gemfile_lock, [:active_release, 'Gemfile.lock']
|
81
84
|
def_path :public, [:active_release, 'public']
|
85
|
+
def_path :deploy_hooks, [:active_release, 'deploy']
|
82
86
|
def_path :public_assets, [:public, 'assets']
|
83
87
|
def_path :public_system, [:public, 'system']
|
84
88
|
def_path :package_json, [:active_release, 'package.json']
|
@@ -86,6 +90,7 @@ module EY
|
|
86
90
|
def_path :composer_lock, [:active_release, 'composer.lock']
|
87
91
|
def_path :active_release_config, [:active_release, 'config']
|
88
92
|
def_path :active_log, [:active_release, 'log']
|
93
|
+
def_path :active_tmp, [:active_release, 'tmp']
|
89
94
|
|
90
95
|
def initialize(opts)
|
91
96
|
@opts = opts
|
@@ -118,11 +123,11 @@ module EY
|
|
118
123
|
end
|
119
124
|
|
120
125
|
def deploy_hook(hook_name)
|
121
|
-
path(:
|
126
|
+
path(:deploy_hooks, "#{hook_name}.rb")
|
122
127
|
end
|
123
128
|
|
124
129
|
def executable_deploy_hook(hook_name)
|
125
|
-
path(:
|
130
|
+
path(:deploy_hooks, "#{hook_name}")
|
126
131
|
end
|
127
132
|
|
128
133
|
def repository_cache
|
@@ -130,7 +135,7 @@ module EY
|
|
130
135
|
end
|
131
136
|
|
132
137
|
def all_releases
|
133
|
-
@all_releases ||= Pathname.glob(releases
|
138
|
+
@all_releases ||= Pathname.glob(path(:releases,'*')).sort
|
134
139
|
end
|
135
140
|
|
136
141
|
# deploy_root/releases/<release before argument release path>
|
@@ -19,7 +19,8 @@ module EY
|
|
19
19
|
def_delegators :config,
|
20
20
|
:paths, :asset_dependencies, :asset_roles,
|
21
21
|
:framework_envs, :precompile_assets?, :skip_precompile_assets?,
|
22
|
-
:precompile_unchanged_assets?, :precompile_assets_task
|
22
|
+
:precompile_unchanged_assets?, :precompile_assets_task,
|
23
|
+
:precompile_assets_command
|
23
24
|
|
24
25
|
def detect_and_compile
|
25
26
|
runner.roles asset_roles do
|
@@ -43,7 +44,7 @@ module EY
|
|
43
44
|
elsif paths.public_assets.exist?
|
44
45
|
shell.status "Skipping asset precompilation. ('public/assets' directory already exists.)"
|
45
46
|
else
|
46
|
-
shell.status "Precompiling assets. ('
|
47
|
+
shell.status "Precompiling assets. ('app/assets' exists, 'public/assets' not found, not disabled in config.)"
|
47
48
|
precompile_detected_assets
|
48
49
|
end
|
49
50
|
end
|
@@ -52,8 +53,20 @@ module EY
|
|
52
53
|
def run_precompile_assets_task
|
53
54
|
asset_strategy.prepare do
|
54
55
|
cd = "cd #{paths.active_release}"
|
55
|
-
task = "PATH=#{paths.binstubs}:$PATH #{framework_envs}
|
56
|
-
|
56
|
+
task = "PATH=#{paths.binstubs}:$PATH #{framework_envs} #{precompile_assets_command}"
|
57
|
+
|
58
|
+
# This is a hack right now, but I haven't iterated over it enough for a good solution yet.
|
59
|
+
if config.experimental_sync_assets?
|
60
|
+
shell.status "Compiling assets once on localhost (experimental_sync_assets: true)"
|
61
|
+
shell.logged_system("sh -l -c '#{cd} && #{task}'")
|
62
|
+
|
63
|
+
shell.status "Syncing assets to other remote servers (experimental_sync_assets: true)"
|
64
|
+
runner.servers.remote.run_for_each do |server|
|
65
|
+
server.sync_directory_command(paths.public_assets)
|
66
|
+
end
|
67
|
+
else
|
68
|
+
runner.run "#{cd} && #{task}"
|
69
|
+
end
|
57
70
|
end
|
58
71
|
end
|
59
72
|
|
@@ -139,15 +152,11 @@ ACTION REQUIRED: Add precompile_assets option to ey.yml.
|
|
139
152
|
end
|
140
153
|
|
141
154
|
def application_rb_path
|
142
|
-
paths.active_release
|
143
|
-
end
|
144
|
-
|
145
|
-
def app_assets
|
146
|
-
File.join('app','assets')
|
155
|
+
paths.path(:active_release,'config','application.rb')
|
147
156
|
end
|
148
157
|
|
149
158
|
def app_assets_path
|
150
|
-
paths.active_release
|
159
|
+
paths.path(:active_release,'app','assets')
|
151
160
|
end
|
152
161
|
|
153
162
|
def asset_strategy
|
@@ -48,7 +48,7 @@ module EY
|
|
48
48
|
# deploy_root/current/public/last_assets/assets -> deploy_root/releases/<prev>/public/assets
|
49
49
|
def prepare
|
50
50
|
if previous_assets_path
|
51
|
-
last = paths.public
|
51
|
+
last = paths.path(:public,'last_assets')
|
52
52
|
run "mkdir -p #{last} && ln -nfs #{previous_assets_path} #{last.join('assets')}"
|
53
53
|
end
|
54
54
|
|
@@ -1,19 +1,27 @@
|
|
1
1
|
require 'logger'
|
2
2
|
require 'pathname'
|
3
|
-
require 'open3'
|
4
3
|
require 'engineyard-serverside/shell/formatter'
|
5
4
|
require 'engineyard-serverside/shell/yieldio'
|
6
5
|
|
7
6
|
module EY
|
8
7
|
module Serverside
|
9
8
|
class Shell
|
10
|
-
|
9
|
+
STATUS_PREFIX = '~> '.freeze
|
10
|
+
SUBSTATUS_PREFIX = ' ~ '.freeze
|
11
|
+
IMPORTANT_PREFIX = '!> '.freeze
|
12
|
+
CMD_PREFIX = ' $ '.freeze
|
13
|
+
CMD_CONTINUE = ' > '.freeze
|
14
|
+
CMD_INDENT = ' '.freeze
|
15
|
+
BOL = /^/.freeze
|
16
|
+
|
17
|
+
include Logger::Severity
|
18
|
+
|
19
|
+
attr_reader :logger, :start_time
|
11
20
|
|
12
21
|
def initialize(options)
|
13
|
-
@start_time = options[:start_time]
|
22
|
+
@start_time = options[:start_time] || Time.now
|
14
23
|
@verbose = options[:verbose]
|
15
24
|
|
16
|
-
|
17
25
|
@stdout = options[:stdout] || $stdout
|
18
26
|
@stderr = options[:stderr] || $stderr
|
19
27
|
|
@@ -28,39 +36,35 @@ module EY
|
|
28
36
|
@verbose
|
29
37
|
end
|
30
38
|
|
31
|
-
def start_time
|
32
|
-
@start_time ||= Time.now
|
33
|
-
end
|
34
|
-
|
35
39
|
# a nice info outputter that prepends spermy operators for some reason.
|
36
40
|
def status(msg)
|
37
41
|
if msg.respond_to?(:force_encoding)
|
38
|
-
msg.force_encoding(
|
42
|
+
msg.force_encoding(Encoding::UTF_8)
|
39
43
|
end
|
40
|
-
info msg.gsub(
|
44
|
+
info msg.gsub(BOL, STATUS_PREFIX)
|
41
45
|
end
|
42
46
|
|
43
47
|
def substatus(msg)
|
44
|
-
debug msg.gsub(
|
48
|
+
debug msg.gsub(BOL, SUBSTATUS_PREFIX)
|
45
49
|
end
|
46
50
|
|
47
|
-
def fatal(msg) logger.fatal "FATAL: #{msg}"
|
48
|
-
def error(msg) logger.error "ERROR: #{msg}"
|
51
|
+
def fatal(msg) logger.fatal "FATAL: #{msg}" end
|
52
|
+
def error(msg) logger.error "ERROR: #{msg}" end
|
49
53
|
def warning(msg) logger.warn "WARNING: #{msg}" end
|
54
|
+
alias warn warning
|
50
55
|
def notice(msg) logger.warn msg end
|
51
56
|
def info(msg) logger.info msg end
|
52
57
|
def debug(msg) logger.debug msg end
|
53
58
|
def unknown(msg) logger.unknown msg end
|
54
59
|
|
55
|
-
def exception(msg) error msg end
|
56
60
|
# a debug outputter that displays a command being run
|
57
61
|
# Formatis like this:
|
58
62
|
# $ cmd blah do \
|
59
63
|
# > something more
|
60
64
|
# > end
|
61
|
-
def command_show(cmd) debug cmd.gsub(
|
62
|
-
def command_out(msg) debug msg.gsub(
|
63
|
-
def command_err(msg) unknown msg.gsub(
|
65
|
+
def command_show(cmd) debug cmd.gsub(BOL,CMD_CONTINUE).sub(CMD_CONTINUE, CMD_PREFIX) end
|
66
|
+
def command_out(msg) debug msg.gsub(BOL,CMD_INDENT) end
|
67
|
+
def command_err(msg) unknown msg.gsub(BOL,CMD_INDENT) end
|
64
68
|
|
65
69
|
def logged_system(cmd, server = nil)
|
66
70
|
EY::Serverside::Spawner.run(cmd, self, server)
|
@@ -2,6 +2,22 @@ module EY
|
|
2
2
|
module Serverside
|
3
3
|
class Shell
|
4
4
|
class Formatter
|
5
|
+
FATAL = 'ERROR'.freeze
|
6
|
+
ERROR = 'ERROR'.freeze
|
7
|
+
WARN = 'WARN'.freeze
|
8
|
+
INFO = 'INFO'.freeze
|
9
|
+
DEBUG = 'DEBUG'.freeze
|
10
|
+
IMPORTANT = [WARN, ERROR, FATAL].freeze
|
11
|
+
|
12
|
+
SECONDS_FORMAT = '+ %02ds '.freeze
|
13
|
+
MINUTES_FORMAT = '+%2dm %02ds '.freeze
|
14
|
+
|
15
|
+
STATUS_PREFIX = '~> '.freeze
|
16
|
+
SUBSTATUS_PREFIX = ' ~ '.freeze
|
17
|
+
IMPORTANT_PREFIX = '!> '.freeze
|
18
|
+
|
19
|
+
NL = "\n".freeze
|
20
|
+
|
5
21
|
def initialize(stdout, stderr, start_time, verbose)
|
6
22
|
@stdout, @stderr = stdout, stderr
|
7
23
|
@start = start_time.to_i
|
@@ -15,35 +31,42 @@ module EY
|
|
15
31
|
end
|
16
32
|
|
17
33
|
def build_message(severity, stamp, message)
|
18
|
-
if
|
19
|
-
prepend("#{stamp}
|
20
|
-
elsif
|
34
|
+
if IMPORTANT.include?(severity)
|
35
|
+
prepend("#{stamp}#{IMPORTANT_PREFIX}", message)
|
36
|
+
elsif INFO == severity
|
21
37
|
prepend(stamp, message)
|
22
38
|
else
|
23
|
-
prepend(
|
39
|
+
prepend(stamp, message)
|
24
40
|
end
|
25
41
|
end
|
26
42
|
|
27
43
|
def prepend(pre, str)
|
28
|
-
str.gsub(/^/, pre).sub(/\n?\z/m,
|
44
|
+
str.gsub(/^/, pre).sub(/\n?\z/m,NL)
|
29
45
|
end
|
30
46
|
|
31
47
|
def put_to_io(severity, msg)
|
32
48
|
case severity
|
33
|
-
when
|
49
|
+
when DEBUG
|
34
50
|
if @verbose
|
35
51
|
@stdout << msg
|
36
52
|
@stdout.flush
|
37
53
|
end
|
38
|
-
when
|
54
|
+
when INFO
|
39
55
|
# Need to differentiate info messages more when we're running in verbose mode
|
40
|
-
|
56
|
+
if @verbose && msg.index(STATUS_PREFIX)
|
57
|
+
@stdout.puts
|
58
|
+
@stdout << thor_shell.set_color(msg, :white, true)
|
59
|
+
else
|
60
|
+
@stdout << msg
|
61
|
+
end
|
41
62
|
@stdout.flush
|
42
|
-
when
|
43
|
-
@stderr
|
63
|
+
when WARN
|
64
|
+
@stderr.puts
|
65
|
+
@stderr << thor_shell.set_color(msg, :yellow, true)
|
44
66
|
@stderr.flush
|
45
|
-
when
|
46
|
-
@stderr
|
67
|
+
when ERROR
|
68
|
+
@stderr.puts
|
69
|
+
@stderr << thor_shell.set_color(msg, :red, true)
|
47
70
|
@stderr.flush
|
48
71
|
else
|
49
72
|
@stderr << msg
|
@@ -56,9 +79,9 @@ module EY
|
|
56
79
|
diff = 0 if diff < 0
|
57
80
|
div, mod = diff.divmod(60)
|
58
81
|
if div.zero?
|
59
|
-
|
82
|
+
SECONDS_FORMAT % mod
|
60
83
|
else
|
61
|
-
|
84
|
+
MINUTES_FORMAT % [div,mod]
|
62
85
|
end
|
63
86
|
end
|
64
87
|
|
data/spec/archive_deploy_spec.rb
CHANGED
@@ -20,7 +20,7 @@ describe "Deploying a simple application" do
|
|
20
20
|
args.instances = [{ :hostname => "localhost", :roles => ["solo"], :name => "single" }]
|
21
21
|
args.serverside_version = Gem::Version.create(EY::Serverside::VERSION.dup).release
|
22
22
|
args.config = {
|
23
|
-
"deploy_to" => deploy_dir,
|
23
|
+
"deploy_to" => deploy_dir.to_s,
|
24
24
|
"group" => GROUP
|
25
25
|
}
|
26
26
|
end
|
data/spec/bundler_deploy_spec.rb
CHANGED
@@ -40,9 +40,8 @@ describe "Deploying an application that uses Bundler" do
|
|
40
40
|
end
|
41
41
|
|
42
42
|
it "generates bundler binstubs" do
|
43
|
-
pending "doesn't work with mocked bundler"
|
44
|
-
|
45
|
-
end
|
43
|
+
pending "doesn't work with mocked bundler"
|
44
|
+
expect(deploy_dir.join('current', 'ey_bundler_binstubs', 'rake')).to exist
|
46
45
|
end
|
47
46
|
end
|
48
47
|
|
@@ -111,7 +110,7 @@ describe "Deploying an application that uses Bundler" do
|
|
111
110
|
context "without a Gemfile.lock and ignoring the warning" do
|
112
111
|
before(:all) do
|
113
112
|
deploy_test_application('no_gemfile_lock', 'config' => {'ignore_gemfile_lock_warning' => true})
|
114
|
-
expect(@config.ignore_gemfile_lock_warning).to
|
113
|
+
expect(@config.ignore_gemfile_lock_warning).to be_truthy
|
115
114
|
@install_bundler_command = @deployer.commands.grep(/gem install bundler/).first
|
116
115
|
@bundle_install_command = @deployer.commands.grep(/bundle _#{VERSION_PATTERN}_ install/).first
|
117
116
|
end
|
data/spec/configuration_spec.rb
CHANGED
@@ -15,6 +15,7 @@ describe EY::Serverside::Deploy::Configuration do
|
|
15
15
|
expect(@config.migrate).to eq(nil)
|
16
16
|
expect(@config.migrate?).to eq(false)
|
17
17
|
expect(@config.branch).to eq("master")
|
18
|
+
expect(@config.ref).to eq("master")
|
18
19
|
expect(@config.maintenance_on_migrate).to eq(true)
|
19
20
|
expect(@config.maintenance_on_restart).to eq(true)
|
20
21
|
expect(@config.required_downtime_stack?).to eq(true)
|
data/spec/deploy_hook_spec.rb
CHANGED
@@ -49,7 +49,7 @@ describe "deploy hooks" do
|
|
49
49
|
end
|
50
50
|
|
51
51
|
it 'runs the hook' do
|
52
|
-
deploy_dir.join('current', 'before_restart.ran').
|
52
|
+
expect(deploy_dir.join('current', 'before_restart.ran')).to exist
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -59,7 +59,7 @@ describe "deploy hooks" do
|
|
59
59
|
end
|
60
60
|
|
61
61
|
it 'does not run the hook' do
|
62
|
-
deploy_dir.join('current', 'before_restart.ran').
|
62
|
+
expect(deploy_dir.join('current', 'before_restart.ran')).not_to exist
|
63
63
|
end
|
64
64
|
|
65
65
|
it 'outputs a message about the hook not being executable' do
|
@@ -83,7 +83,7 @@ describe "deploy hooks" do
|
|
83
83
|
|
84
84
|
context "#run" do
|
85
85
|
it "is available" do
|
86
|
-
expect(deploy_hook.eval_hook('respond_to?(:run)')).to
|
86
|
+
expect(deploy_hook.eval_hook('respond_to?(:run)')).to be_truthy
|
87
87
|
end
|
88
88
|
|
89
89
|
it "runs commands like the shell does" do
|
@@ -96,8 +96,8 @@ describe "deploy hooks" do
|
|
96
96
|
end
|
97
97
|
|
98
98
|
it "returns true/false to indicate the command's success" do
|
99
|
-
expect(deploy_hook.eval_hook('run("true")')).to
|
100
|
-
expect(deploy_hook.eval_hook('run("false")')).to
|
99
|
+
expect(deploy_hook.eval_hook('run("true")')).to be_truthy
|
100
|
+
expect(deploy_hook.eval_hook('run("false")')).to be_falsey
|
101
101
|
end
|
102
102
|
|
103
103
|
it "raises when the bang method alternative is used" do
|
@@ -113,7 +113,7 @@ describe "deploy hooks" do
|
|
113
113
|
|
114
114
|
context "#sudo" do
|
115
115
|
it "is available" do
|
116
|
-
expect(deploy_hook.eval_hook('respond_to?(:sudo)')).to
|
116
|
+
expect(deploy_hook.eval_hook('respond_to?(:sudo)')).to be_truthy
|
117
117
|
end
|
118
118
|
|
119
119
|
it "runs things with sudo" do
|
@@ -139,18 +139,18 @@ describe "deploy hooks" do
|
|
139
139
|
|
140
140
|
context "capistrano-ish methods" do
|
141
141
|
it "has them" do
|
142
|
-
expect(deploy_hook.eval_hook('respond_to?(:latest_release) ')).to
|
143
|
-
expect(deploy_hook.eval_hook('respond_to?(:previous_release) ')).to
|
144
|
-
expect(deploy_hook.eval_hook('respond_to?(:all_releases) ')).to
|
145
|
-
expect(deploy_hook.eval_hook('respond_to?(:current_path) ')).to
|
146
|
-
expect(deploy_hook.eval_hook('respond_to?(:shared_path) ')).to
|
147
|
-
expect(deploy_hook.eval_hook('respond_to?(:release_dir) ')).to
|
148
|
-
expect(deploy_hook.eval_hook('respond_to?(:failed_release_dir)')).to
|
149
|
-
expect(deploy_hook.eval_hook('respond_to?(:release_path) ')).to
|
142
|
+
expect(deploy_hook.eval_hook('respond_to?(:latest_release) ')).to be_truthy
|
143
|
+
expect(deploy_hook.eval_hook('respond_to?(:previous_release) ')).to be_truthy
|
144
|
+
expect(deploy_hook.eval_hook('respond_to?(:all_releases) ')).to be_truthy
|
145
|
+
expect(deploy_hook.eval_hook('respond_to?(:current_path) ')).to be_truthy
|
146
|
+
expect(deploy_hook.eval_hook('respond_to?(:shared_path) ')).to be_truthy
|
147
|
+
expect(deploy_hook.eval_hook('respond_to?(:release_dir) ')).to be_truthy
|
148
|
+
expect(deploy_hook.eval_hook('respond_to?(:failed_release_dir)')).to be_truthy
|
149
|
+
expect(deploy_hook.eval_hook('respond_to?(:release_path) ')).to be_truthy
|
150
150
|
end
|
151
151
|
|
152
152
|
it "shows a deprecation warning that asks you to use config to access these variables" do
|
153
|
-
expect(deploy_hook.eval_hook('shared_path.nil?')).to
|
153
|
+
expect(deploy_hook.eval_hook('shared_path.nil?')).to be_falsey
|
154
154
|
out = read_output
|
155
155
|
expect(out).to include("Use of `shared_path` (via method_missing) is deprecated in favor of `config.shared_path` for improved error messages and compatibility.")
|
156
156
|
expect(out).to match(%r|in .*/deploy/fake_test_hook.rb|)
|
@@ -189,7 +189,7 @@ describe "deploy hooks" do
|
|
189
189
|
end
|
190
190
|
|
191
191
|
it "is deprecated through the @node ivar" do
|
192
|
-
expect(deploy_hook.eval_hook('@node.nil?')).to
|
192
|
+
expect(deploy_hook.eval_hook('@node.nil?')).to be_falsey
|
193
193
|
out = read_output
|
194
194
|
expect(out).to match(%r|Use of `@node` in deploy hooks is deprecated.|)
|
195
195
|
expect(out).to match(%r|Please use `config.node`, which provides access to the same object.|)
|
@@ -197,7 +197,7 @@ describe "deploy hooks" do
|
|
197
197
|
end
|
198
198
|
|
199
199
|
it "is available" do
|
200
|
-
expect(deploy_hook.eval_hook('config.node.nil?')).to
|
200
|
+
expect(deploy_hook.eval_hook('config.node.nil?')).to be_falsey
|
201
201
|
end
|
202
202
|
|
203
203
|
it "has indifferent access" do
|
@@ -214,11 +214,11 @@ describe "deploy hooks" do
|
|
214
214
|
|
215
215
|
context "config" do
|
216
216
|
it "is available" do
|
217
|
-
expect(deploy_hook.eval_hook('config.nil?')).to
|
217
|
+
expect(deploy_hook.eval_hook('config.nil?')).to be_falsey
|
218
218
|
end
|
219
219
|
|
220
220
|
it "is deprecated through the @configuration ivar" do
|
221
|
-
expect(deploy_hook.eval_hook('@configuration.nil?')).to
|
221
|
+
expect(deploy_hook.eval_hook('@configuration.nil?')).to be_falsey
|
222
222
|
out = read_output
|
223
223
|
expect(out).to match(%r|Use of `@configuration` in deploy hooks is deprecated.|)
|
224
224
|
expect(out).to match(%r|Please use `config`, which provides access to the same object.|)
|
@@ -244,7 +244,7 @@ describe "deploy hooks" do
|
|
244
244
|
:revision,
|
245
245
|
:environment].each do |attribute|
|
246
246
|
it "has the #{attribute.inspect} attribute for compatibility with chef-deploy" do
|
247
|
-
expect(deploy_hook.eval_hook("config.has_key?(#{attribute.inspect})")).to
|
247
|
+
expect(deploy_hook.eval_hook("config.has_key?(#{attribute.inspect})")).to be_truthy
|
248
248
|
end
|
249
249
|
end
|
250
250
|
end
|
@@ -351,11 +351,11 @@ describe "deploy hooks" do
|
|
351
351
|
end
|
352
352
|
|
353
353
|
it "has info, warning, debug, logged_system, and access to shell" do
|
354
|
-
expect(deploy_hook.eval_hook('respond_to?(:info) ')).to
|
355
|
-
expect(deploy_hook.eval_hook('respond_to?(:warning) ')).to
|
356
|
-
expect(deploy_hook.eval_hook('respond_to?(:debug) ')).to
|
357
|
-
expect(deploy_hook.eval_hook('respond_to?(:logged_system)')).to
|
358
|
-
expect(deploy_hook.eval_hook('respond_to?(:shell) ')).to
|
354
|
+
expect(deploy_hook.eval_hook('respond_to?(:info) ')).to be_truthy
|
355
|
+
expect(deploy_hook.eval_hook('respond_to?(:warning) ')).to be_truthy
|
356
|
+
expect(deploy_hook.eval_hook('respond_to?(:debug) ')).to be_truthy
|
357
|
+
expect(deploy_hook.eval_hook('respond_to?(:logged_system)')).to be_truthy
|
358
|
+
expect(deploy_hook.eval_hook('respond_to?(:shell) ')).to be_truthy
|
359
359
|
end
|
360
360
|
end
|
361
361
|
end
|
@@ -0,0 +1 @@
|
|
1
|
+
This file obstructs the sharing of the tmp dir.
|
@@ -3,5 +3,6 @@ task 'assets:precompile' do
|
|
3
3
|
sh "mkdir -p #{File.expand_path('../public/assets', __FILE__)}"
|
4
4
|
sh "touch #{File.expand_path('../public/assets/compiled_asset', __FILE__)}"
|
5
5
|
sh 'touch precompiled'
|
6
|
+
sh '[ -e tmp/cache ] && touch cache_compiled || touch tmp/cache' # mirror the behavior of compiling using asset caches in tmp
|
6
7
|
end
|
7
8
|
|
@@ -59,27 +59,27 @@ describe "the bundler version retrieved from the lockfile" do
|
|
59
59
|
|
60
60
|
context "checking for gems in the dependencies" do
|
61
61
|
it "does not have any database adapters in a gemfile lock without them" do
|
62
|
-
expect(get_parser('1.0.6-no-bundler').any_database_adapter?).to
|
62
|
+
expect(get_parser('1.0.6-no-bundler').any_database_adapter?).to be_falsey
|
63
63
|
end
|
64
64
|
|
65
65
|
it "has a database adapter in a Gemfile.lock with do_mysql" do
|
66
|
-
expect(get_parser('1.0.18-do_mysql').any_database_adapter?).to
|
66
|
+
expect(get_parser('1.0.18-do_mysql').any_database_adapter?).to be_truthy
|
67
67
|
end
|
68
68
|
|
69
69
|
it "has a database adapter in a Gemfile.lock with mysql" do
|
70
|
-
expect(get_parser('1.0.18-mysql').any_database_adapter?).to
|
70
|
+
expect(get_parser('1.0.18-mysql').any_database_adapter?).to be_truthy
|
71
71
|
end
|
72
72
|
|
73
73
|
it "has a database adapter in a Gemfile.lock with mysql2" do
|
74
|
-
expect(get_parser('1.0.18-mysql2').any_database_adapter?).to
|
74
|
+
expect(get_parser('1.0.18-mysql2').any_database_adapter?).to be_truthy
|
75
75
|
end
|
76
76
|
|
77
77
|
it "has a database adapter in a Gemfile.lock with pg" do
|
78
|
-
expect(get_parser('1.0.18-pg').any_database_adapter?).to
|
78
|
+
expect(get_parser('1.0.18-pg').any_database_adapter?).to be_truthy
|
79
79
|
end
|
80
80
|
|
81
81
|
it "has a database adapter in a Gemfile.lock with do_postgres" do
|
82
|
-
expect(get_parser('1.0.18-do_postgres').any_database_adapter?).to
|
82
|
+
expect(get_parser('1.0.18-do_postgres').any_database_adapter?).to be_truthy
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
data/spec/maintenance_spec.rb
CHANGED
@@ -23,22 +23,22 @@ describe EY::Serverside::Maintenance do
|
|
23
23
|
it "lets you know if the app is in maintenance mode" do
|
24
24
|
maintenance_status
|
25
25
|
maintenance_output = read_output.split("\n").select{|l| l.match("Maintenance")}
|
26
|
-
maintenance_output.count.
|
27
|
-
maintenance_output.first.
|
26
|
+
expect(maintenance_output.count).to eq(1)
|
27
|
+
expect(maintenance_output.first).to match(/Maintenance page: down$/)
|
28
28
|
|
29
29
|
enable_maintenance
|
30
30
|
|
31
31
|
maintenance_status
|
32
32
|
maintenance_output = read_output.split("\n").select{|l| l.match("Maintenance")}
|
33
|
-
maintenance_output.count.
|
34
|
-
maintenance_output.first.
|
33
|
+
expect(maintenance_output.count).to eq(1)
|
34
|
+
expect(maintenance_output.first).to match(/Maintenance page: up$/)
|
35
35
|
|
36
36
|
disable_maintenance
|
37
37
|
|
38
38
|
maintenance_status
|
39
39
|
maintenance_output = read_output.split("\n").select{|l| l.match("Maintenance")}
|
40
|
-
maintenance_output.count.
|
41
|
-
maintenance_output.first.
|
40
|
+
expect(maintenance_output.count).to eq(1)
|
41
|
+
expect(maintenance_output.first).to match(/Maintenance page: down$/)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "Deploying an application with platform configure command" do
|
4
|
+
describe "configure script does not exist" do
|
5
|
+
before do
|
6
|
+
@releases_failed = deploy_dir.join('releases_failed')
|
7
|
+
deploy_test_application('default')
|
8
|
+
end
|
9
|
+
|
10
|
+
it "works without warning" do
|
11
|
+
expect(read_output).not_to match(/WARNING/)
|
12
|
+
|
13
|
+
expect(@releases_failed).not_to exist
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
describe "a succesful deploy" do
|
18
|
+
before do
|
19
|
+
@releases_failed = deploy_dir.join('releases_failed')
|
20
|
+
ENV['EY_SERVERSIDE_CONFIGURE_COMMAND'] = "echo platform_configure_command_ran >&2"
|
21
|
+
deploy_test_application('default')
|
22
|
+
end
|
23
|
+
|
24
|
+
after do
|
25
|
+
ENV.delete('EY_SERVERSIDE_CONFIGURE_COMMAND')
|
26
|
+
end
|
27
|
+
|
28
|
+
it "runs the configure_command during deploy and finishes successfully" do
|
29
|
+
expect(read_output).to match(/platform_configure_command_ran/)
|
30
|
+
|
31
|
+
expect(@releases_failed).not_to exist
|
32
|
+
|
33
|
+
restart = deploy_dir.join('current', 'restart')
|
34
|
+
expect(restart).to exist
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "a failed configure command" do
|
39
|
+
|
40
|
+
before do
|
41
|
+
ENV['EY_SERVERSIDE_CONFIGURE_COMMAND'] = "echo platform_configure_command_failed >&2 && false"
|
42
|
+
end
|
43
|
+
|
44
|
+
after do
|
45
|
+
ENV.delete('EY_SERVERSIDE_CONFIGURE_COMMAND')
|
46
|
+
end
|
47
|
+
|
48
|
+
it "aborts the deplo when it fails, preventing the app from being restarted" do
|
49
|
+
@releases_failed = deploy_dir.join('releases_failed')
|
50
|
+
expect(@releases_failed).not_to exist
|
51
|
+
|
52
|
+
begin
|
53
|
+
deploy_test_application('default')
|
54
|
+
rescue
|
55
|
+
end
|
56
|
+
expect(read_output).to match(/platform_configure_command_failed/)
|
57
|
+
|
58
|
+
expect(@releases_failed.entries).not_to be_empty
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
data/spec/rails31_deploy_spec.rb
CHANGED
@@ -34,6 +34,9 @@ describe "Deploying a Rails 3.1 application" do
|
|
34
34
|
expect(deploy_dir.join('current', 'precompiled')).to exist
|
35
35
|
expect(deploy_dir.join('current', 'public', 'assets')).to exist
|
36
36
|
expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
|
37
|
+
expect(deploy_dir.join('current', 'tmp', 'cache')).to exist
|
38
|
+
expect(deploy_dir.join('current', 'tmp')).to be_a_symlink
|
39
|
+
expect(deploy_dir.join('current', 'cache_compiled')).not_to exist
|
37
40
|
expect(read_output).to include("Precompiling assets. (precompile_assets: true)")
|
38
41
|
|
39
42
|
# changing the ref stands in for actually having assets change (see Strategies::IntegrationSpec#same?)
|
@@ -41,6 +44,9 @@ describe "Deploying a Rails 3.1 application" do
|
|
41
44
|
expect(deploy_dir.join('current', 'precompiled')).to exist # it does runs the task
|
42
45
|
expect(deploy_dir.join('current', 'public', 'assets')).to exist
|
43
46
|
expect(deploy_dir.join('current', 'public', 'assets', 'compiled_asset')).to exist
|
47
|
+
expect(deploy_dir.join('current', 'tmp')).to be_a_symlink
|
48
|
+
expect(deploy_dir.join('current', 'tmp', 'cache')).to exist # preserves tmp dir
|
49
|
+
expect(deploy_dir.join('current', 'cache_compiled')).to exist # uses tmp/cache to compile assets faster
|
44
50
|
expect(read_output).not_to match(%r#Reusing existing assets#)
|
45
51
|
end
|
46
52
|
|
@@ -97,14 +103,22 @@ describe "Deploying a Rails 3.1 application" do
|
|
97
103
|
end
|
98
104
|
end
|
99
105
|
|
100
|
-
context "with asset compilation enabled in ey.yml, and asset_roles is set to :all" do
|
106
|
+
context "with asset compilation enabled in ey.yml, and asset_roles is set to :all, and a custom compile command" do
|
101
107
|
before(:all) do
|
102
108
|
deploy_test_application('assets_enabled_all')
|
103
109
|
end
|
104
110
|
|
105
|
-
it "precompiles assets" do
|
106
|
-
expect(deploy_dir.join('current', '
|
111
|
+
it "precompiles assets but never shares the tmp cache because the repository has a committed tmp dir with contents" do
|
112
|
+
expect(deploy_dir.join('current', 'custom_compiled')).to exist
|
113
|
+
expect(deploy_dir.join('current', 'cache_compiled')).not_to exist
|
114
|
+
expect(deploy_dir.join('current', 'tmp', 'cache')).to exist
|
115
|
+
expect(deploy_dir.join('current', 'tmp')).not_to be_a_symlink
|
107
116
|
expect(read_output).to include("Precompiling assets. (precompile_assets: true)")
|
117
|
+
|
118
|
+
redeploy_test_application('config' => {'precompile_unchanged_assets' => 'true'})
|
119
|
+
expect(deploy_dir.join('current', 'tmp', 'cache')).to exist
|
120
|
+
expect(deploy_dir.join('current', 'cache_compiled')).not_to exist
|
121
|
+
expect(deploy_dir.join('current', 'tmp')).not_to be_a_symlink
|
108
122
|
end
|
109
123
|
end
|
110
124
|
|
data/spec/shell_spec.rb
CHANGED
@@ -35,24 +35,23 @@ describe EY::Serverside::Shell do
|
|
35
35
|
tstp_1 = "+ 00s "
|
36
36
|
tstp_2 = "+ 3m 05s "
|
37
37
|
tstp_3 = "+10m 25s "
|
38
|
-
notstp = " "
|
39
38
|
output.rewind
|
40
39
|
expect(output.read).to eq <<-OUTPUT
|
41
|
-
#{
|
40
|
+
#{tstp_1} debug
|
42
41
|
|
43
42
|
\e[1m\e[33m#{tstp_1} !> notice
|
44
43
|
\e[0m
|
45
44
|
\e[1m\e[37m#{tstp_2} ~> STATUS
|
46
|
-
\e[0m#{
|
47
|
-
#{
|
48
|
-
#{
|
45
|
+
\e[0m#{tstp_2} multi
|
46
|
+
#{tstp_2} line
|
47
|
+
#{tstp_2} debug
|
49
48
|
|
50
49
|
\e[1m\e[33m#{tstp_2} !> WARNING: multi
|
51
50
|
#{tstp_2} !> line
|
52
51
|
#{tstp_2} !> warning
|
53
|
-
\e[0m#{
|
54
|
-
#{
|
55
|
-
#{
|
52
|
+
\e[0m#{tstp_3} ~ multi
|
53
|
+
#{tstp_3} ~ line
|
54
|
+
#{tstp_3} ~ substatus
|
56
55
|
OUTPUT
|
57
56
|
end
|
58
57
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: engineyard-serverside
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.6.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2014-
|
12
|
+
date: 2014-12-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
@@ -341,8 +341,9 @@ files:
|
|
341
341
|
- spec/fixtures/repos/assets_enabled_all/config/ey.yml
|
342
342
|
- spec/fixtures/repos/assets_enabled_all/Gemfile
|
343
343
|
- spec/fixtures/repos/assets_enabled_all/Gemfile.lock
|
344
|
-
- spec/fixtures/repos/assets_enabled_all/Rakefile
|
345
344
|
- spec/fixtures/repos/assets_enabled_all/README
|
345
|
+
- spec/fixtures/repos/assets_enabled_all/script/assets
|
346
|
+
- spec/fixtures/repos/assets_enabled_all/tmp/obstruction
|
346
347
|
- spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml
|
347
348
|
- spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile
|
348
349
|
- spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock
|
@@ -451,6 +452,7 @@ files:
|
|
451
452
|
- spec/multi_dependency_manager_spec.rb
|
452
453
|
- spec/nodejs_deploy_spec.rb
|
453
454
|
- spec/php_deploy_spec.rb
|
455
|
+
- spec/platform_configure_spec.rb
|
454
456
|
- spec/rails31_deploy_spec.rb
|
455
457
|
- spec/restart_spec.rb
|
456
458
|
- spec/rollback_spec.rb
|
@@ -480,7 +482,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
480
482
|
version: '0'
|
481
483
|
segments:
|
482
484
|
- 0
|
483
|
-
hash:
|
485
|
+
hash: 696469692367855217
|
484
486
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
485
487
|
none: false
|
486
488
|
requirements:
|
@@ -553,8 +555,9 @@ test_files:
|
|
553
555
|
- spec/fixtures/repos/assets_enabled_all/config/ey.yml
|
554
556
|
- spec/fixtures/repos/assets_enabled_all/Gemfile
|
555
557
|
- spec/fixtures/repos/assets_enabled_all/Gemfile.lock
|
556
|
-
- spec/fixtures/repos/assets_enabled_all/Rakefile
|
557
558
|
- spec/fixtures/repos/assets_enabled_all/README
|
559
|
+
- spec/fixtures/repos/assets_enabled_all/script/assets
|
560
|
+
- spec/fixtures/repos/assets_enabled_all/tmp/obstruction
|
558
561
|
- spec/fixtures/repos/assets_enabled_in_ey_yml/config/ey.yml
|
559
562
|
- spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile
|
560
563
|
- spec/fixtures/repos/assets_enabled_in_ey_yml/Gemfile.lock
|
@@ -663,6 +666,7 @@ test_files:
|
|
663
666
|
- spec/multi_dependency_manager_spec.rb
|
664
667
|
- spec/nodejs_deploy_spec.rb
|
665
668
|
- spec/php_deploy_spec.rb
|
669
|
+
- spec/platform_configure_spec.rb
|
666
670
|
- spec/rails31_deploy_spec.rb
|
667
671
|
- spec/restart_spec.rb
|
668
672
|
- spec/rollback_spec.rb
|