RoR with apache2 on SuSE


Hi, I have an application completed that was built with RoR on windows. So this of course was tested with the webbrick server. I now want to put the project on our apache web server for production. I am having a very hard time getting this accomplished. I followed some of the steps here (because not all of them worked): Peak Obsession And I have managed to get ruby, rails, fcgi, and mod_fcgi all installed and working. I even have a test fcgi script that runs fine. However, I'm just not sure how to reference the project once it is on the server. With webbrick you just say localhost:3000/project_name. But we can't say http://192.168.X.X/project_name on the apache web server because there is no index document. I can hit http://192.168.X.X/project_name/public but when I click on about your applications environment I get this ugly output:

#!/usr/bin/ruby # # You may specify the path to the FastCGI crash log (a log of unhandled # exceptions which forced the FastCGI instance to exit, great for debugging) # and the number of requests to process before running garbage collection. # # By default, the FastCGI crash log is RAILS_ROOT/log/fastcgi.crash.log # and the GC period is nil (turned off). A reasonable number of requests # could range from 10-100 depending on the memory footprint of your app. # # Example: # # Default log path, normal GC behavior. # RailsFCGIHandler.process! # # # Default log path, 50 requests between GC. # RailsFCGIHandler.process! nil, 50 # # # Custom log path, normal GC behavior. # RailsFCGIHandler.process! '/var/log/myapp_fcgi_crash.log' # require File.dirname(__FILE__) + "/../config/environment" require 'fcgi_handler' RailsFCGIHandler.process!

All of the tutorials that I find seem to say the same stuff, has anyone set this up before that could help?



Last time I tried to set up Apache + FastCGI + Rails on SuSE, it didn't work out so hot. Apache 2.2 is the default Apache version, and I couldn't get mod_fcgi and FastCGI installed and compiled happily. The situation may have changed, and someone who actually knows what they are doing could probably get it to work, but I ended up using fcgid, and that's been fine.

If you want details about what I tried or have running now, let me know.

My advice to you -- though, I haven't done this on SuSE -- is to go with mongrel. It's much easier to set up and works great. You'll also need something like pound out in front on a production site.


If you’ve got apache 2.2, it makes a nice load balance in front of mongrel and mongrel_cluster :

By "running with this framework," you mean Mongrel + Apache? Take a look here: I have a similar set-up on a BSD staging server, and I like it. Though I have to say that fcgid has done just fine on a moderately-high traffic site.

Here's a summary of what I've got in production on SuSE 10.1:

apache2 2.2.0 apache2-devel 2.2.0 apache2-prefork 2.2.0 libapr1 1.2.2 libapr1-devel 1.2.2 ruby 1.8.4 FastCGI 2.4.0 FastCGI-devel 2.4.0 apache2-mod_fcgid 1.07 Ruby fcgi 0.8.7 (ruby-fcgi 0.8.6 SuSE packages not installed)

/etc/sysconfig/apache2 APACHE_MODULES: fcgid

/etc/conf.d/mod_fcgid.conf <IfModule mod_fcgid.c>            DefaultInitEnv RAILS_ENV production            SocketPath /tmp/fcgidsock            AddHandler fcgid-script .fcgi            IdleTimeOut 3600            ProcessLifeTime 7200            MaxProcessCount 8            DefaultMaxClassProcessCount 3            IPCConnectTimeout 20            IPCCommTimeout 300 </IfModule>

/etc/vhosts.d/obra.conf <VirtualHost>      DocumentRoot /srv/www/rails/obra/current/public      ErrorLog /srv/www/rails/obra/current/log/server.log      UseCanonicalName On      <Directory "/srv/www/rails/obra">          Options ExecCGI FollowSymLinks          AllowOverride All          Allow from all          Order allow,deny      </Directory> </VirtualHost>

This is what I had before with Apache 2.0 and SuSE 10.0: /etc/conf.d/mod_fastcgi.conf <IfModule mod_fastcgi.c>     FastCgiIpcDir /tmp/fcgi_ipc/     FastCgiServer /srv/www/rails/obra/current/public/dispatch.fcgi -initial-env RAILS_ENV=production -processes 6 -idle-timeout 60 </IfModule>

BTW, thinking about your original post, does 'RAILS_ROOT/log/fastcgi.crash.log' exist, and is it writable by your Apache user?


The Apache virtual host entry + Rails' routes.rb determine the URL. RAILS_ROOT/public is the root for static content. In your example, will return the default public/index.html page.

With my example config: <VirtualHost>      DocumentRoot /srv/www/rails/obra/current/public      <Directory "/srv/www/rails/obra"> ...      </Directory> </VirtualHost>

routes.rb: map.connect "/schedule/:year/:action", :controller => "schedule"

So, gets you to my ScheduleController's list method. If you want to handle requests like, see the comments in routes.rb. If you want to set up different Rails projects in their own directories (e.g.,, you'll need to set up Locations in your Apache config.