shotgun 0.4 → 0.5

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.
Files changed (5) hide show
  1. data/Rakefile +2 -16
  2. data/bin/shotgun +14 -7
  3. data/lib/shotgun.rb +8 -9
  4. data/shotgun.gemspec +2 -3
  5. metadata +4 -4
data/Rakefile CHANGED
@@ -9,14 +9,8 @@ Rake::TestTask.new(:test) do |t|
9
9
  t.ruby_opts = ['-rubygems'] if defined? Gem
10
10
  end
11
11
 
12
- $spec =
13
- begin
14
- require 'rubygems/specification'
15
- data = File.read('shotgun.gemspec')
16
- spec = nil
17
- Thread.new { spec = eval("$SAFE = 3\n#{data}") }.join
18
- spec
19
- end
12
+ require 'rubygems'
13
+ $spec = eval(File.read('shotgun.gemspec'))
20
14
 
21
15
  def package(ext='')
22
16
  "pkg/#{$spec.name}-#{$spec.version}" + ext
@@ -46,11 +40,3 @@ file package('.tar.gz') => %w[pkg/] + $spec.files do |f|
46
40
  HEAD | gzip > #{f.name}
47
41
  SH
48
42
  end
49
-
50
- desc 'Publish gem and tarball to rubyforge'
51
- task 'release' => [package('.gem'), package('.tar.gz')] do |t|
52
- sh <<-end
53
- rubyforge add_release wink #{$spec.name} #{$spec.version} #{package('.gem')} &&
54
- rubyforge add_file wink #{$spec.name} #{$spec.version} #{package('.tar.gz')}
55
- end
56
- end
data/bin/shotgun CHANGED
@@ -1,14 +1,17 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- libdir = "#{File.dirname(File.dirname(__FILE__))}/lib"
4
- $LOAD_PATH.unshift libdir unless $LOAD_PATH.include?(libdir)
5
-
6
3
  require 'optparse'
7
4
 
8
- server = nil
5
+ begin
6
+ require 'thin'
7
+ server = 'thin'
8
+ rescue LoadError
9
+ server = nil
10
+ end
11
+
9
12
  env = ENV['RACK_ENV'] || 'development'
10
13
  browse = false
11
- options = {:Port => 9393, :Host => 'localhost', :AccessLog => []}
14
+ options = {:Port => 9393, :Host => 'localhost', :AccessLog => [], :Path => '/'}
12
15
 
13
16
  opts = OptionParser.new("", 24, ' ') { |opts|
14
17
  opts.banner = "Usage: shotgun [ruby options] [rack options] [rackup config]"
@@ -60,6 +63,10 @@ opts = OptionParser.new("", 24, ' ') { |opts|
60
63
  opts.separator ""
61
64
  opts.separator "Shotgun options:"
62
65
 
66
+ opts.on("-u", "--url URL", "specify url path (default: /)") { |url|
67
+ options[:Path] = url
68
+ }
69
+
63
70
  opts.on("-O", "--browse", "open browser immediately after starting") { |browse|
64
71
  browse = true
65
72
  }
@@ -127,10 +134,10 @@ require 'shotgun'
127
134
  app = Shotgun.new(config, app_wrapper)
128
135
 
129
136
  server.run app, options do |inst|
130
- puts "== Shotgun starting #{server.to_s} on #{options[:Host]}:#{options[:Port]}"
137
+ puts "== Shotgun starting #{server.to_s} on http://#{options[:Host]}:#{options[:Port]}"
131
138
 
132
139
  if browse
133
140
  require 'launchy'
134
- Launchy.open("http://#{options[:Host]}:#{options[:Port]}/")
141
+ Launchy.open("http://#{options[:Host]}:#{options[:Port]}#{options[:Path]}")
135
142
  end
136
143
  end
data/lib/shotgun.rb CHANGED
@@ -9,6 +9,7 @@ class Shotgun
9
9
  def initialize(rackup_file, wrapper=nil)
10
10
  @rackup_file = rackup_file
11
11
  @wrapper = wrapper || lambda { |inner_app| inner_app }
12
+ enable_copy_on_write
12
13
  end
13
14
 
14
15
  def call(env)
@@ -19,27 +20,21 @@ class Shotgun
19
20
  @env = env
20
21
  @reader, @writer = IO.pipe
21
22
 
22
- # Disable GC before forking in an attempt to get some advantage
23
- # out of COW.
24
- GC.disable
25
-
26
- if fork
23
+ if @child = fork
27
24
  proceed_as_parent
28
25
  else
29
26
  proceed_as_child
30
27
  end
31
-
32
- ensure
33
- GC.enable
34
28
  end
35
29
 
36
30
  # ==== Stuff that happens in the parent process
37
31
 
38
32
  def proceed_as_parent
33
+ rand # Reseeds
39
34
  @writer.close
40
35
  result = Marshal.load(@reader)
41
36
  @reader.close
42
- Process.wait
37
+ Process.wait(@child)
43
38
  if result.length == 3
44
39
  result
45
40
  else
@@ -96,4 +91,8 @@ class Shotgun
96
91
  body.each { |part| buf << part }
97
92
  buf
98
93
  end
94
+
95
+ def enable_copy_on_write
96
+ GC.copy_on_write_friendly = true if GC.respond_to?(:copy_on_write_friendly=)
97
+ end
99
98
  end
data/shotgun.gemspec CHANGED
@@ -3,8 +3,8 @@ Gem::Specification.new do |s|
3
3
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
4
4
 
5
5
  s.name = 'shotgun'
6
- s.version = '0.4'
7
- s.date = '2009-03-22'
6
+ s.version = '0.5'
7
+ s.date = '2010-01-16'
8
8
 
9
9
  s.description = "Because reloading sucks."
10
10
  s.summary = s.description
@@ -29,6 +29,5 @@ Gem::Specification.new do |s|
29
29
 
30
30
  s.homepage = "http://github.com/rtomayko/shotgun/"
31
31
  s.require_paths = %w[lib]
32
- s.rubyforge_project = 'wink'
33
32
  s.rubygems_version = '1.1.1'
34
33
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shotgun
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.4"
4
+ version: "0.5"
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Tomayko
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-03-22 00:00:00 -07:00
12
+ date: 2010-01-16 00:00:00 -08:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
@@ -73,8 +73,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
73
  version:
74
74
  requirements: []
75
75
 
76
- rubyforge_project: wink
77
- rubygems_version: 1.3.4
76
+ rubyforge_project:
77
+ rubygems_version: 1.3.5
78
78
  signing_key:
79
79
  specification_version: 2
80
80
  summary: Because reloading sucks.