From: Michael Schilling Date: 2006-02-09T06:36:27+09:00 Subject: Re: can't get multipart_form from cgi.rb to work Hi, thank you for the suggestions. I set the variables as you suggested (with export REQUEST_URI=/path in Linux) but always only get the form. I don't exactly know how a string from the multipart_form looks like, so I couldn't really test the behaviour. When I use the normal form method, and do not set the variables as you suggested, I get the expected result and no error from 'myscript.rb filename=something'. With the multipart_form I also get no error, but also no output -> only the form. I also thought, that this problem might be a misconfiguration of apache, but a guy on #ruby-lang told me, that it is very unlikely when the normal form method works fine. So I can't reproduce the error without using the browser, but don't get the expected result either. Thanks for any help. Bye, Michael konsu wrote on thursday the 9th of February 2006: > try running your script from the command line. but set the url and method > environment variables first. on windows i do this: > > > set REQUEST_URI=/path > set REQUEST_METHOD=GET > ruby muscript.cgi . > > this will allow you to avoid dealing with apache for a while, and will show > more errors too. > > konstantin > > > "Michael Schilling" wrote in message > news:20060208203511.GA16112@calvin.physik.uni-bielefeld.de... > > Hello everyone, > > > > I'm fairly new to ruby and wanted to write a very simple cgi program, > > which uploads a file and returns a converted file. Because it is so easy > > (and I want to learn about ruby) I tried to do it with the standard > > cgi.rb library. But I can't get the multipart_form (I need it for the > > file upload) to work right. Everything works fine using the normal form > > method, but with the multipart_form I always get an EOF Error 'no > > content body' in the apache log. As soon as there is any input from an > > multipart_form, an error occurs at: checkfile = CGI.new > > > > Below you'll find my code (I boiled it down to the important stuff) and > > the > > corresponding part of my apache2 error_log. I searched the web, several > > mailing lists and the ruby docs, but couldn't find an answer. I also > > asked on #ruby-lang in freenode, but no one there knew the cgi.rb > > library very well. > > > > Any help, on why this server error is happening, is very much > > appreciated. > > > > Bye, > > Michael <-- who hopes, that this is the right list for the question > > > > > > > > My code: > > ------------------------------------------------------------------ > > #!/usr/bin/ruby -w > > > > require "cgi" > > > > # make_form create a very simple html form > > def make_form > > make_form = CGI.new("html4") > > make_form.out { > > make_form.html { > > make_form.body { "\n" + > > # make_form.form{ "\n" + # everything works using the normal > > form > > make_form.multipart_form{ "\n" + # but not with multipart_form > > to upload a file > > make_form.file_field("filename",40,500000) + "\n" + > > make_form.br + > > make_form.submit("test it") + "\n" > > } > > } > > } > > } > > end > > > > # answer should show the filename of the uploaded file > > def answer(file_in) > > > > answer = CGI.new("html4") > > answer.out { > > answer.html { > > answer.body{ "\n" + > > answer.p{ "This should be the filename:" + file_in + "\n" } + > > answer.br > > } > > } > > } > > end > > > > > > > > begin > > checkfile = CGI.new > > parameter = checkfile['filename'] > > # parameter = checkfile.params['filename'][0] # this doesn't work either > > > > rescue > > answer("ERROR: " + $!.to_s) # send eror message to browser if possible > > end > > > > > > # create form if no data was send to the script, otherwise answer > > if parameter == "" > > make_form() > > else > > answer(parameter.to_s) > > end > > ------------------------------------------------------------------ > > > > > > Apache log: > > ------------------------------------------------------------------ > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] > > /usr/lib/ruby/1.8/cgi.rb:979:in `read_multipart', referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] : , referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] no content body, > > referer: http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] (, referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] EOFError, referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] ), referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom > > /usr/lib/ruby/1.8/cgi.rb:1104:in `initialize_query', referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom > > /usr/lib/ruby/1.8/cgi.rb:2270:in `initialize', referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom > > /home/httpd/cgi-bin/multiform-test.rb:25:in `answer', referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] \tfrom > > /home/httpd/cgi-bin/multiform-test.rb:52, referer: > > http://localhost/cgi-bin/multiform-test.rb > > [Wed Feb 08 21:08:57 2006] [error] [client 191.168.1.1] Premature end of > > script headers: multiform-test.rb, referer: > > http://localhost/cgi-bin/multiform-test.rb > > ------------------------------------------------------------------ > > > > > > > > -- > > Michael Schilling > > > > eMail : ruby@untiefe.de > > URL : http://glcu.sf.net/ > > > > > > "Change my name I remain the same." - Moloko > > > >