Apache + Mongrel + PHP

89 views
Skip to first unread message

Shimon Amit

unread,
Oct 18, 2006, 9:39:33 AM10/18/06
to rubyonra...@googlegroups.com
I've got an Apache + PHP website and I'd like it to work side by side with Rails using Mongrel.  How do I configure httpd.conf (without using a cluster) to forward rails requests to Mongrel and let the php ones continue working as is? Is this possible?
 
Here's the basic setup:
 
File system:
apache/htdocs - contains all the php scripts
railsproj/public - public rails project folder
 
HTTP settings:
http://www.example.com/ -> apache/htdocs
http://www.example.com:4000 -> railsproj/public
 
Thanks,
Shimon Amit

Frederick Cheung

unread,
Oct 18, 2006, 10:38:42 AM10/18/06
to rubyonra...@googlegroups.com
We do something a little like that. There may be other ways, but we've
used virtual hosts, ie

<VirtualHost *:80>
#stuff for your rails site
</VirtualHost>

<VirtualHost *:4000>
#stuff for your php site.
</VirtualHost>


Fred

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

Shimon Amit

unread,
Oct 18, 2006, 10:56:54 AM10/18/06
to rubyonra...@googlegroups.com
But doesn't that mean that the end user has to enter the port number (www.example.com:4000) in his browser?  How can I configure it so that www.example.com/[anything/].php goes to the php parser and everything else goes to mongrel/rails?

Philip Hallstrom

unread,
Oct 18, 2006, 12:02:33 PM10/18/06
to rubyonra...@googlegroups.com
> I've got an Apache + PHP website and I'd like it to work side by side with
> Rails using Mongrel. How do I configure httpd.conf (without using a
> cluster) to forward rails requests to Mongrel and let the php ones continue
> working as is? Is this possible?

Yes...

http://groups.google.com/group/rubyonrails-talk/msg/99b36051504f783f

Lance Ivy

unread,
Oct 18, 2006, 11:57:24 AM10/18/06
to rubyonra...@googlegroups.com
Hmm, try setting up a proxy? In Apache, look at
http://httpd.apache.org/docs/2.0/mod/mod_proxy.html, especially at the
proxypass directive.

Shimon Amit wrote:
> But doesn't that mean that the end user has to enter the port number

> (www.example.com:4000 <http://www.example.com:4000>) in his browser?

> How can I configure it so that www.example.com/[anything/].php

> <http://www.example.com/%5Banything/%5D.php> goes to the php parser

> and everything else goes to mongrel/rails?
>
>

> On 10/18/06, *Frederick Cheung* <rails-mai...@andreas-s.net

> <mailto:rails-mai...@andreas-s.net>> wrote:
>
>
> We do something a little like that. There may be other ways, but we've
> used virtual hosts, ie
>
> <VirtualHost *:80>
> #stuff for your rails site
> </VirtualHost>
>
> <VirtualHost *:4000>
> #stuff for your php site.
> </VirtualHost>
>
>
> Fred
>
> --
> Posted via http://www.ruby-forum.com/.
>
>
>
> >

--
Lance Ivy
Web Applications Developer
RBS Interactive
lanc...@rbsinteractive.com

Shimon Amit

unread,
Oct 19, 2006, 9:39:41 AM10/19/06
to rubyonra...@googlegroups.com
Thanks everybody.  My goal was to setup a Ruby on Rails development environment on Windows XP allowing PHP and Rails to run side by side without clustering or proxying. Here's my summary as to how I succeeded to setup the following development environment:
 
- Windows XP
- Xampp: Apache 2.0, PHP 5, MySQL 5
- Ruby 1.8.5
- Rails 1.1.6
- Mongrel (gems: mongrel, mongrel_service)

Here's how:
 
INSTALLATIONS
 
1) First I installed XAMPP 1.5.0-pl1.  I didn't use the most recent version because of MySQL/Ruby compatibility Issues.
 
2) Ruby 1.8.5 - One click installer
 
