unicorn 4.8.3 → 4.9.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e0d09e0beb210c82cd779da26aa87b47531a64be
4
- data.tar.gz: 84e371fff3dc40dd00716645d7227bae4f4a8541
3
+ metadata.gz: eb36b9475b9c42cef918fe7773660b06617272e9
4
+ data.tar.gz: d40b3581e0f24eee1d0bc99d17bd9bd7f85db7c7
5
5
  SHA512:
6
- metadata.gz: c9d40ccbff58e01074b8f1892b02150db4b0f5e49e57d69bbd109a24da4d68c26b0dda85edcbb3f3b5277690aeae6362a0ddc178c757f8671b7faf12751e1891
7
- data.tar.gz: a5a12b1bb5921dc2fb2437dbf029e92b54f4f29c8091272edaa37ee22f6ed5f384f004337aec0ecea2d3882c6793614baf2c14eeaf7d0f616b3191e426761a22
6
+ metadata.gz: 0310e0f14e7c7c82811d3e94990294b99f71d74109913941e71ad861744aae8c826858a3db2af83caf738045f3a879d78448d159604a41a0e041ac65d248edbe
7
+ data.tar.gz: 6ada5a75291f05a5250e1f7adc33133506632da6440d4a95454d4bb5cea33177b63be14e0fce0e048322debbf06dfd888e763734b0aab828c84fbf3659688edf
data/.document CHANGED
@@ -10,7 +10,6 @@ SIGNALS
10
10
  KNOWN_ISSUES
11
11
  TODO
12
12
  NEWS
13
- ChangeLog
14
13
  LATEST
15
14
  lib/unicorn.rb
16
15
  lib/unicorn/configurator.rb
data/.gitignore CHANGED
@@ -15,11 +15,11 @@ ext/unicorn_http/unicorn_http.c
15
15
  log/
16
16
  pkg/
17
17
  /vendor
18
- /NEWS
19
- /ChangeLog
18
+ /NEWS*
20
19
  /.manifest
21
20
  /GIT-VERSION-FILE
22
21
  /man
23
22
  /tmp
24
23
  /LATEST
25
24
  /lib/unicorn/version.rb
