Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Ruby and CGI error 500

23 views
Skip to first unread message

grey...@gmail.com

unread,
May 21, 2005, 6:10:21 PM5/21/05
to
this is a problem that's been driving me nuts ever since i first tried
it.

i can create simple, minimal scripts in Python, Perl, and PHP that run
flawlessly on the first try with minimal effort, both on my local
testing system (Apache 2.0.52 and Ruby 1.8.2) and on the server my
personal site is hosted on (Apache 1.3.33 and unknown version of Ruby -
i'm trying to find out). but no matter what i try, i simply can not
get even the most minimal ruby script to function:

#!/usr/bin/env ruby

print "Content-type: text/html\n\n"
print "<html><body>Hello World!</body></html>\n"

it runs perfectly fine at the console, no warnings, no errors, no
problems. but as a CGI script, it's another story: i get an error 500
and the cryptic (and seemingly common) "Premature end of script
headers". no other warnings or errors. if i simply change "ruby" to
"python" on the shebang line, the above script magically works with no
other effort on my part.

i'm going insane because nothing, AFAICT, is wrong. the server is
correctly set-up, permissions are correct, ownership is correct, ruby
is installed and working, yet NOTHING seems to coax it into working.
it repeatedly reports this incredibly uninformative "Premature end of
script headers" error.

is there something i could have missed? a possible misconfiguration?
or does ruby just hate me?

James Britt

unread,
May 21, 2005, 7:26:30 PM5/21/05
to
grey...@gmail.com wrote:

Given this:

> #!/usr/bin/env ruby

What user is executing the script, and is ruby in that user's env?

Try putting the literal path to Ruby there instead.


James


ES

unread,
May 21, 2005, 9:16:06 PM5/21/05
to

Le 21/5/2005, "grey...@gmail.com" <grey...@gmail.com> a écrit:
>this is a problem that's been driving me nuts ever since i first tried
>it.
>
>i can create simple, minimal scripts in Python, Perl, and PHP that run
>flawlessly on the first try with minimal effort, both on my local
>testing system (Apache 2.0.52 and Ruby 1.8.2) and on the server my
>personal site is hosted on (Apache 1.3.33 and unknown version of Ruby -
>i'm trying to find out). but no matter what i try, i simply can not
>get even the most minimal ruby script to function:
>
>#!/usr/bin/env ruby
>
>print "Content-type: text/html\n\n"
>print "<html><body>Hello World!</body></html>\n"
>
>it runs perfectly fine at the console, no warnings, no errors, no
>problems. but as a CGI script, it's another story: i get an error 500
>and the cryptic (and seemingly common) "Premature end of script
>headers". no other warnings or errors. if i simply change "ruby" to
>"python" on the shebang line, the above script magically works with no
>other effort on my part.

This, actually, goes to the HTTP spec. Try this:

#!/bin/env/ ruby
print "HTTP/1.0 200 OK\r\n"
print "Content-type: text/html\r\n\r\n"


print "<html><body>Hello World!</body></html>\n"

>i'm going insane because nothing, AFAICT, is wrong. the server is


>correctly set-up, permissions are correct, ownership is correct, ruby
>is installed and working, yet NOTHING seems to coax it into working.
>it repeatedly reports this incredibly uninformative "Premature end of
>script headers" error.
>
>is there something i could have missed? a possible misconfiguration?
>or does ruby just hate me?

E

--
template<typename duck>
void quack(duck& d) { d.quack(); }


Ara.T.Howard

unread,
May 21, 2005, 8:05:53 PM5/21/05
to
On Sun, 22 May 2005, grey...@gmail.com wrote:

> this is a problem that's been driving me nuts ever since i first tried it.
>
> i can create simple, minimal scripts in Python, Perl, and PHP that run
> flawlessly on the first try with minimal effort, both on my local testing
> system (Apache 2.0.52 and Ruby 1.8.2) and on the server my personal site is
> hosted on (Apache 1.3.33 and unknown version of Ruby - i'm trying to find
> out). but no matter what i try, i simply can not get even the most minimal
> ruby script to function:
>
> #!/usr/bin/env ruby
>
> print "Content-type: text/html\n\n"
> print "<html><body>Hello World!</body></html>\n"
>
> it runs perfectly fine at the console, no warnings, no errors, no problems.
> but as a CGI script, it's another story: i get an error 500 and the cryptic
> (and seemingly common) "Premature end of script headers". no other warnings
> or errors. if i simply change "ruby" to "python" on the shebang line, the
> above script magically works with no other effort on my part.

nothing magic about it:

[ahoward@localhost ~]$ cat a.rb


#!/usr/bin/env ruby
print "Content-type: text/html\n\n"
print "<html><body>Hello World!</body></html>\n"

[ahoward@localhost ~]$ cat a.py
#!/usr/bin/env python


print "Content-type: text/html\n\n"
print "<html><body>Hello World!</body></html>\n"

[ahoward@localhost ~]$ a.rb | od -c > a.rb.out

[ahoward@localhost ~]$ a.py | od -c > a.py.out

[ahoward@localhost ~]$ diff -u a.rb.out a.py.out
--- a.rb.out 2005-05-21 17:58:33.000000000 -0600
+++ a.py.out 2005-05-21 17:58:35.000000000 -0600
@@ -1,5 +1,6 @@
0000000 C o n t e n t - t y p e : t e
-0000020 x t / h t m l \n \n < h t m l > <
-0000040 b o d y > H e l l o W o r l d
-0000060 ! < / b o d y > < / h t m l > \n
-0000100
+0000020 x t / h t m l \n \n \n < h t m l >
+0000040 < b o d y > H e l l o W o r l
+0000060 d ! < / b o d y > < / h t m l >
+0000100 \n \n
+0000102

or, put another way:

harp:~ > ruby -e 'print 42' | od -c
0000000 4 2
0000002

harp:~ > python -c 'print 42' | od -c
0000000 4 2 \n
0000003


so you were just lucky that python and perl were sending you 'extra' newline.
you'd have even more issues if you did something like on a unix vs windows box
and it's the reason cgi abstraction are made.

this will work no matter what platform:

[ahoward@localhost ~]$ cat a.rb
#!/usr/bin/env ruby
require 'cgi'
CGI::new.out{ "<html><body>Hello World!</body></html>\n" }

[ahoward@localhost ~]$ ruby a.rb < /dev/null
Content-Type: text/html
Content-Length: 39

<html><body>Hello World!</body></html>

[ahoward@localhost ~]$ ruby a.rb < /dev/null | od -c
0000000 C o n t e n t - T y p e : t e
0000020 x t / h t m l \r \n C o n t e n t
0000040 - L e n g t h : 3 9 \r \n \r \n <
0000060 h t m l > < b o d y > H e l l o
0000100 W o r l d ! < / b o d y > < /
0000120 h t m l > \n
0000126


you'll also note that cgis are supposed to send '\r\n' not '\n\n' so the other
two never really should have worked anyhow ;-)

> i'm going insane because nothing, AFAICT, is wrong. the server is correctly
> set-up, permissions are correct, ownership is correct, ruby is installed and
> working, yet NOTHING seems to coax it into working. it repeatedly reports
> this incredibly uninformative "Premature end of script headers" error.

this is because the script headers prematurely ended before the content started
since \r\n was never seen ;-)