3) Rails: At the command line: gem install rails --include-dependencies.  I used to have Ruby 1.8.2 installed and with the version of RubyGems that it came with the gem commands used to freeze.  I know things still aren't too stable with Ruby on Windows, but after I upgraded to 1.8.5 the gem command started working nicely.
 
4) Mongrel: gem install mongrel_service --include-dependencies. This will also install the mongrel gem.  This gem will allow mongrel to run on Windows as a service.
 
 
CONFIGURATIONS
 
1) Apache.  Append the following to the httpd.conf file.  Notice that I used mod_rewrite rather than mod_proxy to forward requests to mongrel.  (If this is a no no, I have yet to find out!)  I didn't want to have to configure a mongrel cluster.

<VirtualHost *:80>

    ServerName 127.0.0.1
    DocumentRoot C:/path/to/rails/project

    <Directory "C:/path/to/rails/project">
      Options FollowSymLinks
      AllowOverride None
      Order allow,deny
      Allow from all
    </Directory>

    RewriteEngine On

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d
    RewriteRule ^(.+[^/])$ $1/ [R]

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} \.php
    RewriteRule ^(.*)$ $1 [QSA,L]

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}/index.html -f
    RewriteRule ^(.*)$ $1/index.html [QSA,L]

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME}/index.php -f
    RewriteRule ^(.*)$ $1/index.php [QSA,L]

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} -d
    RewriteRule ^(.*)[^/]$ $1/ [QSA,L] 

    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f 
    RewriteRule ^/(.*)$ http://127.0.0.1:4000%{REQUEST_URI} [P,QSA,L] 
</VirtualHost>

2) Mongrel.  This is a one-time command to run at the command prompt to install a mongrel service that will serve your rails application: 

mongrel_rails service::install -N [name_of_service] -c [c:\path\to\rails\project] -p 4000 -e [development]
[name_of_service] - name of the Mongrel Windows service that will serve the rails project.
[c:\path\to\rails\project] - as it says.
[development] - this can be either 'development' or 'production'.  As you can guess, running on Windows with XAMPP, I was running a development environment.
 
3) Rails. Configure your development database in [c:\path\to\rails\project]\config\database.yml.
 
 
INITIATIONS
 
1) Command line: mongrel_rails service::start -N [name_of_service]
 
2) Start Apache+MySQL with XAMPP Control Panel.
 
3) Go to 127.0.0.1 in your browser.
 
 
RESOURCES
 
Local Development Environment
 
Faster Is Possible (Official mongrel documentation - mongrel.rubyforge.org)
 
Ruby On Rails List (Thanks Phillip)
 
 
Let me know if I've left anything out.  I hope this thread will help newcomers overcome the difficulties of setting up Rails on Windows for the first time!
 
Best,
Shimon Amit

Peter Bengtson

unread,
Oct 19, 2006, 9:59:26 AM10/19/06
to rubyonra...@googlegroups.com
Shameless plug: Take a look at LiteSpeed. It allows you to do all
this and more. It's fast, free, and you don't need mongrel och
mongrel_cluster. Rails processes can spawn - quickly - just like PHP
processes, and the two can coinhabit the same server.

/ Peter

On 19 okt 2006, at 15.39, Shimon Amit wrote:

> Thanks everybody. My goal was to setup a Ruby on Rails development
> environment on Windows XP allowing PHP and Rails to run side by
> side without clustering or proxying. Here's my summary as to how I
> succeeded to setup the following development environment:
>
> - Windows XP
> - Xampp: Apache 2.0, PHP 5, MySQL 5
> - Ruby 1.8.5
> - Rails 1.1.6
> - Mongrel (gems: mongrel, mongrel_service)
>
> Here's how:
>
> INSTALLATIONS
>
> 1) First I installed XAMPP 1.5.0-pl1. I didn't use the most recent
> version because of MySQL/Ruby compatibility Issues.
> http://prdownloads.sourceforge.net/xampp/xampp-win32-1.5.0-pl1-
> installer.exe?download
>
> 2) Ruby 1.8.5 - One click installer
> http://www.ruby-lang.org/en/downloads
>
> 3) Rails: At the command line: gem install rails --include-

