[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

super simple serving of ruby pages

François Montel

9/20/2006 3:56:00 PM

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.

34 Answers

Simen

9/20/2006 4:17:00 PM

0

On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> 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.


--
- Simen

Paul Lutus

9/20/2006 4:25:00 PM

0

zerohalo wrote:

/ ...

> 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.

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?

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.

--
Paul Lutus
http://www.ara...

Jano Svitok

9/20/2006 4:25:00 PM

0

On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> 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.

François Montel

9/20/2006 4:38:00 PM

0


Paul Lutus wrote:
> 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.

Jano Svitok

9/20/2006 4:52:00 PM

0

On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
>
> Paul Lutus wrote:
> > 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?

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...)

François Montel

9/20/2006 4:55:00 PM

0


Jan Svitok wrote:

> 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>

Jano Svitok

9/20/2006 5:17:00 PM

0

On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> 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')

François Montel

9/20/2006 5:32:00 PM

0

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 Svitok wrote:
> On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> > 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')

jmg3000

9/20/2006 5:42:00 PM

0

On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> [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

Jano Svitok

9/20/2006 5:59:00 PM

0

On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> 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 Svitok wrote:
> > On 9/20/06, zerohalo <zerohalo@gmail.com> wrote:
> > > 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
+ 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...