super simple serving of ruby pages

Z

zerohalo

Hi. I apologize in advance if this is a dumb question, but though I've
searched online I haven't found an answer.

I'm starting to teach my 8yr daughter Ruby. We've covered HTML and CSS
already and she handcoded her own static website. I'd like to
incorporate her Ruby learning experience into her website, which is
much more interesting for her than using Ruby to write scripts or
desktop apps. She's just starting out, so Rails is much too complicated
for her. She's not ready for the whole MVC concept yet. What I'd like
to do is to run very simple Ruby scripts from the site and incorporate
Ruby code into rhtml files, but without Rails. I don't really want a
"framework", just the ability to run a ruby file that will serve up an
rhtml file. In other words, something very simple like PHP (I don't
want to teach her PHP). [I'll get into Rails later once she's more
advanced.]

ERb looks like the ticket, but there's a missing link (for me). I can
write a ruby script that generates an rhtml file, but then how do I
serve that rhtml file without a framework like
Rails/Nitro/Camping/etc.? Probably the answer is with Webrick somehow,
but I'm missing the connection. I can't find a simple tutorial anywhere
online, and I'm no expert on web applications.

Thanks for the help.
 
S

Simen Edvardsen

Hi. I apologize in advance if this is a dumb question, but though I've
searched online I haven't found an answer.

I'm starting to teach my 8yr daughter Ruby. We've covered HTML and CSS
already and she handcoded her own static website. I'd like to
incorporate her Ruby learning experience into her website, which is
much more interesting for her than using Ruby to write scripts or
desktop apps. She's just starting out, so Rails is much too complicated
for her. She's not ready for the whole MVC concept yet. What I'd like
to do is to run very simple Ruby scripts from the site and incorporate
Ruby code into rhtml files, but without Rails. I don't really want a
"framework", just the ability to run a ruby file that will serve up an
rhtml file. In other words, something very simple like PHP (I don't
want to teach her PHP). [I'll get into Rails later once she's more
advanced.]

ERb looks like the ticket, but there's a missing link (for me). I can
write a ruby script that generates an rhtml file, but then how do I
serve that rhtml file without a framework like
Rails/Nitro/Camping/etc.? Probably the answer is with Webrick somehow,
but I'm missing the connection. I can't find a simple tutorial anywhere
online, and I'm no expert on web applications.

Thanks for the help.

Webrick has WEBrick::HTTPServlet::ERBHandler, which (I believe) serves
ERb pages. Mongrel probably has something similar.
 
J

Jan Svitok

Hi. I apologize in advance if this is a dumb question, but though I've
searched online I haven't found an answer.

I'm starting to teach my 8yr daughter Ruby. We've covered HTML and CSS
already and she handcoded her own static website. I'd like to
incorporate her Ruby learning experience into her website, which is
much more interesting for her than using Ruby to write scripts or
desktop apps. She's just starting out, so Rails is much too complicated
for her. She's not ready for the whole MVC concept yet. What I'd like
to do is to run very simple Ruby scripts from the site and incorporate
Ruby code into rhtml files, but without Rails. I don't really want a
"framework", just the ability to run a ruby file that will serve up an
rhtml file. In other words, something very simple like PHP (I don't
want to teach her PHP). [I'll get into Rails later once she's more
advanced.]

ERb looks like the ticket, but there's a missing link (for me). I can
write a ruby script that generates an rhtml file, but then how do I
serve that rhtml file without a framework like
Rails/Nitro/Camping/etc.? Probably the answer is with Webrick somehow,
but I'm missing the connection. I can't find a simple tutorial anywhere
online, and I'm no expert on web applications.

Thanks for the help.

Webrick seems to have support for ERB - see httpservlet/erbhandler.rb,
that is used for .rhtml files by FileHandler. Just find in the
tutorials how to start webrick for a given document root
(Webrick::HttpServer.new({:DocumentRoot = '/var/www/'}) and
something?)

You can use meta_vars and query variables in your rhtml files.
 
Z

zerohalo

Paul said:
Just one question. Do you want the existing Web server to serve your Ruby
code, or do you require the server to be Ruby-based also?

No, the server doesn't need to be Ruby-based. I could use lighttpd or
apache to serve the code.
If the former, you can tell Apache to serve Ruby scripts that contain the
usual CGI conventions. That seems simple enough. And it might not be what
you are asking for.

That's the part I'm missing. I find Apache extremely difficult to
configure (beyond the basics). How would I tell Apache to serve Ruby
scripts?

Thanks.
 
J

Jan Svitok

No, the server doesn't need to be Ruby-based. I could use lighttpd or
apache to serve the code.


That's the part I'm missing. I find Apache extremely difficult to
configure (beyond the basics). How would I tell Apache to serve Ruby
scripts?

In a recent thread (eruby?) someone mentioned adding
AddType application/x-httpd-eruby .rhtml
Action application/x-httpd-eruby /cgi-bin/eruby
to httpd.conf