25
+ /*_1
@@ -3,9 +3,13 @@ cgit_url: http://bogomips.org/unicorn.git
3
3
  git_url: git://bogomips.org/unicorn.git
4
4
  rdoc_url: http://unicorn.bogomips.org/
5
5
  ml_url: http://bogomips.org/unicorn-public/
6
- changelog_start: v1.1.5
7
6
  merge_html:
8
7
  unicorn_1: Documentation/unicorn.1.html
9
8
  unicorn_rails_1: Documentation/unicorn_rails.1.html
9
+ noindex:
10
+ - Unicorn::Const
11
+ - LATEST
12
+ - TODO
13
+ - unicorn_rails_1
10
14
  public_email: unicorn-public@bogomips.org
11
15
  private_email: unicorn@bogomips.org
@@ -163,6 +163,13 @@ set in the old master process are inherited by the new master process.
163
163
  Unicorn only uses (and will overwrite) the UNICORN_FD environment
164
164
  variable internally when doing transparent upgrades.
165
165
 
166
+ UNICORN_FD is a comma-delimited list of one or more file descriptors
167
+ used to implement USR2 upgrades. Init systems may bind listen sockets
168
+ itself and spawn unicorn with UNICORN_FD set to the file descriptor
169
+ numbers of the listen socket(s). The unicorn CONFIG_FILE must still
170
+ have the inherited listen socket parameters defined as in a normal
171
+ startup, otherwise the socket will be closed.
172
+
166
173
  # SEE ALSO
167
174
 
168
175
  * unicorn_rails(1)
data/FAQ CHANGED
@@ -1,6 +1,14 @@
1
1
  = Frequently Asked Questions about Unicorn
2
2
 
3
- === I've installed Rack 1.1.x, why can't Unicorn load Rails (2.3.5)?
3
+ === Why aren't my Rails log files rotated when I use SIGUSR1?
4
+
5
+ The Rails autoflush_log option must remain disabled with multiprocess
6
+ servers such as unicorn. Buffering in userspace may cause lines to be
7
+ partially written and lead to corruption in the presence of multiple
8
+ processes. With reasonable amounts of logging, the performance impact
9
+ of autoflush_log should be negligible on Linux and other modern kernels.
10
+
11
+ === I've installed Rack 1.1.x, why can't Unicorn load Rails (2.3.5)?
4
12
 
5
13
  Rails 2.3.5 is not compatible with Rack 1.1.x. Unicorn is compatible
6
14
  with both Rack 1.1.x and Rack 1.0.x, and RubyGems will load the latest
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- DEF_VER = "v4.8.3"
2
+ DEF_VER = "v4.9.0"
3
3
  CONSTANT = "Unicorn::Const::UNICORN_VERSION"
4
4
  RVF = "lib/unicorn/version.rb"
5
5
  GVF = "GIT-VERSION-FILE"
@@ -8,6 +8,8 @@ RUBY = ruby
8
8
  RAKE = rake
9
9
  RAGEL = ragel
10
10
  RSYNC = rsync
11
+ OLDDOC = olddoc
12
+ RDOC = rdoc
11
13
 
12
14
  GIT-VERSION-FILE: .FORCE-GIT-VERSION-FILE
13
15
  @./GIT-VERSION-GEN
@@ -23,11 +25,7 @@ endif
23
25
 
24
26
  RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
25
27
 
26
- isolate_libs := tmp/isolate/$(RUBY_ENGINE)-$(RUBY_VERSION).mk
27
- $(isolate_libs): script/isolate_for_tests
28
- @$(RUBY) script/isolate_for_tests
29
- -include $(isolate_libs)
30
- MYLIBS = $(RUBYLIB):$(ISOLATE_LIBS)
28
+ MYLIBS = $(RUBYLIB)
31
29
 
32
30
  # dunno how to implement this as concisely in Ruby, and hell, I love awk
33
31
  awk_slow := awk '/def test_/{print FILENAME"--"$$2".n"}' 2>/dev/null
@@ -59,10 +57,11 @@ $(ext)/Makefile: $(ext)/extconf.rb $(c_files)
59
57
  cd $(@D) && $(RUBY) extconf.rb
60
58
  $(ext)/unicorn_http.$(DLEXT): $(ext)/Makefile
61
59
  $(MAKE) -C $(@D)
62
- lib/unicorn_http.$(DLEXT): $(ext)/unicorn_http.$(DLEXT)
63
- @mkdir -p lib
64
- install -m644 $< $@
65
- http: lib/unicorn_http.$(DLEXT)
60
+ http: $(ext)/unicorn_http.$(DLEXT)
61
+
62
+ # only used for tests
63
+ http-install: $(ext)/unicorn_http.$(DLEXT)
64
+ install -m644 $< lib/
66
65
 
67
66
  test-install: $(test_prefix)/.stamp
68
67
  $(test_prefix)/.stamp: $(inst_deps)
@@ -70,7 +69,7 @@ $(test_prefix)/.stamp: $(inst_deps)
70
69
  tar cf - $(inst_deps) GIT-VERSION-GEN | \
71
70
  (cd $(test_prefix) && tar xf -)
72
71
  $(MAKE) -C $(test_prefix) clean
73
- $(MAKE) -C $(test_prefix) http shebang RUBY="$(RUBY)"
72
+ $(MAKE) -C $(test_prefix) http-install shebang RUBY="$(RUBY)"
74
73
  > $@
75
74
 
76
75
  # this is only intended to be run within $(test_prefix)
@@ -120,20 +119,19 @@ run_test = $(quiet_pre) \
120
119
  %.n: arg = $(subst .n,,$(subst --, -n ,$@))
121
120
  %.n: t = $(subst .n,$(log_suffix),$@)
122
121
  %.n: export PATH := $(test_prefix)/bin:$(PATH)
123
- %.n: export RUBYLIB := $(test_prefix):$(test_prefix)/lib:$(MYLIBS)
122
+ %.n: export RUBYLIB := $(test_prefix)/lib:$(MYLIBS)
124
123
  %.n: $(test_prefix)/.stamp
125
124
  $(run_test)
126
125
 
127
126
  $(T): arg = $@
128
127
  $(T): t = $(subst .rb,$(log_suffix),$@)
129
128
  $(T): export PATH := $(test_prefix)/bin:$(PATH)
130
- $(T): export RUBYLIB := $(test_prefix):$(test_prefix)/lib:$(MYLIBS)
129
+ $(T): export RUBYLIB := $(test_prefix)/lib:$(MYLIBS)
131
130
  $(T): $(test_prefix)/.stamp
132
131
  $(run_test)
133
132
 
134
133
  install: $(bins) $(ext)/unicorn_http.c
135
134
  $(prep_setup_rb)
136
- $(RM) lib/unicorn_http.$(DLEXT)
137
135
  $(RM) -r .install-tmp
138
136
  mkdir .install-tmp
139
137
  cp -p bin/* .install-tmp
@@ -149,42 +147,41 @@ prep_setup_rb := @-$(RM) $(setup_rb_files);$(MAKE) -C $(ext) clean
149
147
  clean:
150
148
  -$(MAKE) -C $(ext) clean
151
149
  -$(MAKE) -C Documentation clean
152
- $(RM) $(ext)/Makefile lib/unicorn_http.$(DLEXT)
150
+ $(RM) $(ext)/Makefile
153
151
  $(RM) $(setup_rb_files) $(t_log)
154
152
  $(RM) -r $(test_prefix) man
155
153
 
156
154
  man html:
157
155
  $(MAKE) -C Documentation install-$@
158
156
 
159
- pkg_extra := GIT-VERSION-FILE lib/unicorn/version.rb ChangeLog LATEST NEWS \
157
+ pkg_extra := GIT-VERSION-FILE lib/unicorn/version.rb LATEST NEWS \
160
158
  $(ext)/unicorn_http.c $(man1_paths)
161
159
 
162
- ChangeLog: GIT-VERSION-FILE .wrongdoc.yml
163
- wrongdoc prepare
160
+ NEWS:
161
+ $(OLDDOC) prepare
164
162
 
165
- .manifest: ChangeLog $(ext)/unicorn_http.c man
163
+ .manifest: $(ext)/unicorn_http.c man NEWS
166
164
  (git ls-files && for i in $@ $(pkg_extra); do echo $$i; done) | \
167
165
  LC_ALL=C sort > $@+
168
166
  cmp $@+ $@ || mv $@+ $@
169
167
  $(RM) $@+
170
168
 
171
- doc: .document $(ext)/unicorn_http.c man html .wrongdoc.yml
172
- for i in $(man1_rdoc); do echo > $$i; done
169
+ PLACEHOLDERS = $(man1_rdoc)
170
+ doc: .document $(ext)/unicorn_http.c man html .olddoc.yml $(PLACEHOLDERS)
173
171
  find bin lib -type f -name '*.rbc' -exec rm -f '{}' ';'
174
172
  $(RM) -r doc
175
- wrongdoc all
173
+ $(OLDDOC) prepare
174
+ $(RDOC) -f oldweb
175
+ $(OLDDOC) merge
176
176
  install -m644 COPYING doc/COPYING
177
177
  install -m644 $(shell LC_ALL=C grep '^[A-Z]' .document) doc/
178
178
  install -m644 $(man1_paths) doc/
179
179
  tar cf - $$(git ls-files examples/) | (cd doc && tar xf -)
180
- $(RM) $(man1_rdoc)
181
180
 
182
181
  # publishes docs to http://unicorn.bogomips.org
183
182
  publish_doc:
184
183
  -git set-file-times
185
184
  $(MAKE) doc
186
- find doc/images -type f | \
187
- TZ=UTC xargs touch -d '1970-01-01 00:00:02' doc/rdoc.css
188
185
  $(MAKE) doc_gz
189
186
  chmod 644 $$(find doc -type f)
190
187
  $(RSYNC) -av doc/ unicorn.bogomips.org:/srv/unicorn/
@@ -192,27 +189,15 @@ publish_doc:
192
189
 
193
190
  # Create gzip variants of the same timestamp as the original so nginx
194
191
  # "gzip_static on" can serve the gzipped versions directly.
195
- doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.\(gif\|jpg\|png\|gz\)$$')
192
+ doc_gz: docs = $(shell find doc -type f ! -regex '^.*\.gz$$')
196
193
  doc_gz:
197
194
  for i in $(docs); do \
198
195
  gzip --rsyncable -9 < $$i > $$i.gz; touch -r $$i $$i.gz; done
199
196
 
200
197
  ifneq ($(VERSION),)
201
- rfproject := mongrel
202
198
  rfpackage := unicorn
203
199
  pkggem := pkg/$(rfpackage)-$(VERSION).gem
204
200
  pkgtgz := pkg/$(rfpackage)-$(VERSION).tgz
205
- release_notes := release_notes-$(VERSION)
206
- release_changes := release_changes-$(VERSION)
207
-
208
- release-notes: $(release_notes)
209
- release-changes: $(release_changes)
210
- $(release_changes):
211
- wrongdoc release_changes > $@+
212
- $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
213
- $(release_notes):
214
- wrongdoc release_notes > $@+
215
- $(VISUAL) $@+ && test -s $@+ && mv $@+ $@
216
201
 
217
202
  # ensures we're actually on the tagged $(VERSION), only used for release
218
203
  verify:
@@ -248,20 +233,16 @@ $(pkgtgz): .manifest fix-perms
248
233
 
249
234
  package: $(pkgtgz) $(pkggem)
250
235
 
251
- release: verify package $(release_notes) $(release_changes)
252
- # make tgz release on RubyForge
253
- rubyforge add_release -f -n $(release_notes) -a $(release_changes) \
254
- $(rfproject) $(rfpackage) $(VERSION) $(pkgtgz)
236
+ release: verify package
255
237
  # push gem to Gemcutter
256
238
  gem push $(pkggem)
257
- # in case of gem downloads from RubyForge releases page
258
- -rubyforge add_file \
259
- $(rfproject) $(rfpackage) $(VERSION) $(pkggem)
260
- $(RAKE) fm_update VERSION=$(VERSION)
261
239
  else
262
240
  gem install-gem: GIT-VERSION-FILE
263
241
  $(MAKE) $@ VERSION=$(GIT_VERSION)
264
242
  endif
265
243
 
244
+ $(PLACEHOLDERS):
245
+ echo olddoc_placeholder > $@
246
+
266
247
  .PHONY: .FORCE-GIT-VERSION-FILE doc $(T) $(slow_tests) man
267
248
  .PHONY: test-install
data/HACKING CHANGED
@@ -19,13 +19,6 @@ RubyGems.
19
19
  Users of GNU-based systems (such as GNU/Linux) usually have GNU make
20
20
  installed as "make" instead of "gmake".
21
21
 
22
- Since we don't load RubyGems by default, loading Rack properly requires
23
- setting up RUBYLIB to point to where Rack is located. Not loading
24
- RubyGems drastically lowers the time to run the full test suite. You
25
- may setup a "local.mk" file in the top-level working directory to setup
26
- your RUBYLIB and any other environment variables. A "local.mk.sample"
27
- file is provided for reference.
28
-
29
22
  Running the entire test suite with 4 tests in parallel:
30
23
 
31
24
  gmake -j4 check
@@ -57,10 +50,8 @@ programming experience will come in handy (or be learned) here.
57
50
 
58
51
  === Documentation
59
52
 
60
- We use RDoc 2.5.x with Darkfish for documentation as much as possible,
61
- if you're on Ruby 1.8 you want to install the latest "rdoc" gem. Due to
62
- the lack of RDoc-to-manpage converters we know about, we're writing
63
- manpages in Markdown and converting to troff/HTML with Pandoc.
53
+ Due to the lack of RDoc-to-manpage converters we know about, we're
54
+ writing manpages in Markdown and converting to troff/HTML with Pandoc.
64
55
 
65
56
  Please wrap documentation at 72 characters-per-line or less (long URLs
66
57
  are exempt) so it is comfortably readable from terminals.
@@ -72,10 +63,9 @@ becomes unavailable.
72
63
 
73
64
  === Ruby/C Compatibility
74
65
 
75
- We target Ruby 1.8.6+, 1.9 and will target Rubinius as it becomes
76
- production-ready. We need the Ruby implementation to support fork,
77
- exec, pipe, UNIX signals, access to integer file descriptors and
78
- ability to use unlinked files.
66
+ We target mainline Ruby 1.9.3 and later. We need the Ruby
67
+ implementation to support fork, exec, pipe, UNIX signals, access to
68
+ integer file descriptors and ability to use unlinked files.
79
69
 
80
70
  All of our C code is OS-independent and should run on compilers
81
71
  supported by the versions of Ruby we target.
@@ -114,7 +104,7 @@ don't email the git mailing list or maintainer with Unicorn patches :)
114
104
 
115
105
  In order to build the gem, you must install the following components:
116
106
 
117
- * wrongdoc
107
+ * olddoc (RubyGem)
118
108
  * pandoc
119
109
 
120
110
  You can build the Unicorn gem with the following command:
@@ -125,13 +115,6 @@ You can build the Unicorn gem with the following command:
125
115
 
126
116
  It is easy to install the contents of your git working directory:
127
117
 
128
- Via RubyGems (RubyGems 1.3.5+ recommended for prerelease versions):
118
+ Via RubyGems
129
119
 
130
120
  gmake install-gem
131
-
132
- Without RubyGems (via setup.rb):
133
-
134
- gmake install
135
-
136
- It is not at all recommended to mix a RubyGems installation with an
137
- installation done without RubyGems, however.
data/ISSUES CHANGED
@@ -6,7 +6,7 @@ submit patches and/or obtain support after you have searched the
6
6
  {documentation}[http://unicorn.bogomips.org/].
7
7
 
8
8
  * No subscription will ever be required to email the public inbox.
9
- * Please Cc: all participants in a thread, as there are no subscribers
9
+ * Cc: all participants in a thread or commit, as subscription is optional
10
10
  * Do not {top post}[http://catb.org/jargon/html/T/top-post.html] in replies
11
11
  * Quote as little as possible of the message you're replying to
12
12
  * Do not send HTML mail, it will likely be flagged as spam
@@ -18,6 +18,40 @@ instead and your issue will be handled discreetly.
18
18
  If you don't get a response within a few days, we may have forgotten
19
19
  about it so feel free to ask again.
20
20
 
21
+ == Bugs in related projects
22
+
23
+ unicorn is sometimes affected by bugs in its dependencies. Bugs
24
+ triggered by unicorn in mainline Ruby, rack, GNU C library (glibc),
25
+ or the Linux kernel will be reported upstream and fixed.
26
+
27
+ For bugs in Ruby itself, we may forward bugs to
28
+ https://bugs.ruby-lang.org/ and discuss+fix them on the ruby-core
29
+ list at mailto:ruby-core@ruby-lang.org
30
+ Subscription to post is required to ruby-core, unfortunately:
31
+ mailto:ruby-core-request@ruby-lang.org?subject=subscribe
32
+
33
+ For uncommon bugs in Rack, we may forward bugs to
34
+ mailto:rack-devel@googlegroups.com and discuss there.
35
+ Subscription (without any web UI or Google account) is possible via:
36
+ mailto:rack-devel+subscribe@googlegroups.com
37
+ Note: not everyone can use the proprietary bug tracker used by Rack,
38
+ but their mailing list remains operational.
39
+
40
+ Uncommon bugs we encounter in the Linux kernel should be Cc:-ed to the
41
+ Linux kernel mailing list (LKML) at mailto:linux-kernel@vger.kernel.org
42
+ and subsystem maintainers such as mailto:netdev@vger.kernel.org
43
+ (for networking issues). It is expected practice to Cc: anybody
44
+ involved with any problematic commits (including those in the
45
+ Signed-off-by: and other trailer lines). No subscription is necessary,
46
+ and the our mailing list follows the same conventions as LKML for
47
+ interopability. There is a kernel.org Bugzilla instance, but it is
48
+ ignored by most developers.
49
+
50
+ Likewise for any rare glibc bugs we might encounter, we should Cc:
51
+ mailto:libc-alpha@sourceware.org
52
+ Keep in mind glibc upstream does use Bugzilla for tracking bugs:
53
+ https://sourceware.org/bugzilla/
54
+
21
55
  == Submitting Patches
22
56
 
23
57
  See the HACKING document (and additionally, the
@@ -29,8 +63,14 @@ document distributed with git) on guidelines for patch submission.
29
63
  * public: mailto:unicorn-public@bogomips.org
30
64
  * private: mailto:unicorn@bogomips.org
31
65
 
32
- We operate a {public-inbox}[http://public-inbox.org/].
33
- You may subscribe using {ssoma}[http://ssoma.public-inbox.org/]:
66
+ We operate a {public-inbox}[http://public-inbox.org/] which
67
+ feeds the mailing list. You may subscribe either using
68
+ {ssoma}[http://ssoma.public-inbox.org/] or by sending a mail
69
+ to mailto:unicorn-public+subscribe@bogomips.org
70
+
71
+ ssoma is a mail archiver/fetcher using git. It operates in a similar
72
+ fashion to tools such as slrnpull, fetchmail, or getmail. ssoma
73
+ subscription instructions:
34
74
 
35
75
  URL=git://bogomips.org/unicorn-public
36
76
  LISTNAME=unicorn
@@ -17,16 +17,6 @@ acceptable solution. Those issues are documented here.
17
17
  have builtin workarounds for Kernel#rand and OpenSSL::Random users,
18
18
  but applications may use other PRNGs.
19
19
 
20
- * Under some versions of Ruby 1.8, it is necessary to call +srand+ in an
21
- after_fork hook to get correct random number generation. We have a builtin
22
- workaround for this starting with \Unicorn 3.6.1
23
-
24
- See http://redmine.ruby-lang.org/issues/show/4338
25
-
26
- * On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken
27
- stdio that causes failure for file uploads larger than 112K. Upgrade
28
- your version of Ruby or continue using Unicorn 1.x/3.4.x.
29
-
30
20
  * For notes on sandboxing tools such as Bundler or Isolate,
31
21
  see the {Sandbox}[link:Sandbox.html] page.
32
22
 
@@ -44,6 +34,16 @@ acceptable solution. Those issues are documented here.
44
34
 
45
35
  == Known Issues (Old)
46
36
 
37
+ * Under some versions of Ruby 1.8, it is necessary to call +srand+ in an
38
+ after_fork hook to get correct random number generation. We have a builtin
39
+ workaround for this starting with \Unicorn 3.6.1
40
+
41
+ See http://redmine.ruby-lang.org/issues/show/4338
42
+
43
+ * On Ruby 1.8 prior to Ruby 1.8.7-p248, *BSD platforms have a broken
44
+ stdio that causes failure for file uploads larger than 112K. Upgrade
45
+ your version of Ruby or continue using Unicorn 1.x/3.4.x.
46
+
47
47
  * Under Ruby 1.9.1, methods like Array#shuffle and Array#sample will
48
48
  segfault if called after forking. Upgrade to Ruby 1.9.2 or call
49
49
  "Kernel.rand" in your after_fork hook to reinitialize the random
data/Links CHANGED
@@ -45,7 +45,10 @@ or services behind them.
45
45
  * {Green Unicorn}[http://gunicorn.org/] - a Python version of \Unicorn
46
46
 
47
47
  * {Rainbows!}[http://rainbows.bogomips.org/] - \Unicorn for sleepy
48
- apps and slow clients.
48
+ apps and slow clients (historical).
49
+
50
+ * {yahns}[http://yahns.yhbt.net/] - like Rainbows!, but with fewer options
51
+ and designed for energy efficiency on idle sites.
49
52
 
50
53
  === Prior Work
51
54
 
data/README CHANGED
@@ -12,7 +12,8 @@ both the the request and response in between \Unicorn and slow clients.
12
12
  cut out everything that is better supported by the operating system,
13
13
  {nginx}[http://nginx.net/] or {Rack}[http://rack.github.io/].
14
14
 
15
- * Compatible with Ruby 1.8 and later. Rubinius support is in-progress.
15
+ * Compatible with Ruby 1.9.3 and later.
16
+ unicorn 4.8.x will remain supported for Ruby 1.8 users.
16
17
 
17
18
  * Process management: \Unicorn will reap and restart workers that
18
19
  die from broken apps. There is no need to manage multiple processes
@@ -95,13 +96,13 @@ from git.
95
96
 
96
97
  == Usage
97
98
 
98
- === non-Rails Rack applications
99
+ === Rack (including Rails 3+) applications
99
100
 
100
101
  In APP_ROOT, run:
101
102
 
102
103
  unicorn
103
104
 
104
- === for Rails applications (should work for all 1.2 or later versions)
105
+ === Ancient Rails 1.2 - 2.x versions
105
106
 
106
107
  In RAILS_ROOT, run:
107
108
 
@@ -122,8 +123,7 @@ The default settings are designed for maximum out-of-the-box
122
123
  compatibility with existing applications.
123
124
 
124
125
  Most command-line options for other Rack applications (above) are also
125
- supported. Run `unicorn -h` or `unicorn_rails -h` to see command-line
126
- options.
126
+ supported. Run `unicorn -h` to see command-line options.
127
127
 
128
128
  == Disclaimer
129
129
 
data/Rakefile CHANGED
@@ -1,47 +1,3 @@
1
- # -*- encoding: binary -*-
2
- autoload :Gem, 'rubygems'
3
- require 'wrongdoc'
4
-
5
- cgit_url = Wrongdoc.config[:cgit_url]
6
- git_url = Wrongdoc.config[:git_url]
7
-
8
- desc "post to FM"
9
- task :fm_update do
10
- require 'tempfile'
11
- require 'net/http'
12
- require 'net/netrc'
13
- require 'json'
14
- version = ENV['VERSION'] or abort "VERSION= needed"
15
- uri = URI.parse('https://freecode.com/projects/unicorn/releases.json')
16
- rc = Net::Netrc.locate('unicorn-fm') or abort "~/.netrc not found"
17
- api_token = rc.password
18
- _, subject, body = `git cat-file tag v#{version}`.split(/\n\n/, 3)
19
- tmp = Tempfile.new('fm-changelog')
20
- tmp.puts subject
21
- tmp.puts
22
- tmp.puts body
23
- tmp.flush
24
- system(ENV["VISUAL"], tmp.path) or abort "#{ENV["VISUAL"]} failed: #$?"
25
- changelog = File.read(tmp.path).strip
26
-
27
- req = {
28
- "auth_code" => api_token,
29
- "release" => {
30
- "tag_list" => "Experimental",
31
- "version" => version,
32
- "changelog" => changelog,
33
- },
34
- }.to_json
35
-
36
- if ! changelog.strip.empty? && version =~ %r{\A[\d\.]+\d+\z}
37
- Net::HTTP.start(uri.host, uri.port, :use_ssl => true) do |http|
38
- p http.post(uri.path, req, {'Content-Type'=>'application/json'})
39
- end
40
- else
41
- warn "not updating freshmeat for v#{version}"
42
- end
43
- end
44
-
45
1
  # optional rake-compiler support in case somebody needs to cross compile
46
2
  begin
47
3
  mk = "ext/unicorn_http/Makefile"
data/Sandbox CHANGED
@@ -86,7 +86,7 @@ For now workarounds include doing one of the following:
86
86
 
87
87
  3. Explicitly setting RUBYLIB or $LOAD_PATH to include any gem path
88
88
  where the unicorn gem is installed
89
- (e.g. /usr/lib/ruby/gems/1.9.1/gems/unicorn-VERSION/lib)
89
+ (e.g. /usr/lib/ruby/gems/1.9.3/gems/unicorn-VERSION/lib)
90
90
 
91
91
  === RUBYOPT pollution from SIGUSR2 upgrades
92
92
 
@@ -54,12 +54,23 @@ GC.respond_to?(:copy_on_write_friendly=) and
54
54
  # fast LAN.
55
55
  check_client_connection false
56
56
 
57
+ # local variable to guard against running a hook multiple times
58
+ run_once = true
59
+
57
60
  before_fork do |server, worker|
58
61
  # the following is highly recomended for Rails + "preload_app true"
59
62
  # as there's no need for the master process to hold a connection
60
63
  defined?(ActiveRecord::Base) and
61
64
  ActiveRecord::Base.connection.disconnect!
62
65
 
66
+ # Occasionally, it may be necessary to run non-idempotent code in the
67
+ # master before forking. Keep in mind the above disconnect! example
68
+ # is idempotent and does not need a guard.
69
+ if run_once
70
+ # do_something_once_here ...
71
+ run_once = false # prevent from firing again
72
+ end
73
+
63
74
  # The following is only recommended for memory/DB-constrained
64
75
  # installations. It is not needed if your system can house
65
76
  # twice as many worker_processes as you have configured.
@@ -67,6 +67,7 @@ module Unicorn
67
67
  use Rack::CommonLogger, $stderr
68
68
  use Rack::ShowExceptions
69
69
  use Rack::Lint
70
+ use Rack::TempfileReaper if Rack.const_defined?(:TempfileReaper)
70
71
  run inner_app
71
72
  end.to_app
72
73
  when "deployment"
@@ -74,6 +75,7 @@ module Unicorn
74
75
  use Rack::ContentLength
75
76
  use Rack::Chunked
76
77
  use Rack::CommonLogger, $stderr
78
+ use Rack::TempfileReaper if Rack.const_defined?(:TempfileReaper)
77
79
  run inner_app
78
80
  end.to_app
79
81
  else
@@ -309,8 +309,6 @@ class Unicorn::Configurator
309
309
  # to receive IPv4 queries on dual-stack systems. A separate IPv4-only
310
310
  # listener is required if this is true.
311
311
  #
312
- # This option is only available for Ruby 1.9.2 and later.
313
- #
314
312
  # Enabling this option for the IPv6-only listener and having a
315
313
  # separate IPv4 listener is recommended if you wish to support IPv6
316
314
  # on the same TCP port. Otherwise, the value of \env[\"REMOTE_ADDR\"]
@@ -69,7 +69,7 @@ class Unicorn::HttpServer
69
69
  # you can set the following in your Unicorn config file, HUP and then
70
70
  # continue with the traditional USR2 + QUIT upgrade steps:
71
71
  #
72
- # Unicorn::HttpServer::START_CTX[0] = "/home/bofh/1.9.2/bin/unicorn"
72
+ # Unicorn::HttpServer::START_CTX[0] = "/home/bofh/2.2.0/bin/unicorn"
73
73
  START_CTX = {
74
74
  :argv => ARGV.map { |arg| arg.dup },
75
75
  0 => $0.dup,
@@ -389,6 +389,10 @@ class Unicorn::HttpServer
389
389
 
390
390
  # wait for a signal hander to wake us up and then consume the pipe
391
391
  def master_sleep(sec)
392
+ # 11 bytes is the maximum string length which can be embedded within
393
+ # the Ruby itself and not require a separate malloc (on 32-bit MRI 1.9+).
394
+ # Most reads are only one byte here and uncommon, so it's not worth a
395
+ # persistent buffer, either:
392
396
  IO.select([ SELF_PIPE[0] ], nil, nil, sec) or return
393
397
  SELF_PIPE[0].kgio_tryread(11)
394
398
  end
@@ -28,13 +28,20 @@ class Unicorn::TeeInput < Unicorn::StreamInput
28
28
  @@client_body_buffer_size
29
29
  end
30
30
 
31
+ # for Rack::TempfileReaper in rack 1.6+
32
+ def new_tmpio # :nodoc:
33
+ tmpio = Unicorn::TmpIO.new
34
+ (@parser.env['rack.tempfiles'] ||= []) << tmpio
35
+ tmpio
36
+ end
37
+
31
38
  # Initializes a new TeeInput object. You normally do not have to call
32
39
  # this unless you are writing an HTTP server.
33
40
  def initialize(socket, request)
34
41
  @len = request.content_length
35
42
  super
36
43
  @tmp = @len && @len <= @@client_body_buffer_size ?
37
- StringIO.new("") : Unicorn::TmpIO.new
44
+ StringIO.new("") : new_tmpio
38
45
  end
39
46
 
40
47
  # :call-seq:
@@ -26,4 +26,7 @@ class Unicorn::TmpIO < File
26
26
  def size
27
27
  stat.size
28
28
  end unless File.method_defined?(:size)
29
+
30
+ # pretend we're Tempfile for Rack::TempfileReaper
31
+ alias close! close
29
32
  end
@@ -17,11 +17,7 @@ endif
17
17
  RUBY_ENGINE := $(shell $(RUBY) -e 'puts((RUBY_ENGINE rescue "ruby"))')
18
18
  export RUBY_ENGINE
19
19
 
20
- isolate_libs := ../tmp/isolate/$(RUBY_ENGINE)-$(RUBY_VERSION).mk
21
- $(isolate_libs): ../script/isolate_for_tests
22
- @cd .. && $(RUBY) script/isolate_for_tests
23
- -include $(isolate_libs)
24
- MYLIBS := $(RUBYLIB):$(ISOLATE_LIBS)
20
+ MYLIBS := $(RUBYLIB)
25
21
 
26
22
  T = $(wildcard t[0-9][0-9][0-9][0-9]-*.sh)
27
23
 
data/t/README CHANGED
@@ -10,7 +10,7 @@ comfortable writing integration tests with.
10
10
 
11
11
  == Requirements
12
12
 
13
- * {Ruby 1.8 or 1.9}[http://www.ruby-lang.org/] (duh!)
13
+ * {Ruby 1.9.3+}[https://www.ruby-lang.org/] (duh!)
14
14
  * {GNU make}[http://www.gnu.org/software/make/]
15
15
  * {socat}[http://www.dest-unreach.org/socat/]
16
16
  * {curl}[http://curl.haxx.se/]
@@ -42,7 +42,7 @@ t_begin "send a huge Request URI (REQUEST_PATH > (12 * 1024))" && {
42
42
  }
43
43
 
44
44
  t_begin "response should be a 414 (REQUEST_PATH)" && {
45
- grep -F 'HTTP/1.1 414 Request-URI Too Long' $tmp
45
+ grep -F 'HTTP/1.1 414 ' $tmp
46
46
  }
47
47
 
48
48
  t_begin "send a huge Request URI (QUERY_STRING > (10 * 1024))" && {
@@ -63,7 +63,7 @@ t_begin "send a huge Request URI (QUERY_STRING > (10 * 1024))" && {
63
63
  }
64
64
 
65
65
  t_begin "response should be a 414 (QUERY_STRING)" && {
66
- grep -F 'HTTP/1.1 414 Request-URI Too Long' $tmp
66
+ grep -F 'HTTP/1.1 414 ' $tmp
67
67
  }
68
68
 
69
69
  t_begin "send a huge Request URI (FRAGMENT > 1024)" && {
@@ -84,7 +84,7 @@ t_begin "send a huge Request URI (FRAGMENT > 1024)" && {
84
84
  }
85
85
 
86
86
  t_begin "response should be a 414 (FRAGMENT)" && {
87
- grep -F 'HTTP/1.1 414 Request-URI Too Long' $tmp
87
+ grep -F 'HTTP/1.1 414 ' $tmp
88
88
  }
89
89
 
90
90
  t_begin "server stderr should be clean" && check_stderr
@@ -2,7 +2,7 @@
2
2
 
3
3
  # Copyright (c) 2009 Eric Wong
4
4
  FLOCK_PATH = File.expand_path(__FILE__)
5
- require 'test/test_helper'
5
+ require './test/test_helper'
6
6
 
7
7
  do_test = true
8
8
  $unicorn_bin = ENV['UNICORN_TEST_BIN'] || "unicorn"
@@ -1,10 +1,10 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- # Copyright (c) 2005 Zed A. Shaw
3
+ # Copyright (c) 2005 Zed A. Shaw
4
4
  # You can redistribute it and/or modify it under the same terms as Ruby 1.8 or
5
5
  # the GPLv2+ (GPLv3+ preferred)
6
6
  #
7
- # Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
7
+ # Additional work donated by contributors. See git history
8
8
  # for more information.
9
9
 
10
10
  STDIN.sync = STDOUT.sync = STDERR.sync = true # buffering makes debugging hard
@@ -1,13 +1,13 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- # Copyright (c) 2005 Zed A. Shaw
3
+ # Copyright (c) 2005 Zed A. Shaw
4
4
  # You can redistribute it and/or modify it under the same terms as Ruby 1.8 or
5
5
  # the GPLv2+ (GPLv3+ preferred)
6
6
  #
7
- # Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
7
+ # Additional work donated by contributors. See git history
8
8
  # for more information.
9
9
 
10
- require 'test/test_helper'
10
+ require './test/test_helper'
11
11
 
12
12
  include Unicorn
13
13
 
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- require 'test/test_helper'
3
+ require './test/test_helper'
4
4
  require 'digest/md5'
5
5
 
6
6
  include Unicorn
@@ -1,5 +1,5 @@
1
1
  # -*- encoding: binary -*-
2
- require 'test/test_helper'
2
+ require './test/test_helper'
3
3
 
4
4
  include Unicorn
5
5
 
@@ -4,7 +4,7 @@
4
4
  # You can redistribute it and/or modify it under the same terms as Ruby 1.8 or
5
5
  # the GPLv2+ (GPLv3+ preferred)
6
6
 
7
- require 'test/test_helper'
7
+ require './test/test_helper'
8
8
 
9
9
  include Unicorn
10
10
 
@@ -1,13 +1,13 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- # Copyright (c) 2005 Zed A. Shaw
3
+ # Copyright (c) 2005 Zed A. Shaw
4
4
  # You can redistribute it and/or modify it under the same terms as Ruby 1.8 or
5
5
  # the GPLv2+ (GPLv3+ preferred)
6
6
  #
7
- # Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
7
+ # Additional work donated by contributors. See git history
8
8
  # for more information.
9
9
 
10
- require 'test/test_helper'
10
+ require './test/test_helper'
11
11
  require 'time'
12
12
 
13
13
  include Unicorn
@@ -1,13 +1,13 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- # Copyright (c) 2005 Zed A. Shaw
3
+ # Copyright (c) 2005 Zed A. Shaw
4
4
  # You can redistribute it and/or modify it under the same terms as Ruby 1.8 or
5
5
  # the GPLv2+ (GPLv3+ preferred)
6
6
  #
7
- # Additional work donated by contributors. See http://mongrel.rubyforge.org/attributions.html
7
+ # Additional work donated by contributors. See git history
8
8
  # for more information.
9
9
 
10
- require 'test/test_helper'
10
+ require './test/test_helper'
11
11
 
12
12
  include Unicorn
13
13
 
@@ -6,7 +6,7 @@
6
6
  #
7
7
  # Ensure we stay sane in the face of signals being sent to us
8
8
 
9
- require 'test/test_helper'
9
+ require './test/test_helper'
10
10
 
11
11
  include Unicorn
12
12
 
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- require 'test/test_helper'
3
+ require './test/test_helper'
4
4
  require 'tempfile'
5
5
 
6
6
  class TestSocketHelper < Test::Unit::TestCase
@@ -182,8 +182,8 @@ class TestSocketHelper < Test::Unit::TestCase
182
182
  sock = bind_listen "[#@test6_addr]:#{port}", :ipv6only => true
183
183
  cur = sock.getsockopt(:IPPROTO_IPV6, :IPV6_V6ONLY).unpack('i')[0]
184
184
  assert_equal 1, cur
185
- rescue Errno::EAFNOSUPPORT
186
- end if RUBY_VERSION >= "1.9.2"
185
+ rescue Errno::EAFNOSUPPORT
186
+ end
187
187
 
188
188
  def test_reuseport
189
189
  port = unused_port @test_addr
@@ -193,5 +193,5 @@ class TestSocketHelper < Test::Unit::TestCase
193
193
  assert_operator cur, :>, 0
194
194
  rescue Errno::ENOPROTOOPT
195
195
  # kernel does not support SO_REUSEPORT (older Linux)
196
- end
196
+ end if defined?(Socket::SO_REUSEPORT)
197
197
  end
@@ -29,6 +29,13 @@ class TestTeeInput < Test::Unit::TestCase
29
29
  end while true
30
30
  end
31
31
 
32
+ def check_tempfiles
33
+ tmp = @parser.env["rack.tempfiles"]
34
+ assert_instance_of Array, tmp
35
+ assert_operator tmp.size, :>=, 1
36
+ assert_instance_of Unicorn::TmpIO, tmp[0]
37
+ end
38
+
32
39
  def test_gets_long
33
40
  r = init_request("hello", 5 + (4096 * 4 * 3) + "#$/foo#$/".size)
34
41
  ti = TeeInput.new(@rd, r)
@@ -106,6 +113,7 @@ class TestTeeInput < Test::Unit::TestCase
106
113
  assert_kind_of File, ti.tmp
107
114
  assert_equal 0, ti.tmp.pos
108
115
  assert_equal Unicorn::Const::MAX_BODY + 1, ti.size
116
+ check_tempfiles
109
117
  end
110
118
 
111
119
  def test_read_in_full_if_content_length
@@ -148,6 +156,7 @@ class TestTeeInput < Test::Unit::TestCase
148
156
  assert_nil ti.read(1)
149
157
  pid, status = Process.waitpid2(pid)
150
158
  assert status.success?
159
+ check_tempfiles
151
160
  end
152
161
 
153
162
  def test_chunked
@@ -183,6 +192,7 @@ class TestTeeInput < Test::Unit::TestCase
183
192
  status = nil
184
193
  pid, status = Process.waitpid2(pid)
185
194
  assert status.success?
195
+ check_tempfiles
186
196
  end
187
197
 
188
198
  def test_chunked_ping_pong
@@ -1,7 +1,7 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
3
  # Copyright (c) 2009 Eric Wong
4
- require 'test/test_helper'
4
+ require './test/test_helper'
5
5
  require 'digest/md5'
6
6
 
7
7
  include Unicorn
@@ -1,6 +1,6 @@
1
1
  # -*- encoding: binary -*-
2
2
 
3
- require 'test/test_helper'
3
+ require './test/test_helper'
4
4
  require 'tempfile'
5
5
 
6
6
  class TestUtil < Test::Unit::TestCase
@@ -1,8 +1,8 @@
1
1
  # -*- encoding: binary -*-
2
2
  ENV["VERSION"] or abort "VERSION= must be specified"
3
3
  manifest = File.readlines('.manifest').map! { |x| x.chomp! }
4
- require 'wrongdoc'
5
- extend Wrongdoc::Gemspec
4
+ require 'olddoc'
5
+ extend Olddoc::Gemspec
6
6
  name, summary, title = readme_metadata
7
7
 
8
8
  # don't bother with tests that fork, not worth our time to get working
@@ -17,16 +17,13 @@ Gem::Specification.new do |s|
17
17
  s.version = ENV["VERSION"].dup
18
18
  s.authors = ["#{name} hackers"]
19
19
  s.summary = summary
20
- s.date = Time.now.utc.strftime('%Y-%m-%d')
21
20
  s.description = readme_description
22
21
  s.email = %q{unicorn-public@bogomips.org}
23
22
  s.executables = %w(unicorn unicorn_rails)
24
23
  s.extensions = %w(ext/unicorn_http/extconf.rb)
25
24
  s.extra_rdoc_files = extra_rdoc_files(manifest)
26
25
  s.files = manifest
27
- s.homepage = Wrongdoc.config[:rdoc_url]
28
- s.rdoc_options = rdoc_options
29
- s.rubyforge_project = %q{mongrel}
26
+ s.homepage = Olddoc.config['rdoc_url']
30
27
  s.test_files = test_files
31
28
 
32
29
  # for people that are absolutely stuck on Rails 2.3.2 and can't
@@ -37,8 +34,8 @@ Gem::Specification.new do |s|
37
34
  s.add_dependency(%q<kgio>, '~> 2.6')
38
35
  s.add_dependency(%q<raindrops>, '~> 0.7')
39
36
 
40
- s.add_development_dependency('isolate', '~> 3.2')
41
- s.add_development_dependency('wrongdoc', '~> 1.8')
37
+ s.add_development_dependency('test-unit', '~> 3.0')
38
+ s.add_development_dependency('olddoc', '~> 1.0')
42
39
 
43
40
  s.licenses = ["GPLv2+", "Ruby 1.8"]
44
41
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: unicorn
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.8.3
4
+ version: 4.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Unicorn hackers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-05-07 00:00:00.000000000 Z
11
+ date: 2015-04-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack
@@ -53,33 +53,33 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0.7'
55
55
  - !ruby/object:Gem::Dependency
56
- name: isolate
56
+ name: test-unit
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '3.2'
61
+ version: '3.0'
62
62
  type: :development
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '3.2'
68
+ version: '3.0'
69
69
  - !ruby/object:Gem::Dependency
70
- name: wrongdoc
70
+ name: olddoc
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '1.8'
75
+ version: '1.0'
76
76
  type: :development
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: '1.8'
82
+ version: '1.0'
83
83
  description: |-
84
84
  \Unicorn is an HTTP server for Rack applications designed to only serve
85
85
  fast clients on low-latency, high-bandwidth connections and take
@@ -105,7 +105,6 @@ extra_rdoc_files:
105
105
  - KNOWN_ISSUES
106
106
  - TODO
107
107
  - NEWS
108
- - ChangeLog
109
108
  - LATEST
110
109
  - lib/unicorn.rb
111
110
  - lib/unicorn/configurator.rb
@@ -116,6 +115,8 @@ extra_rdoc_files:
116
115
  - lib/unicorn/util.rb
117
116
  - lib/unicorn/oob_gc.rb
118
117
  - lib/unicorn/worker.rb
118
+ - unicorn_1
119
+ - unicorn_rails_1
119
120
  - ISSUES
120
121
  - Sandbox
121
122
  - Links
@@ -126,11 +127,10 @@ files:
126
127
  - ".gitignore"
127
128
  - ".mailmap"
128
129
  - ".manifest"
129
- - ".wrongdoc.yml"
130
+ - ".olddoc.yml"
130
131
  - Application_Timeouts
131
132
  - CONTRIBUTORS
132
133
  - COPYING
133
- - ChangeLog
134
134
  - DESIGN
135
135
  - Documentation/.gitignore
136
136
  - Documentation/GNUmakefile
@@ -201,10 +201,8 @@ files:
201
201
  - lib/unicorn/util.rb
202
202
  - lib/unicorn/version.rb
203
203
  - lib/unicorn/worker.rb
204
- - local.mk.sample
205
204
  - man/man1/unicorn.1
206
205
  - man/man1/unicorn_rails.1
207
- - script/isolate_for_tests
208
206
  - setup.rb
209
207
  - t/.gitignore
210
208
  - t/GNUmakefile
@@ -287,17 +285,15 @@ files:
287
285
  - test/unit/test_upload.rb
288
286
  - test/unit/test_util.rb
289
287
  - unicorn.gemspec
288
+ - unicorn_1
289
+ - unicorn_rails_1
290
290
  homepage: http://unicorn.bogomips.org/
291
291
  licenses:
292
292
  - GPLv2+
293
293
  - Ruby 1.8
294
294
  metadata: {}
295
295
  post_install_message:
296
- rdoc_options:
297
- - "-t"
298
- - 'Unicorn: Rack HTTP server for fast clients and Unix'
299
- - "-W"
300
- - http://bogomips.org/unicorn.git/tree/%s
296
+ rdoc_options: []
301
297
  require_paths:
302
298
  - lib
303
299
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -311,8 +307,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
311
307
  - !ruby/object:Gem::Version
312
308
  version: '0'
313
309
  requirements: []
314
- rubyforge_project: mongrel
315
- rubygems_version: 2.2.2
310
+ rubyforge_project:
311
+ rubygems_version: 2.4.5
316
312
  signing_key:
317
313
  specification_version: 4
318
314
  summary: Rack HTTP server for fast clients and Unix
@@ -1,59 +0,0 @@
1
- # this is the local.mk file used by Eric Wong on his dev boxes.
2
- # GNUmakefile will source local.mk in the top-level source tree
3
- # if it is present.
4
- #
5
- # This is depends on a bunch of GNU-isms from bash, sed, touch.
6
-
7
- DLEXT := so
8
-
9
- # Avoid loading rubygems to speed up tests because gmake is
10
- # fork+exec heavy with Ruby.
11
- prefix = $(HOME)
12
-
13
- # XXX clean this up
14
- ifeq ($(r192),)
15
- ifeq ($(r19),)
16
- ifeq ($(rbx),)
17
- ifeq ($(r186),)
18
- RUBY := $(prefix)/bin/ruby
19
- else
20
- prefix := $(prefix)/r186-p114
21
- export PATH := $(prefix)/bin:$(PATH)
22
- RUBY := $(prefix)/bin/ruby
23
- endif
24
- else
25
- prefix := $(prefix)/rbx
26
- export PATH := $(prefix)/bin:$(PATH)
27
- RUBY := $(prefix)/bin/rbx
28
- endif
29
- else
30
- prefix := $(prefix)/ruby-1.9
31
- export PATH := $(prefix)/bin:$(PATH)
32
- RUBY := $(prefix)/bin/ruby --disable-gems
33
- endif
34
- else
35
- prefix := $(prefix)/ruby-1.9.2
36
- export PATH := $(prefix)/bin:$(PATH)
37
- RUBY := $(prefix)/bin/ruby --disable-gems
38
- endif
39
-
40
- # pipefail is THE reason to use bash (v3+) or never revisions of ksh93
41
- # SHELL := /bin/bash -e -o pipefail
42
- SHELL := /bin/ksh93 -e -o pipefail
43
-
44
- full-test: test-18 test-191 test-192 test-rbx test-186
45
-
46
- # FIXME: keep eye on Rubinius activity and wait for fixes from upstream
47
- # so we don't need RBX_SKIP anymore
48
- test-rbx: export RBX_SKIP := 1
49
- test-rbx: export RUBY := $(RUBY)
50
- test-rbx:
51
- $(MAKE) test test-integration rbx=T 2>&1 |sed -e 's!^!rbx !'
52
- test-186:
53
- $(MAKE) test-all r186=1 2>&1 |sed 's!^!1.8.6 !'
54
- test-18:
55
- $(MAKE) test-all 2>&1 |sed 's!^!1.8 !'
56
- test-191:
57
- $(MAKE) test-all r19=1 2>&1 |sed 's!^!1.9.1 !'
58
- test-192:
59
- $(MAKE) test-all r192=1 2>&1 |sed 's!^!1.9.2 !'
@@ -1,31 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # scripts/Makefiles can read and eval the output of this script and
3
- # use it as RUBYLIB
4
- require 'rubygems'
5
- require 'isolate'
6
- fp = File.open(__FILE__, "rb")
7
- fp.flock(File::LOCK_EX)
8
-
9
- ruby_engine = defined?(RUBY_ENGINE) ? RUBY_ENGINE : 'ruby'
10
- opts = {
11
- :system => false,
12
- # we want "ruby-1.8.7" and not "ruby-1.8", so disable :multiruby
13
- :multiruby => false,
14
- :path => "tmp/isolate/#{ruby_engine}-#{RUBY_VERSION}",
15
- }
16
-
17
- pid = fork do
18
- Isolate.now!(opts) do
19
- gem 'raindrops', '0.13.0'
20
- gem 'kgio', '2.9.2'
21
- gem 'rack', '1.5.2'
22
- end
23
- end
24
- _, status = Process.waitpid2(pid)
25
- status.success? or abort status.inspect
26
- lib_paths = Dir["#{opts[:path]}/gems/*-*/lib"].map { |x| File.expand_path(x) }
27
- dst = "tmp/isolate/#{ruby_engine}-#{RUBY_VERSION}.mk"
28
- File.open("#{dst}.#$$", "w") do |fp|
29
- fp.puts "ISOLATE_LIBS=#{lib_paths.join(':')}"
30
- end
31
- File.rename("#{dst}.#$$", dst)