Apache proxypass messes up my link_to's

Hey all,

Ive got some heavy restrictions on a site I'm building. I have to serve
my rails app from a different machine than my web server. The webserver
*must* use apache, and I cant muck with its configuration too much,
other than to modify the httpd.conf file a bit. I don't know much about
Apache, but I found a little gem called proxypass that seemed to get me
a little closer to the final solution. The rails server machine is
completely configurable by me, so that's the good news.

I used Apache proxypass and proxypassreverse in order to be able to
access my rails machine like so:
http://thewebserver.com/myapp/controller/action/id. This works fine,
except all of my link_to's and redirect_to's are now 404s as they point
straight to http://thewebserver.com/controller/action/id.

Am I missing something? I may be misusing proxypass for all I know. I
was hoping some of y'all had come across something like this before.
The bottom of my httpd.conf looks like this:

ProxyPass /myapp/ http://myrailsserver:3000/
ProxyPass /myapp http://myrailsserver:3000/
ProxyPassReverse /myapp/ http://myrailsserver:3000/

I'm using webrick as the http server for rails for now, but plan to
move to mongrel once I get this solved.

Thanks in advance,

John

You should put the following line in environment.rb:
ActionController::AbstractRequest.relative_url_root = '/myapp'
I once documented this at
<http://wiki.rubyonrails.org/rails/pages/HowtoSetupApacheProxyingToLighttpdWithFastCGI>.
That wiki entry was written for Lighttpd, but the relative_url_root part
works with webrick too.

Bart

john.h.jenkins@... <john.h.jenkins@...> writes:

I used Apache proxypass and proxypassreverse in order to be able to
access my rails machine like so:
http://thewebserver.com/myapp/controller/action/id. This works fine,
except all of my link_to's and redirect_to's are now 404s as they point
straight to http://thewebserver.com/controller/action/id.

Your directory structure should be something like this..

/public_html
  /myapp --> /any/path/public
  [other live files]

/any/path/app
/any/path/components
[...]
/any/path/public
[...]

I.e. use a symlink to the Rails public directory, which can be anywhere on the
machine (ideally not in a web-accessible directory)

Then, the rails helpers will all work as you expect, automatically.

Gareth