> is there something i could have missed? a possible misconfiguration? or
> does ruby just hate me?

doubtful ;-)

-a
--
===============================================================================
| email :: ara [dot] t [dot] howard [at] noaa [dot] gov
| phone :: 303.497.6469
| My religion is very simple. My religion is kindness.
| --Tenzin Gyatso
===============================================================================

Message has been deleted
Message has been deleted
Message has been deleted

grey...@gmail.com

unread,
May 23, 2005, 4:13:01 AM5/23/05
to
(apologies to ES for email.)

not the case, apparently. it works happily with "\n" instead of "\r\n"
and doesn't seem to require the 200 header.

> >i'm going insane because nothing, AFAICT, is wrong. the server is
> >correctly set-up, permissions are correct, ownership is correct,
ruby
> >is installed and working, yet NOTHING seems to coax it into working.
> >it repeatedly reports this incredibly uninformative "Premature end
of
> >script headers" error.
> >
> >is there something i could have missed? a possible
misconfiguration?
> >or does ruby just hate me?
>

on one of my test servers, it turns out there is no ruby installed and
on another, it seems to be a major misconfiguration. so it seems
there's a lot i've missed as my original script runs unmodified on yet
another server.

grey...@gmail.com

unread,
May 23, 2005, 4:19:41 AM5/23/05
to

