torquebox-rake-support 2.1.2 → 2.2.0
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/lib/torquebox/deploy_utils.rb +125 -25
- data/lib/torquebox/rails.rb +1 -0
- data/spec/deploy_utils_spec.rb +41 -3
- metadata +97 -94
@@ -159,42 +159,115 @@ module TorqueBox
|
|
159
159
|
ENV.delete('BUNDLE_GEMFILE')
|
160
160
|
# If called from rake within a rails app, bundler will try
|
161
161
|
# to init itself via RUBYOPT, which we don't want
|
162
|
-
ENV.delete('RUBYOPT')
|
163
|
-
#
|
164
|
-
#
|
165
|
-
# own gems if used
|
166
|
-
|
167
|
-
|
168
|
-
|
162
|
+
ENV.delete('RUBYOPT')
|
163
|
+
# Ensure bundler gets on the Ruby load path of the booted
|
164
|
+
# TorqueBox instance if it's on the load path of this Ruby
|
165
|
+
# runtime so we can find bundler and our own gems if used
|
166
|
+
# with bundle install --deployment
|
167
|
+
ENV['RUBYLIB'] = rubylib_with_bundler($:)
|
168
|
+
|
169
|
+
options[:jvm_options] ||= ''
|
170
|
+
options[:jvm_options] << " #{jruby_opts_properties}"
|
171
|
+
options[:jvm_options] << " #{strip_jvm_properties_from_jruby_opts}"
|
172
|
+
|
173
|
+
set_java_opts(options[:jvm_options].strip)
|
169
174
|
print_server_config(options[:clustered])
|
170
175
|
exec_command(run_command_line(options).join(' '))
|
171
176
|
end
|
172
177
|
end
|
173
178
|
|
179
|
+
# name: (string) what to call the resulting knob file
|
180
|
+
# app_dir: (string) where the application to be packaged is
|
181
|
+
# dest_dir: (string) where to put the resulting knob file
|
182
|
+
# excludes: (string) string or regex of files to exclude from the archive
|
183
|
+
# precompile_assets: (boolean) whether or not to precompile assets. this is rails-specific.
|
184
|
+
# package_gems: (boolean) whether or not to install all bundle gems to vendor/bundle (this
|
185
|
+
# is rather convenient as it means that you don't have to run bundle
|
186
|
+
# install on your production servers)
|
187
|
+
# package_without: (array) all the bundler groups to run bundle install without (cuts down
|
188
|
+
# on package size by snipping out potentially inappropriate
|
189
|
+
# dependencies for a production environment).
|
174
190
|
def create_archive(opts = {})
|
175
|
-
|
176
191
|
archive = normalize_archive_name( find_option( opts, 'name' ) || archive_name )
|
177
|
-
app_dir = find_option( opts, 'app_dir') || Dir.pwd
|
178
|
-
dest_dir = find_option( opts, 'dest_dir') || Dir.pwd
|
192
|
+
app_dir = find_option( opts, 'app_dir' ) || Dir.pwd
|
193
|
+
dest_dir = find_option( opts, 'dest_dir' ) || Dir.pwd
|
194
|
+
excludes = find_option( opts, 'exclude' ) || ""
|
195
|
+
should_precompile_assets = find_option( opts, 'precompile_assets' ) == true
|
196
|
+
should_package_gems = find_option( opts, 'package_gems' ) == true
|
197
|
+
package_without = find_option( opts, 'package_without' ) || Array.new
|
198
|
+
|
199
|
+
if should_precompile_assets
|
200
|
+
precompile_assets( app_dir )
|
201
|
+
raise 'Error precompiling assets' unless $? == 0
|
202
|
+
end
|
203
|
+
|
204
|
+
archive_path = File.join( dest_dir, archive )
|
205
|
+
archive_proc = lambda { create_knob_archive( app_dir, archive_path, excludes ) }
|
206
|
+
|
207
|
+
if should_package_gems
|
208
|
+
package_gems( app_dir, package_without ) {
|
209
|
+
raise 'Error packaging gems' unless $? == 0
|
210
|
+
archive_proc.call
|
211
|
+
}
|
212
|
+
else
|
213
|
+
archive_proc.call
|
214
|
+
end
|
215
|
+
|
216
|
+
archive_path
|
217
|
+
end
|
218
|
+
|
219
|
+
def precompile_assets(app_dir)
|
220
|
+
Dir.chdir( app_dir ) do
|
221
|
+
jruby_command( "-S rake assets:precompile" )
|
222
|
+
end
|
223
|
+
end
|
224
|
+
|
225
|
+
def package_gems(app_dir, package_without)
|
226
|
+
# note - this is used instead of freeze gems because it
|
227
|
+
# should cause the archive to capture .bundle/config,
|
228
|
+
# thereby forcing the app to use the bundled gems. we delete
|
229
|
+
# the deployment configuration for rubygems afterward
|
230
|
+
bundler_config = File.join( app_dir, '.bundle/config' )
|
231
|
+
if File.exists?( bundler_config )
|
232
|
+
old_config = File.read( bundler_config )
|
233
|
+
else
|
234
|
+
old_config = nil
|
235
|
+
end
|
236
|
+
cmd = %w{-S bundle install --local --deployment}
|
237
|
+
unless package_without.empty?
|
238
|
+
cmd << '--without'
|
239
|
+
cmd << package_without
|
240
|
+
end
|
241
|
+
Dir.chdir( app_dir ) do
|
242
|
+
jruby_command( '-S bundle package' )
|
243
|
+
jruby_command( cmd.flatten.join(' ') )
|
244
|
+
end
|
245
|
+
yield if block_given?
|
246
|
+
ensure
|
247
|
+
if File.exists?( bundler_config )
|
248
|
+
if old_config
|
249
|
+
File.open( bundler_config, 'w' ) { |io| io.write( old_config ) }
|
250
|
+
else
|
251
|
+
File.delete( bundler_config ) # there wasn't originally a config file there
|
252
|
+
end
|
253
|
+
end
|
254
|
+
end
|
179
255
|
|
256
|
+
def create_knob_archive(app_dir, archive_path, excludes)
|
180
257
|
default_skip_files = %w{ ^log/ ^tmp/ ^test/ ^spec/ ^[^/]*\.knob$ vendor/.*cache/.*\.gem$ }
|
181
|
-
opts_skip_files = (
|
182
|
-
split(/,/).
|
183
|
-
map { |r| "^[^/]*#{r}"}
|
258
|
+
opts_skip_files = excludes.split( /,/ ).map { |r| "^[^/]*#{r}" }
|
184
259
|
skip_files = default_skip_files + opts_skip_files
|
185
260
|
|
186
|
-
archive_path = File.join(dest_dir, archive)
|
187
|
-
|
188
261
|
Dir.chdir( app_dir ) do
|
189
262
|
include_files = []
|
190
263
|
Dir[ "**/**", ".bundle/**/**" ].each do |entry|
|
191
|
-
unless File.directory?(entry) || skip_files.any? {|regex| entry.match(regex)}
|
264
|
+
unless File.directory?( entry ) || skip_files.any? { |regex| entry.match( regex ) }
|
192
265
|
include_files << '"' + entry.to_s + '"'
|
193
266
|
end
|
194
267
|
end
|
195
268
|
|
196
|
-
includes = Tempfile.new("include-files")
|
197
|
-
includes.write(include_files.join("\n"))
|
269
|
+
includes = Tempfile.new( "include-files" )
|
270
|
+
includes.write( include_files.join( "\n" ) )
|
198
271
|
includes.flush
|
199
272
|
|
200
273
|
cmd = "jar cvf '#{archive_path}' @#{includes.path}"
|
@@ -202,16 +275,12 @@ module TorqueBox
|
|
202
275
|
run_command( cmd )
|
203
276
|
includes.close( true )
|
204
277
|
end
|
205
|
-
|
206
|
-
archive_path
|
207
278
|
end
|
208
279
|
|
209
280
|
def freeze_gems(app_dir = Dir.pwd)
|
210
281
|
Dir.chdir( app_dir ) do
|
211
|
-
|
212
|
-
|
213
|
-
run_command( "#{jruby} -S bundle package" )
|
214
|
-
run_command( "#{jruby} -S bundle install --local --path vendor/bundle" )
|
282
|
+
jruby_command( '-S bundle package' )
|
283
|
+
jruby_command( '-S bundle install --local --path vendor/bundle' )
|
215
284
|
end
|
216
285
|
end
|
217
286
|
|
@@ -299,6 +368,12 @@ module TorqueBox
|
|
299
368
|
success
|
300
369
|
end
|
301
370
|
|
371
|
+
def jruby_command(cmd)
|
372
|
+
jruby = File.join( RbConfig::CONFIG['bindir'], RbConfig::CONFIG['ruby_install_name'] )
|
373
|
+
RUBY_VERSION =~ /^1\.9\./ ? jruby << " --1.9" : jruby << " --1.8"
|
374
|
+
run_command( "#{jruby} #{cmd}" )
|
375
|
+
end
|
376
|
+
|
302
377
|
def run_command(cmd)
|
303
378
|
puts `#{cmd} 2>&1`
|
304
379
|
end
|
@@ -410,10 +485,35 @@ module TorqueBox
|
|
410
485
|
jruby_opts = ENV['JRUBY_OPTS']
|
411
486
|
return "" if jruby_opts.nil?
|
412
487
|
# Only convert -Xa.b, -Xa.b.c, -Xa.b.c.d style options to properties
|
413
|
-
properties = jruby_opts.scan(/-X(\w+\..+?)\s/)
|
488
|
+
properties = jruby_opts.scan(/-X(\w+\..+?)(\s|$)/)
|
414
489
|
properties.map { |matches| "-Djruby.#{matches.first}" }.join(' ')
|
415
490
|
end
|
416
491
|
|
492
|
+
def strip_jvm_properties_from_jruby_opts
|
493
|
+
jruby_opts = ENV['JRUBY_OPTS']
|
494
|
+
return '' if jruby_opts.nil?
|
495
|
+
jvm_properties = []
|
496
|
+
properties = jruby_opts.split(' ')
|
497
|
+
properties.each do |property|
|
498
|
+
if property =~ /^-J.+/
|
499
|
+
jvm_properties << property.sub(/-J/, '')
|
500
|
+
ENV['JRUBY_OPTS'] = ENV['JRUBY_OPTS'].sub(property, '')
|
501
|
+
end
|
502
|
+
end
|
503
|
+
# get rid of any leftover spaces
|
504
|
+
ENV['JRUBY_OPTS'] = ENV['JRUBY_OPTS'].split(' ').join(' ')
|
505
|
+
jvm_properties.join(' ')
|
506
|
+
end
|
507
|
+
|
508
|
+
def rubylib_with_bundler(load_path)
|
509
|
+
bundler_load_paths = load_path.select { |p| p.include?('bundler') }
|
510
|
+
rubylib = (ENV['RUBYLIB'] || '').dup # ENV strings are frozen
|
511
|
+
unless rubylib.empty? || bundler_load_paths.empty?
|
512
|
+
rubylib << ':'
|
513
|
+
end
|
514
|
+
rubylib << bundler_load_paths.join(':')
|
515
|
+
end
|
516
|
+
|
417
517
|
private
|
418
518
|
|
419
519
|
def undeploy(name, opts = {})
|
data/lib/torquebox/rails.rb
CHANGED
data/spec/deploy_utils_spec.rb
CHANGED
@@ -251,13 +251,13 @@ describe TorqueBox::DeployUtils do
|
|
251
251
|
end
|
252
252
|
|
253
253
|
it 'should set java options' do
|
254
|
-
@util.should_receive(:set_java_opts).with('java options
|
254
|
+
@util.should_receive(:set_java_opts).with('java options')
|
255
255
|
@util.run_server(:jvm_options => 'java options')
|
256
256
|
end
|
257
257
|
|
258
258
|
it 'should pass JRUBY_OPTS properties' do
|
259
|
-
ENV['JRUBY_OPTS'] = '--1.9 -Xjit.logging=true -Xthread.pool.enabled=true
|
260
|
-
@util.should_receive(:set_java_opts).with('
|
259
|
+
ENV['JRUBY_OPTS'] = '--1.9 -Xjit.logging=true -Xthread.pool.enabled=true'
|
260
|
+
@util.should_receive(:set_java_opts).with('-Djruby.jit.logging=true -Djruby.thread.pool.enabled=true')
|
261
261
|
@util.run_server
|
262
262
|
end
|
263
263
|
|
@@ -266,6 +266,13 @@ describe TorqueBox::DeployUtils do
|
|
266
266
|
@util.should_receive(:set_java_opts).with('java options -Djruby.jit.logging=true')
|
267
267
|
@util.run_server(:jvm_options => 'java options')
|
268
268
|
end
|
269
|
+
|
270
|
+
it 'should strip and pass JRUBY_OPTS jvm options' do
|
271
|
+
ENV['JRUBY_OPTS'] = '--1.9 -J-Xmx1024m -J-Xss2048k -Xjit.logging=true'
|
272
|
+
@util.should_receive(:set_java_opts).with('some java options -Djruby.jit.logging=true -Xmx1024m -Xss2048k')
|
273
|
+
@util.run_server(:jvm_options => 'some java options')
|
274
|
+
ENV['JRUBY_OPTS'].should == '--1.9 -Xjit.logging=true'
|
275
|
+
end
|
269
276
|
end
|
270
277
|
|
271
278
|
describe '.is_deployed?' do
|
@@ -449,4 +456,35 @@ describe TorqueBox::DeployUtils do
|
|
449
456
|
@util.deployment_status[@appname][:status].should == 'deployment failed'
|
450
457
|
end
|
451
458
|
end
|
459
|
+
|
460
|
+
describe '.rubylib_with_bundler' do
|
461
|
+
before(:each) do
|
462
|
+
@rubylib = ENV['RUBYLIB']
|
463
|
+
end
|
464
|
+
|
465
|
+
after(:each) do
|
466
|
+
ENV['RUBYLIB'] = @rubylib
|
467
|
+
end
|
468
|
+
|
469
|
+
it 'should equal ENV["RUBYLIB"] if bundler not in load path' do
|
470
|
+
ENV['RUBYLIB'] = '/path/to/somewhere'
|
471
|
+
@util.rubylib_with_bundler([]).should == '/path/to/somewhere'
|
472
|
+
end
|
473
|
+
|
474
|
+
it 'should be empty if ENV["RUBYLIB"] not set and bundler not on load path' do
|
475
|
+
ENV['RUBYLIB'] = nil
|
476
|
+
@util.rubylib_with_bundler([]).should be_empty
|
477
|
+
end
|
478
|
+
|
479
|
+
it 'should not include ENV["RUBYLIB"] if not set' do
|
480
|
+
ENV['RUBYLIB'] = nil
|
481
|
+
@util.rubylib_with_bundler(['/some/bundler/path']).should == '/some/bundler/path'
|
482
|
+
end
|
483
|
+
|
484
|
+
it 'should only include load path entries containing bundler' do
|
485
|
+
ENV['RUBYLIB'] = '/path/to/abc'
|
486
|
+
load_path = ['/some/bundler/path', '/some/other/path']
|
487
|
+
@util.rubylib_with_bundler(load_path).should =='/path/to/abc:/some/bundler/path'
|
488
|
+
end
|
489
|
+
end
|
452
490
|
end
|
metadata
CHANGED
@@ -1,109 +1,112 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: torquebox-rake-support
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 2.
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 2.2.0
|
6
6
|
platform: ruby
|
7
|
-
authors:
|
8
|
-
|
9
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- The TorqueBox Team
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
12
|
+
date: 2012-12-06 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: rake
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - ! '>='
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.8.7
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ! '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.8.7
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :runtime
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rspec
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - '='
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: 2.7.0
|
37
|
+
none: false
|
38
|
+
requirement: !ruby/object:Gem::Requirement
|
39
|
+
requirements:
|
40
|
+
- - '='
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 2.7.0
|
43
|
+
none: false
|
44
|
+
prerelease: false
|
45
|
+
type: :development
|
46
|
+
description: ''
|
47
|
+
email:
|
48
|
+
- torquebox-dev@torquebox.org
|
43
49
|
executables: []
|
44
|
-
|
45
50
|
extensions: []
|
46
|
-
|
47
51
|
extra_rdoc_files: []
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
- spec/fixtures/simpleapp/vendor/vendor.rb
|
52
|
+
files:
|
53
|
+
- licenses/lgpl-2.1.txt
|
54
|
+
- lib/org.torquebox.rake-support.rb
|
55
|
+
- lib/torquebox-rake-support.rb
|
56
|
+
- lib/torquebox/rails.rb
|
57
|
+
- lib/torquebox/deploy_utils.rb
|
58
|
+
- lib/torquebox/upstart.rb
|
59
|
+
- lib/torquebox/launchd.rb
|
60
|
+
- lib/torquebox/server.rb
|
61
|
+
- lib/torquebox/rake/tasks.rb
|
62
|
+
- lib/torquebox/rake/tasks/deployment.rb
|
63
|
+
- lib/torquebox/rake/tasks/archive.rb
|
64
|
+
- lib/torquebox/rake/tasks/server.rb
|
65
|
+
- generators/USAGE
|
66
|
+
- generators/torquebox_queue_generator.rb
|
67
|
+
- generators/templates/queue.rb
|
68
|
+
- spec/server_spec.rb
|
69
|
+
- spec/deploy_utils_spec.rb
|
70
|
+
- spec/rails_spec.rb
|
71
|
+
- spec/upstart_spec.rb
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
- spec/fixtures/simpleapp/simpleapp.box
|
74
|
+
- spec/fixtures/simpleapp/config.ru
|
75
|
+
- spec/fixtures/simpleapp/vendor/vendor.rb
|
76
|
+
- spec/fixtures/simpleapp/puppet/puppet.rb
|
77
|
+
- spec/fixtures/simpleapp/app/app.box
|
78
|
+
- spec/fixtures/simpleapp/app/a-non-cached.gem
|
79
|
+
- spec/fixtures/simpleapp/app/app.rb
|
80
|
+
- spec/fixtures/simpleapp/app/puppet-master.rb
|
78
81
|
homepage: http://torquebox.org/
|
79
|
-
licenses:
|
80
|
-
|
81
|
-
post_install_message:
|
82
|
+
licenses:
|
83
|
+
- lgpl
|
84
|
+
post_install_message:
|
82
85
|
rdoc_options: []
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
86
|
+
require_paths:
|
87
|
+
- lib
|
88
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
89
|
+
requirements:
|
90
|
+
- - ! '>='
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: !binary |-
|
93
|
+
MA==
|
87
94
|
none: false
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ! '>='
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: !binary |-
|
100
|
+
MA==
|
93
101
|
none: false
|
94
|
-
requirements:
|
95
|
-
- - ">="
|
96
|
-
- !ruby/object:Gem::Version
|
97
|
-
version: "0"
|
98
102
|
requirements: []
|
99
|
-
|
100
|
-
rubyforge_project:
|
103
|
+
rubyforge_project:
|
101
104
|
rubygems_version: 1.8.24
|
102
|
-
signing_key:
|
105
|
+
signing_key:
|
103
106
|
specification_version: 3
|
104
107
|
summary: TorqueBox Rake Support
|
105
|
-
test_files:
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
108
|
+
test_files:
|
109
|
+
- spec/server_spec.rb
|
110
|
+
- spec/deploy_utils_spec.rb
|
111
|
+
- spec/rails_spec.rb
|
112
|
+
- spec/upstart_spec.rb
|