> dependencies. I used to have Ruby 1.8.2 installed and with the

Shimon Amit

unread,
Oct 19, 2006, 10:25:52 AM10/19/06
to rubyonra...@googlegroups.com
LiteSpeed definately looks like it has prospects, but it doesn't run on Windows.  I may try it with MS Virtual PC but I'm not quite there yet.

 

Jason Norris

unread,
Oct 19, 2006, 10:27:19 AM10/19/06
to rubyonra...@googlegroups.com
I had looked at LiteSpeed for a production app, and the commercial
version looks freaking fast. The free version looks about the same,
performance-wise, as lighttpd. Lighttpd also can serve both rails and
php through fcgi. Does litespeed have any advantages over lighttpd?

Peter Bengtson

unread,
Oct 19, 2006, 11:31:59 AM10/19/06
to rubyonra...@googlegroups.com
Yes. You don't need to allocate a bunch of static FCGI workers. They
are spawned as needed, and you can control the maximum allowed number
of them. Also, configuring a Rails site is a doddle. As is multiple
Rails apps on one server. And it's configurable through a web interface.

Curt Hibbs

unread,
Oct 20, 2006, 1:01:48 AM10/20/06
to rubyonra...@googlegroups.com
On 10/19/06, Shimon Amit <shimo...@gmail.com> wrote:
> Thanks everybody. My goal was to setup a Ruby on Rails development
> environment on Windows XP allowing PHP and Rails to run side by side without
> clustering or proxying.

No, no, no... proxying is how you are *supposed* to use Apache with
Mongrel. If you don't want use proxying then just browse directly to
the port # on which you are having Mongrel serve up your Rails app.

Curt

Shimon Amit

unread,
Oct 20, 2006, 7:35:41 AM10/20/06
to rubyonra...@googlegroups.com
I don't want to have to enter the port number.  It is not elegant.  Plus, I don't want to make provisions for that type of URL pattern in the links (PHP links).  The last line of the VirtualHost section above says:
 
RewriteRule ^/(.*)$ http://127.0.0.1:4000%{REQUEST_URI} [P,QSA,L] 
 
This is the line that rewrites all the rails requests to mongrel. Problem is, I can't use ProxyPass rather than RewriteRule because it does not accept regular expressions.  Do you have any suggestions? Plus, why is it preferable to use mod_proxy rather than mod_rewrite with Mongrel?
 
Thanks,
Shimon
 

David Morton

unread,
Oct 21, 2006, 12:04:28 PM10/21/06
to rubyonra...@googlegroups.com
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1


On Oct 20, 2006, at 6:35 AM, Shimon Amit wrote:
> expressions. Do you have any suggestions? Plus, why is it
> preferable to use mod_proxy rather than mod_rewrite with Mongrel?

>
As I understand it, it's the API required... fcgi expects the web
server to use that protocol which is handled by a web server module,
and the rewrite is what triggers it.

OTOH, mongrel is a HTTP server; it expects the proxied http
request. Why don't you want proxying? It's already available with
apache... and it works well. We have php and rails w/ mongrel
working in InstantRails...


>
David Morton
Maia Mailguard http://www.maiamailguard.com
mort...@dgrmm.net

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (Darwin)

iD8DBQFFOkUSUy30ODPkzl0RAu/2AJ0T+oxl9QdGsCmC+L/xrES4GtHk9QCgrZrz
79CT9E5xeK9vbEOMnTlglAo=
=0DDL
-----END PGP SIGNATURE-----

Shimon Amit

unread,
Oct 22, 2006, 2:31:11 AM10/22/06
to rubyonra...@googlegroups.com
I tried InstantRails but they don't offer MySQL 5 which is a requirement.  Regarding proxies, I have no objection to using them so long as I can use regular expressions (see post above) to filter requests.  So far I've only had success with mod_rewrite and not with mod_proxy.
Reply all
Reply to author
Forward
0 new messages