Ara.T.Howard wrote:
<snip a bunch of pointless drivel>

you missed everything i actually said in my post.

would it have helped if i had not said "magically worked" but instead
some more boring phrase like "worked as expected"? or would
"mystically worked" have thrown you off as well?

(if this message sounds condescending, it is. i was seriously offended
by the verbosity and tone of your post. apologies if you are
offended.)

> On Sun, 22 May 2005, grey...@gmail.com wrote:
>
> > i'm going insane because nothing, AFAICT, is wrong. the server is
correctly
> > set-up, permissions are correct, ownership is correct, ruby is
installed and
> > working, yet NOTHING seems to coax it into working. it repeatedly
reports
> > this incredibly uninformative "Premature end of script headers"
error.
>
> this is because the script headers prematurely ended before the
content started
> since \r\n was never seen ;-)
>

it works without any linefeeds. newlines are sufficient in all my test
cases, irregarldess of my choice of language. all platforms are
unix-based, and i've not touched Windows in quite some time, so i'm
unsure of its behavior or requirements.

if it's out of spec, it doesn't seem to matter.

> > is there something i could have missed? a possible
misconfiguration? or
> > does ruby just hate me?
>
> doubtful ;-)
>

no, it turns out to be a major misconfiguration on my part. there is
something seriously wrong with one of my test environments. it works
on another server (one of my targets).

ES

unread,
May 23, 2005, 2:09:59 PM5/23/05
to

Le 23/5/2005, "grey...@gmail.com" <grey...@gmail.com> a écrit:
>
>Ara.T.Howard wrote:
><snip a bunch of pointless drivel>
>
>you missed everything i actually said in my post.
>
>would it have helped if i had not said "magically worked" but instead
>some more boring phrase like "worked as expected"? or would
>"mystically worked" have thrown you off as well?
>
>(if this message sounds condescending, it is. i was seriously offended
>by the verbosity and tone of your post. apologies if you are
>offended.)

Yours is quite a poor attitude to take toward people who
are attempting to assist you on their own time, for free,
particularly in light of A) your example not being exactly
valid HTTP and B) that it appears the problem was somewhere
else altogether.

Hopefully your issue is solved, now. If it is not, feel free
to askfor further advice but please try to do so with civility
and respect.

E

Hal Fulton

unread,
May 23, 2005, 11:35:42 PM5/23/05
to
grey...@gmail.com wrote:

> it works without any linefeeds. newlines are sufficient in all my test
> cases, irregarldess of my choice of language. all platforms are
> unix-based, and i've not touched Windows in quite some time, so i'm
> unsure of its behavior or requirements.
>
> if it's out of spec, it doesn't seem to matter.

I think that's dependent on the web server, or is it the browser?
Too late for my poor brain.

Some are "looser" than others, but Ara is quite right in saying
that it is supposed to be a CRLF combination.

It really is better to code to the spec -- better to work 100%
of the time than 98%.


Cheers,
Hal

0 new messages