In the “Ruby and the Web” section of the pickaxe book they talk about
CGI and give the following example:
========
require ‘cgi’
cgi = CGI.new(“html3”) # add HTML generation methods
cgi.out do
cgi.html do
cgi.head { “\n”+cgi.title { “This Is a Test”} } +
cgi.body do “\n”+
cgi.form do"\n"+
cgi.hr +
cgi.h1 { “A Form: " } + “\n”+
cgi.textarea(“get_text”) +”\n"+
cgi.br +
cgi.submit
end
end
end
end
They claim that this program produces:
Content-Type: text/html
Content-Length: 302
This Is a Test
A Form:
======
When i run this program i get nothing on the console output, and when i
tried to run it in irb, it got stuck on the cgi = CGI.new(“html3”) line
(by stuck I mean further ENTERs don’t give me the standard
irb(main):007:0> ) and gave the following message:
(offline mode: enter name=value pairs on standard input)
When i run this program i get nothing on the console output, and when i
tried to run it in irb, it got stuck on the cgi = CGI.new(“html3”) line
(by stuck I mean further ENTERs don’t give me the standard
irb(main):007:0> ) and gave the following message:
(offline mode: enter name=value pairs on standard input)
can anyone explain to me what’s going on?
I have no experience with the cgi package at all, but the message is
clear: IRB is waiting for something on its standard input, waiting for
name=value pairs. If you want to find out exactly what these
name=value pairs are, I suggest you study the cgi package more. But I
can tell you that (at least in Linux) you tell the shell (and IRB)
that you are done with providing data from the standard input with
Ctrl-D. Indeed, if you press Ctrl-D at the above prompt, the object
creation call returns successfully.
entering control-z will print the html contents on the console,
If you want to pass some input to the script, you can enter name-value
pairs in the console
like, name=xyx.
CGI scripts are executed by a webserver like Apache. It makes no sense
to run them in the console.
not true:
10001 % ruby19
require ‘cgi’
cgi = CGI.new(“html3”) # add HTML generation methods
cgi.out do
cgi.html do
cgi.head { “\n”+cgi.title { “This Is a Test”} } +
cgi.body do “\n”+
cgi.form do"\n"+
cgi.hr +
cgi.h1 { “A Form: " } + “\n”+
cgi.textarea(“get_text”) +”\n"+
cgi.br +
cgi.submit
end
end
end
end
^d
(offline mode: enter name=value pairs on standard input)
^d
Content-Type: text/html
Content-Length: 302
In a real server case it would send parameters to the script.
In a command line case once the cgi code scope ended it will require the
parameters entered one by one and CTRL+D should run it.
I am using ruby for CGI scripts but formatting a form this way can be
very painful.
I would go for writing the RAW html by myself with touches of variables
if needed.
CGI scripts are executed by a webserver like Apache. It makes no sense
to run them in the console.
not true:
I did not mean it’s impossible. Of course CGI scripts are normal
programs.
But I don’t see the point of writing CGI scripts without actually
running them on a webserver and inspecting the result in a browser. What
do you learn from an obscure script that you have to execute in a
“strange” way to see some random gibberish on the console? There isn’t
any context.
Anyway, if that was the goal of the exercise, I guess he can move on
now.
CGI scripts are executed by a webserver like Apache. It makes no sense
to run them in the console.
not true:
10001 % ruby19
require ‘cgi’
cgi = CGI.new(“html3”) # add HTML generation methods
cgi.out do
cgi.html do
cgi.head { “\n”+cgi.title { “This Is a Test”} } +
cgi.body do “\n”+
cgi.form do"\n"+
cgi.hr +
cgi.h1 { “A Form: " } + “\n”+
cgi.textarea(“get_text”) +”\n"+
cgi.br +
cgi.submit
end
end
end
end
^d
(offline mode: enter name=value pairs on standard input)
^d
Content-Type: text/html
Content-Length: 302
This Is a Test
A Form:
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.