Forum: Mongrel x_send_file sends a 1 byte file

C236fbf52a68d202d4355f715b9f8d8d?d=identicon&s=25 George Schreiber (srejbi)
on 2008-06-17 08:35
Hello,

sorry if creating a dupe...

I'm trying to download files to authenticated users in my app. I've set
up x_send_file. All seems to be correct to me, however when I try to
download any file, I get a 1-byte long file downloaded.

I am getting this already in development - so no Apache, no lighthttpd,
just a mongrel_rails start in the root of my app.

Any help/hint would be appreciated.

Thanks,
George
24d2f8804e6bb4b7ea6bd11e0a586470?d=identicon&s=25 Jeremy Kemper (Guest)
on 2008-06-17 09:24
(Received via mailing list)
On Mon, Jun 16, 2008 at 11:35 PM, George Schreiber
<lists@ruby-forum.com> wrote:
>
> Any help/hint would be appreciated.

This only works with a frontend httpd to intercept the X-Sendfile
response header and send the actual file.

Without a frontend httpd, you're seeing the expected result. Use
firebug to verify.

jeremy
Ca8efd0ba834b02b9b7dd34b5c6c2721?d=identicon&s=25 Kirk Haines (Guest)
on 2008-06-17 18:33
(Received via mailing list)
On Tue, Jun 17, 2008 at 1:23 AM, Jeremy Kemper <jeremy@bitsweat.net>
wrote:
> response header and send the actual file.
>
> Without a frontend httpd, you're seeing the expected result. Use
> firebug to verify.

To expand on what Jeremy said, x_send_file just sets an HTTP header,
X-Sendfile, in the response.

It's up to whatever is running in front of your processes to see that
header and then to do something with it.

So, in order to adequately test it, you will have to have _something_
in front of your processes which handle it.  Also be aware that only
some web servers implement X-Sendfile (Apache, via mod_xsendfile,
lighttpd natively [it originated with them], and Swiftiply are the
three that come to mind).  Litespeed has their own redirect syntax
(which they spin to make it sound better than the others).  Nginx also
has it's own approach with x-accel-redirect (which Swiftiply may
support in the future, as well).

So if you are using any one of those mechanisms for delivering static
file downloads, to test it you will have to have a compatible front
end running, and without some (fairly minor) code changes, you are
locked into whatever one you choose to use.

Hope this helps.


Kirk Haines
Fdcd0973db4f51080bf8cf839ec61885?d=identicon&s=25 Matte Edens (Guest)
on 2008-06-17 19:50
(Received via mailing list)
If you do have X-SendFile installed make sure your settings for it are
correct as well.  I got caught by this the other day too.  I had
forgotten to add...

|XSendFile on
XSendFileAllowAbove on

|||to my VirtualHost config.

FYI.

matte - webmaster
webmaster@ruckuswireless.com
||
F0c67e7a618899d5f3043d36b8bbe74b?d=identicon&s=25 unknown (Guest)
on 2008-06-17 21:47
(Received via mailing list)
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


>>>>> "Kirk" == Kirk Haines <wyhaines@gmail.com> writes:
    Kirk> So, in order to adequately test it, you will have to have
    Kirk> _something_ in front of your processes which handle it.  Also
    Kirk> be aware that only some web servers implement X-Sendfile

  Good point.

  I have some scripts that setup apache.conf to run in the current
directory, as current user, on a high-port.  It would be all rake tasks,
but my rake task actually just invokes a Makefile and shell scripts,
because I wrote this code for a non-ruby project originally.
  (My makefile also arranges to build a mysql cluster locally too)

  I would like to have system level tests of some kind to help with
this kind of thing too.  I haven't looked at how the mongrel code itself
gets tested --- maybe there is something there that can help?

- --
Michael Richardson <mcr@simtone.net>
Director -- Consumer Desktop Development, Simtone Corporation, Ottawa,
Canada
Personal: http://www.sandelman.ca/mcr/

SIMtone Corporation fundamentally transforms computing into simple,
secure, and very low-cost network-provisioned services pervasively
accessible by everyone.  Learn more at www.simtone.net and
www.SIMtoneVDU.com


-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)

iQDVAwUBSFgS7e0sRu40D6vCAQI4ogYAoJkW4C7P7acV+ZRoCU6Bb46Wt3M6qwzG
0SUWXzs2xvGPFmcpdqjBIIHj/D+XCNZxIPgFtj62yFmZTzl320sJvjcrA/SOteRD
o4ik+wXHFmIKum3Yz4i2qSJFNJmZJ4Juv7p9Np1b6M0W3Gjz4IbKox1oteCicnTW
e18hgZg5009LxjPxwNXnKVZbJQmdqGM3xB2MMK3eBOkN5HkbwaBConrhOZ3VpmU1
PlTVjdt4mZ2RPXtrzDMG6ROJqhaYbmka
=Fyfj
-----END PGP SIGNATURE-----
C236fbf52a68d202d4355f715b9f8d8d?d=identicon&s=25 George Schreiber (srejbi)
on 2008-06-18 07:41
Jeremy Kemper wrote:
> On Mon, Jun 16, 2008 at 11:35 PM, George Schreiber
> <lists@ruby-forum.com> wrote:
>>
>> Any help/hint would be appreciated.
>
> This only works with a frontend httpd to intercept the X-Sendfile
> response header and send the actual file.
>
> Without a frontend httpd, you're seeing the expected result. Use
> firebug to verify.

Thanks Jeremy;
- as the filename is correct
- as I have used breakpoints in x_send_file and investigated the headers
it sets
I think you are right, I am seeing the expected and correct results.


Also, thank you all of you guys; I will go and play with Apache (2.2) --
the chosen front-end -- to see it downloading the complete file.

Best regards,
George
C236fbf52a68d202d4355f715b9f8d8d?d=identicon&s=25 George Schreiber (srejbi)
on 2008-06-24 12:38
Managed to configure Apache+proxy balancer+XSendFile+Mongrel to work.
:)

Thank you guys for putting me on the right track!!
This topic is locked and can not be replied to.