In my win installation there is c:/ruby/bin/erb.bat so I suppose there
is something similar in unix. Now either add #!/usr/bin/erb to the top
of any .cgi file or, preferably, do something similar to the above,
somehow telling apache to run erb.

(I'm not an apache guru, so these are just hints to get you started...)
 
Z

zerohalo

Jan said:
Webrick seems to have support for ERB - see httpservlet/erbhandler.rb,
that is used for .rhtml files by FileHandler. Just find in the
tutorials how to start webrick for a given document root
(Webrick::HttpServer.new({:DocumentRoot = '/var/www/'}) and
something?)

Yes, I tried that. Unfortunately there is no documentation on the
webrick site on how to use ERBHandler. I have this in a ruby script
which does start up the Webrick server. However, while it serves HTML
files fine, it treats RHTML files as binaries and RB files as just
plain text. Here's my code:

<pre><code>
require 'webrick'
include WEBrick

def start_webrick(config = {})
config.update:)Port => 8080)
server = HTTPServer.new(config)
yield server if block_given?
['INT', 'TERM'].each {|signal|
trap(signal) {server.shutdown}
}
ruby_dir = File.expand_path('/data/sandbox/ruby')
server.mount("/data/sandbox/ruby", HTTPServlet::ERBHandler, ruby_dir)
server.start
end

start_webrick:)DocumentRoot => '/data/sandbox/ruby')
</code></pre>
 
J

Jan Svitok

Yes, I tried that. Unfortunately there is no documentation on the
webrick site on how to use ERBHandler. I have this in a ruby script
which does start up the Webrick server. However, while it serves HTML
files fine, it treats RHTML files as binaries and RB files as just
plain text. Here's my code:

require 'webrick'
include WEBrick

def start_webrick(config = {})
config.update:)Port => 8080)
+ config.update:)MimeTypes => {'rhtml' => 'text/html'})
server = HTTPServer.new(config)
yield server if block_given?
['INT', 'TERM'].each {|signal|
trap(signal) {server.shutdown}
}
- ruby_dir = File.expand_path('/data/sandbox/ruby')
- server.mount("/data/sandbox/ruby", HTTPServlet::ERBHandler, ruby_dir)
server.start
end

start_webrick:)DocumentRoot => '/data/sandbox/ruby')
 
Z

zerohalo

Thanks, Jan. That was easy. Now .rhtml files render correctly.

Is there a way to tell it to execute .rb files rather than treat them
as simple text files?

Jan said:
Yes, I tried that. Unfortunately there is no documentation on the
webrick site on how to use ERBHandler. I have this in a ruby script
which does start up the Webrick server. However, while it serves HTML
files fine, it treats RHTML files as binaries and RB files as just
plain text. Here's my code:

require 'webrick'
include WEBrick

def start_webrick(config = {})
config.update:)Port => 8080)
+ config.update:)MimeTypes => {'rhtml' => 'text/html'})
server = HTTPServer.new(config)
yield server if block_given?
['INT', 'TERM'].each {|signal|
trap(signal) {server.shutdown}
}
- ruby_dir = File.expand_path('/data/sandbox/ruby')
- server.mount("/data/sandbox/ruby", HTTPServlet::ERBHandler, ruby_dir)
server.start
end

start_webrick:)DocumentRoot => '/data/sandbox/ruby')
 
J

John Gabriele

[snip]
If the former, you can tell Apache to serve Ruby scripts that contain the
usual CGI conventions. That seems simple enough. And it might not be what
you are asking for.

That's the part I'm missing. I find Apache extremely difficult to
configure (beyond the basics). How would I tell Apache to serve Ruby
scripts?

On Debian and Ubuntu, it just works. After you apt-get install
apache2, you just copy some foo.rb file (maybe like the one shown
below) to /usr/lib/cgi-bin/ and then point your browser at
http://localhost/cgi-bin/foo.rb and boom. :)

==== snip /usr/lib/cgi-bin/foo.rb ====
#!/opt/ruby/bin/ruby -w

puts "Content-type: text/html"
puts

puts "<html><body>
<p>The time is now #{Time.now}, so you'd
better get crackin'!
</p>
</body>
</html>"
==== /snip ====

---John
 
J

Jan Svitok

Thanks, Jan. That was easy. Now .rhtml files render correctly.

Is there a way to tell it to execute .rb files rather than treat them
as simple text files?
+ module WEBrick
+ module HTTPServlet
+ FileHandler.add_handler("rb", CGIHandler)
+ end
+ end
def start_webrick(config = {})
config.update:)Port => 8080)
+ config.update:)MimeTypes => {'rhtml' => 'text/html'})
server = HTTPServer.new(config)
yield server if block_given?
['INT', 'TERM'].each {|signal|
trap(signal) {server.shutdown}
}
- ruby_dir = File.expand_path('/data/sandbox/ruby')
- server.mount("/data/sandbox/ruby", HTTPServlet::ERBHandler, ruby_dir)
server.start
end

start_webrick:)DocumentRoot => '/data/sandbox/ruby')

