about summary refs log tree commit homepage
DateCommit message (Collapse)
2010-06-10unicorn 0.991.0 - startup improvements v0.991.0
The "working_directory" configuration parameter is now handled before config.ru. That means "unicorn" and "unicorn_rails" no longer barfs when initially started outside of the configured "working_directory" where a config.ru is required. A huge thanks to Pierre Baillet for catching this ugly UI inconsistency before the big 1.0 release Thanks to Hongli Lai, out-of-the-box Rails 3 (beta) support should be improved for deployments lacking a config.ru There are more new integration tests, cleanups and some documentation improvements.
2010-06-10test to ensure "unicorn fooapp.rb" respects working_directory
2010-06-10add test for erroring out when config.ru is bad
2010-06-10t0303: extra test for multiple listeners
We share the same array from the original bin/* down into the Configurator.
2010-06-10docs: hopefully clarify preload_app=false behavior
While we're at it, inform people of why they might use a symlink
2010-06-10README: more aggressively kill unnecessary links
... And make the gemspec do minor un-RDoc-ing
2010-06-10examples/init: "upgrade" task waits for completion
This makes the user (sysadmin in this case) more aware if the upgrade fails or doesn't work as intended. This change could be more useful for Rainbows! with its long-running responses.
2010-06-10tests: fix sha1 calculation for non-random_blob
This was commit abc207b2918606867094f2820bab58223e99aac4 from rainbows.git
2010-06-10t0303: set executable bit
2010-06-10my-tap-lib: fix race condition in verbose mode
Don't try to redirect until we know our FIFO consumers are ready for us. This only seems to happen with bash and not ksh...
2010-06-10tests: skip config.ru parsing tests under rbx
eval("...", TOPLEVEL_BINDING) is broken for us in Rubinius (And our code is extremely nasty as well :x) ref: http://github.com/evanphx/rubinius/issues/357
2010-06-10configurator: remove debugging output
2010-06-10fix alt-working_directory behavior for Rails 3
2010-06-10http: cleanups for latest Rubinius
Rubinius now supports rb_str_set_len() and sets -fPIC. We shouldn't check for rb_str_modify() since link-time detection is broken under Rubinius and even 1.8.6 has rb_str_modify().
2010-06-10unicorn_rails: no need to load ActionDispatch::Static
Rails 3 will automatically load it for us.
2010-06-10tests: split out host/port extraction from listen
more tests may use it
2010-06-10tests: update Rails 3 tests to Rails 3 beta4
2010-06-10respect "working_directory" wrt config.ru
Since we added support for the "working_directory" parameter, it often became unclear where/when certain paths would be bound. There are some extremely nasty dependencies and ordering issues when doing this. It's all pretty fragile, but works for now and we even have a full integration test to keep it working. I plan on cleaning this up 2.x.x to be less offensive to look at (Rainbows! and Zbatery are a bit tied to this at the moment). Thanks to Pierre Baillet for reporting this. ref: http://mid.gmane.org/AANLkTimKb7JARr_69nfVrJLvMZH3Gvs1o_KwZFLKfuxy@mail.gmail.com
2010-06-10unicorn_rails: use Kernel#warn instead of $stderr.puts
shorter is better
2010-06-10tests: set NO_PROXY when running tests
It's a good idea to use a caching http_proxy to save bandwidth when isolating gems for different Ruby versions.
2010-06-10Rakefile: isolate to rbx directory
We haven't started using isolate with Rubinius, yet, but we may soon.
2010-06-10Rakefile: only try rake-compiler if VERSION is defined
Our gemspec won't work without it
2010-06-10isolate: don't run isolate in parallel
~/.gems is still shared, and we don't isolate *that* often enough to matter
2010-06-10launcher: get rid of backwards compatibility code
Rainbows! and Zbatery have long been upgraded to pass options to us.
2010-06-08tests: add Rails 3 test for the missing config.ru case
In case we have weird Rails 3 users who choose to ignore config.ru, we'll be ready.
2010-06-08unicorn_rails: fix requires for Ruby 1.9.2
Ruby 1.9.2 no longer includes "." in $LOAD_PATH, so we need to require using an explicit path. This issue only affected Rails 3 users who chose to run without the default config.ru, as the config.ru generated by Rails 3 will call File.expand_path in the same way.
2010-06-08tests: libify common rails3 setup code
We'll be adding more Rails 3 tests..
2010-06-08Fix unicorn_rails compatibility with the latest Rails 3 code
This allows us to properly detect Rails 3 installations in cases where config.ru is not present. [ew: expanded commit message fixed static file serving, more flexible regexp for matching module ] ref: mid.gmane.org/AANLkTiksBxIo_PFWoiPTWi1entXZRb7D2uE-Rl7H3lbw@mail.gmail.com Acked-by: Eric Wong <normalperson@yhbt.net>
2010-06-08t0300: Rails 3 test actually uses unicorn_rails
Oops, but unicorn_rails appears to work well here
2010-06-08unicorn 0.990.0 - inching towards 1.0 v0.990.0
Thanks to Augusto Becciu for finding a bug in the HTTP parser that caused a TypeError (and 500) when a rare client set the "Version:" header which conflicts with the HTTP_VERSION header we parse in the first line of the request[1]. Horizontal tabs are now allowed as leading whitespace in header values as according to RFC 2616 as pointed out by IƱaki Baz Castillo[2]. Taking a hint from Rack 1.1, the "logger" configuration parameter no longer requires a "close" method. This means some more Logger replacements may be used. There's a new, optional, Unicorn (and maybe Passenger)-only middleware, Unicorn::OobGC[2] that runs GC outside of the normal request/response cycle to help out memory-hungry applications. Thanks to Luke Melia for being brave enough to test and report back on my big_app_gc.rb monkey patch[3] which lead up to this. Rails 3 (beta) support: Using "unicorn" is still recommended as Rails 3 comes with a config.ru, but "unicorn_rails" is cleaned up a bit and *should* work as well as "unicorn" out-of-the-box. Feedback is much appreciated. Rubinius updates: USR2 binary upgrades are broken due to {TCPServer,UNIXServer}.for_fd[5][6] being broken (differently). Repeatedly hitting the server with signals in a tight loop is unusual and not recommended[7]. There are some workarounds and general code cleanups for other issues[8], as well but things should generally work unless you need USR2 upgrades. Feedback and reports would be greatly appreciated as usual. MRI support: All tests (except old Rails) run and pass under 1.9.2-preview3. 1.8.7 and 1.9.1 work well as usual and will continue to be supported indefinitely. Lets hope this is the last release before 1.0. Please report any issues on the mailing list[9] or email us privately[a]. Don't send HTML mail. [1] - http://mid.gmane.org/AANLkTimuGgcwNAMcVZdViFWdF-UcW_RGyZAue7phUXps@mail.gmail.com [2] - http://mid.gmane.org/i2xcc1f582e1005070651u294bd83oc73d1e0adf72373a@mail.gmail.com [3] - http://unicorn.bogomips.org/Unicorn/OobGC.html [4] - http://unicorn.bogomips.org/examples/big_app_gc.rb [5] - http://github.com/evanphx/rubinius/issues/354 [6] - http://github.com/evanphx/rubinius/issues/355 [7] - http://github.com/evanphx/rubinius/issues/356 [8] - http://github.com/evanphx/rubinius/issues/347 [9] - mailto:mongrel-unicorn@rubyforge.org [a] - mailto:unicorn@bogomips.org
2010-06-08cleanup makefiles, restore aggregation screwup
The publish_doc target belongs in main, since other people may update the website. local.mk.sample enables a subset of tests for Rubinius and allows them to run in parallel with the MRI tests. And it was NOT a UUoC after all, there are multiple files to aggregate :x
2010-06-08GNUmakefile: add test-all and test-integration targets
Long overdue
2010-06-08test: mark failing tests for Rubinius
They cannot be worked around, but tickets have been filed upstream (I still hate all bug trackers besides Debian's). TCPServer.for_fd (needed for zero-downtime upgrades): http://github.com/evanphx/rubinius/issues/354 UnixServer.for_fd (needed for zero-downtime upgrades): http://github.com/evanphx/rubinius/issues/355 Signal handling behavior seems broken (OOM or segfaults): http://github.com/evanphx/rubinius/issues/356
2010-06-08update test infrastructure to run Rubinius tests
In parallel with other of Rubies, of course. We need to rely on RUBY_ENGINE since RUBY_VERSION is 1.8.7 and that conflicts with the most popular MRI version. Since Rubinius doesn't support some command-line options, we still need to rely on MRI for a few things. Also fixing an embarrassing UUoC in the process.
2010-06-08reopen_logs: no need to preserve encoding args
Since we accidentally dropped open_args a while back, nothing seems to have broken :x So apparently MRI preserves it for us, and test/unit/test_util.rb agrees.
2010-06-08test_socket_helper: additional test for path equality
This fails under Rubinius. ref: http://github.com/evanphx/rubinius/issues/355
2010-06-08reopen_logs: avoid modifying ObjectSpace while iterating
Creating File objects while iterating ObjectSpace for File objects may hit subtle bugs. It may only be safe in MRI, and even then it's not behavior that sounds sane to rely on. So stop doing it.
2010-06-08spew backtrace when config reloading fails
It can be useful to track down problems with
2010-06-08test-exec: fix racyness in HUP test
I'm not sure what I was smoking when I originally (and knowingly) wrote the racy code.
2010-06-08cleanup master_sleep loop
No need for extra checks when we're just doing read_nonblock. We'll also avoid reallocating a 16K buffer every time we sleep, we can just reuse the buffer the workers normally use to process request.
2010-06-08test_http_parser: memory usage test for non-MRI
Non-MRI runtimes (like Rubinius) may implement garbage collection very differently than MRI.
2010-06-08workaround IO#reopen bug in rbx when reopening logs
IO#reopen in Rubinius seems to munge the O_APPEND flag when passed a path, however passing an actual IO object. However, at the system call level, everything is the same. ref: http://github.com/evanphx/rubinius/issues/347
2010-06-08http: move Version: header check into a less common path
Since the "Version" header is uncommon and never hits our optimized case, we don't need to check for it in the common case.
2010-06-08http: ignore Version: header if explicitly set by client
When Unicorn receives a request with a "Version" header, the HttpParser transforms it into "HTTP_VERSION". After that tries to add it to the request hash which already contains a "HTTP_VERSION" key with the actual http version of the request. So it tries to append the new value separated by a comma. But since the http version is a freezed constant, the TypeError exception is raised. According to the HTTP RFC (http://www.w3.org/Protocols/rfc2616/rfc2616-sec7.html#sec7.1) a "Version" header is valid. However, it's not supported in rack, since rack has a HTTP_VERSION env variable for the http version. So I think the easiest way to deal with this problem is to just ignore the header since it is extremely unusual. We were getting it from a crappy bot. ref: http://mid.gmane.org/AANLkTimuGgcwNAMcVZdViFWdF-UcW_RGyZAue7phUXps@mail.gmail.com Acked-by: Eric Wong <normalperson@yhbt.net>
2010-06-05File.readable? and File.writable? are more readable
...than "test ?r" and "test ?w" Not everybody comes from a Unix shell programming background, even though they *should* ;)
2010-06-04configurator: logger: drop "close" requirement
Rack::Lint in Rack 1.1.0 does not require a "close" method for env["rack.logger"], and we never explicitly close our logger, either. This more easily allows the use of alternative Logger-like implementations such as SyslogLogger.
2010-06-04doc: emphasize the importance of stderr_path
While second nature to myself, stderr_path may be an overlooked configuration parameter for some users. Also, add a minimal sample configuration file that is shorter and hopefully less intimidating to new users.
2010-06-04tests: disable Rails 2.x tests under Ruby 1.9.2
They are not compatible, and the Rails 3 tests will be completely separate.
2010-06-03gemspec: add development dependency on isolate
2010-06-03test: rails 3: automatically run isolate if needed
should be safe enough...