about summary refs log tree commit homepage
DateCommit message (Collapse)
2009-09-18unicorn 0.92.0 v0.92.0
Small fixes and documentation are the focus of this release. James Golick reported and helped me track down a bug that caused SIGHUP to drop the default listener (0.0.0.0:8080) if and only if listeners were completely unspecified in both the command-line and Unicorn config file. The Unicorn config file remains the recommended option for specifying listeners as it allows fine-tuning of the :backlog, :rcvbuf, :sndbuf, :tcp_nopush, and :tcp_nodelay options. There are some documentation (and resulting website) improvements. setup.rb users will notice the new section 1 manpages for `unicorn` and `unicorn_rails`, Rubygems users will have to install manpages manually or use the website. The HTTP parser got a 3rd-party code review which resulted in some cleanups and one insignificant bugfix as a result. Additionally, the HTTP parser compiles, runs and passes unit tests under Rubinius. The pure-Ruby parts still do not work yet and we currently lack the resources/interest to pursue this further but help will be gladly accepted. The website now has an Atom feed for new release announcements. Those unfamiliar with Atom or HTTP may finger unicorn@bogomips.org for the latest announcements.
2009-09-18NEWS.atom.xml only lists the first 10 entries
No need to waste bandwidth with more.
2009-09-18man1/unicorn_rails: fix unescaped underscore
2009-09-18man1/unicorn: split out RACK ENVIRONMENT section
The inline formatting for the CLI switch was too hard to get right and was too long anyways.
2009-09-18pandoc needs the standalone switch for manpages
Otherwise we end up with unreadable manpages.
2009-09-18NEWS.atom: file timestamp matches latest entry
Avoid needlessly wasting readers' bandwidth if they're caching.
2009-09-18doc: latest news is available through finger
We're expanding our target audience to folks that do not use HTTP (yet).
2009-09-18html: add Atom feeds
The ChangeLog feed points to the cgit repository viewer and the NEWS one is its own feed of tags. Web 2.0 here we come!
2009-09-17Update TODO
2009-09-17doc: begin integration of HTML manpages into RDoc
Kinda sorta works, still some Markdown => HTML formatting issues to work out but it gives the site a reasonably consistent look.
2009-09-17GNUmakefile: package .tgz includes all generated files
Additionally, force ourselves to verify our working tree against $(VERSION) when doing releases because we don't want to screw that up.
2009-09-17Simplify and standardize manpages build/install
setup.rb users will now be able to install manpages under man/man1 automatically, no solution for Rubygems users yet. gzipped manpages are no longer created by default, either, it's probably up to distros to do it.
2009-09-17Documentation: don't force --rsyncable flag with gzip(1)
It may not be portable to older versions of gzip
2009-09-17Add unicorn_rails(1) manpage
2009-09-17man1/unicorn: avoid unnecessary emphasis
SCREAMING is already sufficient without *BOLDNESS*
2009-09-17launchers: deprecate ambiguous -P/--p* switches
`unicorn` tries to mimic `rackup` on the command-line to ease adoption. `unicorn_rails` tries to be somewhat like `rackup` as well, but then also tries to be consistent with `script/server` resulting some amount of confusion with regard to the -P/(--path|--pid) switch. Outright removal of these switches will probably not happen any time soon because we have command-lines inherited across processes, but we can stop advertising them. Since our (Unicorn) config file format is fortunately consistent between Rails and !Rails, recommend the "pid" directive be used instead. User interfaces are really, really tough to get right...
2009-09-17unicorn_rails: close parentheses in help message
2009-09-17Remove Echoe and roll our own packaging/release...
* Manifest/CHANGELOG can be maintainance is painful. I really hate having those in the source tree when I have a version control system that already: 1) encourages me to make meaningful commits 2) is highly scriptable for generating manifests/changelogs * hand-rolled gemspec allows more control for specifying pre-release gem versions * Less magic over what the `rubyforge` command does, being able to spawn $VISUAL on changelogs/release notes and make edits on them is nice. Additionally I still strongly prefer GNU make over Rake for many tasks since it offers better parallelization and some things are easier *for me* in shell than Ruby.
2009-09-17doc: generate ChangeLog and NEWS file for RDoc
No point in having those files under revision control or repeating work to generate them.
2009-09-17SIGHUP no longer drops lone, default listener
When SIGHUP reloads the config, we didn't account for the case where the listen socket was completely unspecified. Thus the default listener (0.0.0.0:8080), did not get preserved and re-injected into the config properly. Note that relying on the default listen or specifying listeners on the command-line means it's /practically/ impossible to _unbind_ those listeners with a configuration file reload. We also need to preserve the (unspecified) default listener across upgrades that later result in SIGHUP, too; so the easiest way is to inject the default listener into the command-line for upgrades. Many thanks to James Golick for reporting and helping me track down the bug since this behavior is difficult to write reliable automated tests for. Signed-off-by: Eric Wong <normalperson@yhbt.net>
2009-09-16Avoid freezing objects that don't benefit from it
This gives applications more rope to play with in case they have any reasons for changing some values of the default constants. Freezing strings for Hash assignments still speeds up MRI, so we'll keep on doing that for now (and as long as MRI supports frozen strings, I expect them to always be faster for Hashes though I'd be very happy to be proven wrong...)
2009-09-16socket_helper: (FreeBSD) don't freeze the accept filter constant
We may add support for the Gopher protocol in the future...
2009-09-16test_exec: add extra tests for HUP and preload_app
Just to ensure we handle HUP correctly since preload_app changes the behavior of HUP handling a bit.
2009-09-15Add new Documentation section for manpages
Only "unicorn(1)" is documented right now, but more will be added. Manpages are written Markdown since it's easy to write, easy to read (in source form) and a widely-implemented format. As of September 2009, pandoc is the only Markdown processor I know of capable of turning Markdown into manpages. So despite adding a dependency on Haskell (not yet very common these days) for documentation, the features and performance of pandoc+Markdown outweigh the drawbacks compared to other lightweight markup systems.
2009-09-15SIGNALS: use "Unicorn" when referring to the web server
"unicorn" (lower-case) refers to the executable script
2009-09-15Fix comment about speculative accept()
We used to try it on every listener, but then rarely-used listener ports used mainly for monitoring/debugging would have accept() unnecessary called, getting unnecessarily expensive inside the kernel.
2009-09-15Update Manifest with mailmap
2009-09-15Add .mailmap file for "git shortlog" and other tools
This lets us avoid those ugly <user@UUID> faux email addresses that "git svn" generates when "git svn" is not used with --authors-file.
2009-09-15http: add #endif comment labels where appropriate
Sometimes I end up hacking on 10-row high terminals and need more context :x
2009-09-15http: cleanup assertion for memoized header strings
assert_frozen() should not be checking what type of object it is, instead put an extra assertion in there to ensure we have a string.
2009-09-15Update documentation for Rubinius support status
Note that Rubinius itself is still under heavy development, so things we fix may break again. The pure-Ruby parts of Unicorn don't even work properly on Rubinius.
2009-09-14http: create a new string buffer on empty values
Since empty values on one line can be a heuristic to determine future lines are continuation lines (and a as a result, a decently long header), pre-allocate a string buffer just in case. This is to workaround what appears to be bug in the Rubinius C API, but it could be considered (intended) DWIM behavior, too...
2009-09-14http: use rb_str_{update,flush} if available
Rubinius supports these functions as of 039091066244cfcf483310b86b5c4989aaa6302b This allows the test_http_parser_ng.rb test to run under Rubinius db612aa62cad9e5cc41a4a4be645642362029d20
2009-09-14http: compile with -fPIC
Rubinius doesn't seem to set this by default
2009-09-14http: no-op rb_str_modify() for Rubies without it
Rubinius has no rb_str_modify() function, it /may/ not need it.
2009-09-14http: define OFFT2NUM macro on Rubies without it
Hope they have the LL2NUM macro (Rubinius does)
2009-09-14http: support Rubies without the OBJ_FROZEN macro
Rubinius does not support frozen objects, maybe other Rubies lack support for it as well.
2009-09-14CONTRIBUTORS: fix capitalization for why
He contributed to Mongrel back in the day and isn't around Ruby anymore, but at least get his preferred (lack-of) capitalization right...
2009-09-09http_response: don't "rescue nil" for body.close
This can hide bugs in Rack applications/middleware. Most other Rack handlers/servers seem to follow this route as well, so this helps ensure broken things will break loudly and more consistently across all Rack-enabled servers :)
2009-09-08"encoding: binary" comments for all sources (1.9)
This ensures any string literals that pop up in *our* code will just be a bag of bytes. This shouldn't affect/fix/break existing apps in most cases, but most constants will always have the "correct" encoding (none!) to be consistent with HTTP/socket expectations. Since this comment affects things only on a per-source basis, it won't affect existing apps with the exception of strings we pass to the Rack application. This will eventually allow us to get rid of that Unicorn::Z constant, too.
2009-09-07doc/SIGNALS: fix the no-longer-true bit about socket options
This hasn't been true since 3e9fe197d4daac14fa98addfcf9be3208c7b96b8
2009-09-06http: ignore Host: continuation lines with absolute URIs
This probably doesn't affect anyone with HTTP/1.1, but future versions of HTTP will use absolute URIs and maybe we'll eventually get clients that (mistakenly) send us Host: headers along with absolute URIs.
2009-09-06http: rb_gc_mark already ignores immediates
No need to add an extra check, even if it does avoid a function call.
2009-09-06http: NIL_P(var) instead of var == Qnil
This should be more inline with Ruby standards/coding style and probably more future-proof, as well.
2009-09-06http: verbose assertions
This makes it easier for bug reporters to tell us what's wrong in case line numbers change.
2009-09-06http: extra assertion when advancing p manually
Just in case, it'll be easier to track down if bugs pop up.
2009-09-06http: remove needless goto
There's no need to use a goto here to avoid one level of nesting.
2009-09-06http: use explicit elses for readability
This should make code easier to read and follow.
2009-09-06http: refactor keepalive tracking to functions
In case we modify our struct to not use bitflags, this should make it easier to change the parser code. This also adds extra clarification for how we track keepalive and why we only do it for certain request methods.
2009-09-06http: switch to macros for bitflag handling
These are similar to the macros found in MRI, and can more easily allow us to swap out the bitflags for real struct members...