Now it starts .rb for me, although I'm not able to write any good cgi
right now ;-) maybe it's because I'm on windows...
 
Z

zerohalo

Jan said:
Now it starts .rb for me, although I'm not able to write any good cgi
right now ;-) maybe it's because I'm on windows...

Doesn't work for me. With even the simplest .rb file it gives me the
following error:

ERROR Premature end of script headers:

but maybe I need to put a particular include in particular at the top
of each .rb file? Not used to working with .rb files outside Rails.
 
Z

zerohalo

Paul said:
This is a classic CGI header error, caused by the absence of a recognizable
emitted header like:

print "Content-type: text/html\r\n\r\n"

As the first text emitted by the script.

Got it. That works, thanks, Paul, and Jan, for your patience with my
ignorance.
 
B

Bil Kleb

zerohalo said:
Hi.
Hi.

She's just starting out, so Rails is much too complicated
for her. She's not ready for the whole MVC concept yet.

FWIW, I have the brain of an 8yr old in when it comes
to web-aps, and I managed to write a /couple/ Camping aps
the other evening.

Regards,
 
J

Jonathan Denni

François Montel said:
Got it. That works, thanks, Paul, and Jan, for your patience with my
ignorance.

It seems like I am at the same level as your daughter [although a whole
9 years older] and am trying to do the same thing you are. I could not
get anything working from what I gathered in this thread, but it seems
you have. Can you tell me what you ended up doing so I can do that too?

thanks
 
H

Hal Fulton

Bil said:
FWIW, I have the brain of an 8yr old in when it comes
to web-aps, and I managed to write a /couple/ Camping aps
the other evening.

Fascinating. I've looked at Camping but haven't really
grasped it yet.

I'm not a web guy. I do it slowly and painfully.

I also have the brain of an eight year old. I keep it
in a jar on my desk.


Hal
 
J

James Britt

zerohalo said:
Hi. I apologize in advance if this is a dumb question, but though I've
searched online I haven't found an answer.

I'm starting to teach my 8yr daughter Ruby. We've covered HTML and CSS
already and she handcoded her own static website. I'd like to
incorporate her Ruby learning experience into her website, which is
much more interesting for her than using Ruby to write scripts or
desktop apps. She's just starting out, so Rails is much too complicated
for her. She's not ready for the whole MVC concept yet. What I'd like
to do is to run very simple Ruby scripts from the site and incorporate
Ruby code into rhtml files, but without Rails. I don't really want a
"framework", just the ability to run a ruby file that will serve up an
rhtml file. In other words, something very simple like PHP (I don't
want to teach her PHP). [I'll get into Rails later once she's more
advanced.]

ERb looks like the ticket, but there's a missing link (for me). I can
write a ruby script that generates an rhtml file, but then how do I
serve that rhtml file without a framework like
Rails/Nitro/Camping/etc.? Probably the answer is with Webrick somehow,
but I'm missing the connection. I can't find a simple tutorial anywhere
online, and I'm no expert on web applications.

I've an example of this that's ~100 lines of code, if you're interested.

Maps URLs to classes and templates and renders them, using erb and
Webrick.
 
E

Ezra Zygmuntowicz

zerohalo said:
Hi. I apologize in advance if this is a dumb question, but though
I've
searched online I haven't found an answer.
I'm starting to teach my 8yr daughter Ruby. We've covered HTML and
CSS
already and she handcoded her own static website. I'd like to
incorporate her Ruby learning experience into her website, which is
much more interesting for her than using Ruby to write scripts or
desktop apps. She's just starting out, so Rails is much too
complicated
for her. She's not ready for the whole MVC concept yet. What I'd like
to do is to run very simple Ruby scripts from the site and
incorporate
Ruby code into rhtml files, but without Rails. I don't really want a
"framework", just the ability to run a ruby file that will serve
up an
rhtml file. In other words, something very simple like PHP (I don't
want to teach her PHP). [I'll get into Rails later once she's more
advanced.]
ERb looks like the ticket, but there's a missing link (for me). I can
write a ruby script that generates an rhtml file, but then how do I
serve that rhtml file without a framework like
Rails/Nitro/Camping/etc.? Probably the answer is with Webrick
somehow,
but I'm missing the connection. I can't find a simple tutorial
anywhere
online, and I'm no expert on web applications.

I've an example of this that's ~100 lines of code, if you're
interested.

Maps URLs to classes and templates and renders them, using erb and
Webrick.

I'd be interested in seeing that James.

Thanks
-Ezra
 
J

Jonathan Denni

Paul said:
A Ruby interpreter must be installed on the server machine. Apart from
that,
it should work without any fuss.

ahh, well, thats probably my problem. i'm using the cheapest server i
could find (canaca.com), which obviousely has no support for ruby. i was
hoping there was some shortcut way i could use ruby on my website
without having to change servers. is there some way to do that, or is it
totally hopeless?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,071
Latest member
MetabolicSolutionsKeto

Latest Threads

Top