Date | Commit message (Collapse) |
|
:to_io never was a Rack extension, and ends up breaking the case
where an SSL socket is proxied. The role of :to_io in IO-like
objects is to aid IO.select and like methods.
|
|
Rack::Lint::ErrorWrapper forbids the "<<" method. This
fallback only comes into play when no log destination
(via :logger or :path) is specified and is rarely an
issue in real setups.
|
|
These values are untrusted, so if any client sends them to us
we must escape them.
|
|
This matches the behavior of nginx 1.0.9
|
|
This doesn't apply to people that use strftime()-formats,
but that's a minority.
|
|
This appeared in nginx 0.9.6
|
|
This allows using:
use Clogger, :format => :Rack_1_0
Instead of:
use Clogger, :format => Clogger::Format::Rack_1_0
|
|
People shouldn't care, there have been no backwards-incompatible
changes in the UI and we're not a library people write code
against.
|
|
Clogger now delegates all unknown methods to the response body
in cases where it needs to wrap the response body. This allows
apps that use non-standard Rack extensions to continue working.
Eric Wong (4):
pass along "to_io" calls to the body
delegate method_missing calls to the response body
pure: simpler autoload trigger
switch to pkg.mk for maintenance tasks
|
|
No need to actually create the hash, just load the constant
|
|
Since we delegated response_to?, we also need to delegate
method_missing to the response body in case there are
non-standard methods defined outside of Rack.
|
|
This optimization is used by Rainbows! to pass IO objects
to the response body.
|
|
Broken/crazy systems without CLOCK_MONOTONIC (in varying
degrees) and/or clock_gettime() should be supported by
using gettimeofday(). Thanks to Lawrence Pit for reporting
and helping us test.
The Clogger::ToPath proxy class is gone, Clogger itself can
proxy to_path/close calls correctly to the response body.
$time_utc with a default strftime-format is now supported, and
time formats can now be arbitrarily long in the C extension.
|
|
nginx doesn't have this, only time_local, but we do
|
|
In case some folks need to use insanely long time formats,
we'll support them.
|
|
We can just make Clogger#respond_to? smarter and forward
everything except :close to the body we're proxying.
|
|
Clogger may now be initialized with a :path instead of :logger
to avoid typing "::File" in config.ru files to avoid conflicting
with the completely-unrelated Rack::File.
$request_time is now uses the monotonic clock, making it immune
to system clock changes. $usec and $msec statements were
completely broken in the pure-Ruby code and now fixed.
Rubinius is supported by the optional C extension as well,
the pure-Ruby code always worked.
|
|
It was totally broken but nobody uses uses it, so it
went unnoticed since the beginning of time.
|
|
They're not needed and a waste of code.
|
|
This lessens confusion for people configuring Clogger in
config.ru, since "File" could be mistaken for Rack::File
and "::File" needs to be specified.
|
|
This release allows middleware like Rack::Contrib::Sendfile to
work properly higher up the stack from Clogger.
Certain configurations of the Rainbows! and Zbatery web servers
are able to use the return value of body.to_path to serve static
files efficiently (via IO.copy_stream under 1.9 or
stream_file_data with EventMachine).
There are some small cleanups and documentation improvements
as well.
I've relicensed to LGPLv2.1+ (from LGPLv3-only) to allow
bundling with GPLv2-only applications (I'm currently the sole
copyright holder).
Signed-off-by: Eric Wong <normalperson@yhbt.net>
|
|
It's unintuitive that merely setting the environment variable to
an empty string or zero would be a boolean true.
|
|
Rack is always used, and Rack itself uses autoload to
save memory.
|
|
|
|
Certain configurations of Rainbows! (and Zbatery) are able to
use the return value of body.to_path to serve static files
more efficiently.
This also allows middleware like Rack::Contrib::Sendfile to
work properly higher up the stack, too.
|
|
We no longer write the log out at the end of the body.each call.
This is a behavioral change, but fortunately all Rack servers
I've seen call body.close inside an ensure.
This allows us to later pass along the "to_path" method
and not rely on "each" to write the log.
|
|
Small cleanups and minor enhancements (mainly for the optional
C extension) for this release:
Eric Wong (10):
ext: use FIX macros instead of generic NUM macros if possible
ext: preserve subclasses of Rack::Utils::HeaderHash
test: fix Linux memory usage test
avoid direct require of "rack" to quiet warnings
ext: GC safety fix when throwing an exception
ext: eliminate unused variable
ext: fix signedness and shadow warnings
ext: sparse cleanups
ext: avoid void pointer arithmetic
clogger 0.4.0
|
|
This quiets down warnings when used with RubyGems loaders such
as Isolate and Bundler where the HTTP server already loaded
Rack.
|
|
This release fixes a memory leak in the optional C extension due to
misuse of the Ruby C API. Users of the pure Ruby version are
unaffected.
We also misreleased 0.3.1 with this fix, but without bumping the
Clogger::VERSION constant.
|
|
You may now force the :reentrant flag to +true+ or +false+ in
your Rack configuration file:
use Clogger,
:format => Clogger::Format::Combined,
:logger => ::File.open("/path/to/log", "ab"),
:reentrant => true
This is to be compatible with Rack servers that do not use use
events or Fibers for concurrency instead of threads. By
default, reentrancy is enabled if env["rack.multithread"] is
true, but "rack.multithread" cannot indicative of a reentrancy
requirement in a web server.
|
|
Clogger may set this value independently of "rack.multithread"
since Actor/Fiber-based servers may have multiple instances of
Clogger wrapping different response bodies and yet be
incompatible with "rack.multithread"
|
|
The optional C extension no longer tries to preserve the
original response array as it could become subtly broken by
people using non-frozen but constant responses. For the pure
Ruby version, there is a 1.9-encoding bugfix for response
size calculation.
|
|
hacking the C extension with RSTRING_LEN() is so much easier :P
|
|
instance variable lookups are expensive as-is
|
|
This release should help ensure compatibility with a
to-be-released version of Rack::Lint that allows subclasses of
the core String and Hash objects for users of the optional C
extension.
Eric Wong (6):
ext: convert non-Hashes #to_hash if possible
ext: ensure all objects we byte_xs are Strings
tests for subclassing
gemspec: disable the license= field for older RubyGems
GNUmakefile: fix grammar FAIL in comment
cleanup packaging and website/rdoc
|
|
We now properly handle bodies that do not respond to the :close
method. Additionally there small documentation/formatting
fixes.
|
|
Since the wrapped Clogger object always responds to
close, we cannot blindly delegate the close method to
the body without ensuring it can be closed. So ensure
that it can be closed before attempting to close it,
all return values and errors are trapped and returned.
Reported-by: Iñaki Baz Castillo
|
|
"clogger_ext" is no longer a separate gem, but merged into the
"clogger" gem itself. The installation should automatically
detect compatible versions of Ruby and only build the C
extension for MRI 1.8/1.9.
Rack::Utils::HeaderHash is now used for $sent_http_* variable
lookups instead of a hand-rolled solution. HeaderHash objects
should be reusable in Rack soon to avoid the penalty of
recreating them repeatedly in middlewares and hopefully
more-widely used as a result.
Underlying logger objects are sync=true for safety reasons.
This has always been the case for the C extension version
when writing to regular files.
Other small changes include more CGI variables and the :ORS
(output record separator) option added (default: "\n").
|
|
It's expensive to create if not needed, and no current released
version of Rack has my proposed optimizations for it yet...
|
|
No point in having extra code to do case-insensitive lookups,
especially since the HeaderHash implementation is already in
wide use and will only get faster as time goes by.
|
|
$auth_type, $gateway_interface, $server_software,
$path_translated are all supported now.
|
|
This allows overriding the default of "\n". Behavior remains
similar to IO#puts, the :ORS (output record separator) is
appended iff the format doesn't already end with that string.
|
|
This is useful for testing the pure Ruby version in case
clogger_ext is already installed on your system.
|
|
Userspace buffering defaults are dangerous as the Ruby default
IO objects do not do line-aware buffering. This makes the
README examples with File.open much safer to use out-of-the-box
for users of the pure-Ruby version. For users on the MRI C
extension logging to regular files, this should not have any
effect as we've optimized those to do unbuffered write(2)
syscalls anyways.
|
|
|
|
Since Rack doesn't allow the HTTP_CONTENT_{LENGTH,TYPE} headers,
alias attempts to use those to the non-"HTTP_"-prefixed
equivalents to avoid confusion on the user side (nginx also does
this).
|
|
Since the HTTP_CONTENT_LENGTH and HTTP_CONTENT_TYPE variables
are not allowed by Rack, we need to allow access to the CGI
variables instead.
|
|
Accessing "REQUEST_METHOD" in the Rack env should be doable as a
CGI-ish variable. Thanks to Iñaki Baz Castillo for spotting the
issue and reporting it to me.
|
|
|
|
Back in HTTP/0.9 days (before it was called HTTP/0.9),
"GET /uri/goes/here\r\n" was a valid HTTP request.
See rfc 1945, section 4.1 for details on this ancient
"Simple-Request" scheme used by HTTP/0.9 clients.
|