Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > Ruby > Apache mod_rewrite External Rewriting Program

Reply
Thread Tools

Apache mod_rewrite External Rewriting Program

 
 
Patrick Joyce
Guest
Posts: n/a
 
      11-01-2007
I needed to do a bit of complicated URL rewriting for a project I'm
working on. Apache's mod_rewrite's built in capabilities wouldn't do, so
I decided to make an External Rewriting Program
(http://httpd.apache.org/docs/2.2/mod...tml#rewritemap) to do
it.

All the examples I could find were in Perl, but I wanted to take a stab
at it in Ruby. What I have works most of the time, but occasionally
fails with what appears to be a concurrency issue.

Here is a simplified version of what I have:

---------------------
#!/opt/csw/bin/ruby

# Turn off buffering
STDIN.sync = true
STDOUT.sync = true

# Enter loop
while (STDIN)
host = gets
if host =~ /^(.+)\.somedomain\.com$/
puts $1
else
puts 'NULL'
end
end
---------------------

And here are the pertinent rewrite_log entries ("key" is what is passed
to my program via STDIN, "val" is what my program returns to STDOUT):

---------------------
[mysubdomain.somedomain.com/sid#81b3d48][rid#837ef38/initial] (5) map
lookup OK: map=lookup_subdomain key=mysubdomain.somedomain.com ->
val=msbomain
[mysubdomain.somedomain.com/sid#81b3d48][rid#837ef38/initial] (5) map
lookup OK: map=lookup_subdomain key=mysubdomain.somedomain.com ->
val=yudmysubdomain
---------------------

So... "mysubdomain.somedomain.com" is passed via STDIN to my program
twice. The first time returns "msbomain" and the second returns
"yudmysubdomain"

Isn't this program single threaded? Any ideas as to how my output is
being interleaved?

I'm running ruby 1.8.5 (2006-12-25 patchlevel 12) [i386-solaris2.8] on a
Joyent Accelerator.

Thanks is advance for your help.

- Patrick Joyce
--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
 
patrick.t.joyce@gmail.com
Guest
Posts: n/a
 
      11-01-2007
OK, so I'm now actually pretty sure this isn't a problem with my Ruby
code, but a problem with either Solaris or Apache.

I went ahead and took the Perl example from the Apache docs, modified it
slightly to match my example, and still got the same problem:
intermittently interleaved results.

This makes me pretty confident that the problem is outside of Ruby
(unless of course, and I'm not ruling this out, I somehow made the same
mistake in both Ruby and Perl).

Since it doesn't seem to be a Ruby issue I don't expect any help here,
but if anyone has ANY idea what could be going on I would be forever in
your debt.

- Patrick Joyce

The Perl is below.

-----------------
#!/usr/bin/perl

#disable buffered I/O which would lead
#to deadloops for the Apache serve
$| = 1;

#read URLs one per line from stdin and
#generate substitution URL on stdout
while (<>) {
/^(.+)\.somedomain\.com$/;
print $1, "\n";
}
-----------------

--
Posted via http://www.ruby-forum.com/.

 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
perl script for apache mod_rewrite Aaron Haspel Perl Misc 11 09-10-2006 05:41 AM
MOD_REWRITE - Latin2 characters - 404 ERROR! janecki@gmail.com HTML 1 08-05-2006 06:10 PM
mod_rewrite active? MS Computer Support 1 08-14-2005 04:24 PM
Apache mod_rewrite Peter Morris [Droopy eyes software] ASP .Net 1 02-19-2005 08:53 PM
Servlet front page without redirect - Tomcat 4.1 with mod_rewrite and mod_jk2 Alex Martinoff Java 2 09-07-2003 06:50 PM



Advertisments