RoR with apache2 on SuSE

Hi,

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):
http://wiki.rubyonrails.com/rails/pages/HowtoSetupApacheWithFastCGIAndRubyBindings
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?

thanks,

Tate

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.

Scott

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

http://mongrel.rubyforge.org/docs/apache.html

By "running with this framework," you mean Mongrel + Apache? Take a look here: http://mongrel.rubyforge.org/docs/apache.html. 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 app.obra.org:80>
     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?

Scott

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

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

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

So, http://app.obra.org/schedule/2006/list gets you to my ScheduleController's list method. If you want to handle requests like http://app.obra.org, see the comments in routes.rb. If you want to set up different Rails projects in their own directories (e.g., http://www.obra.org/test_project/), you'll need to set up Locations in your Apache config.

Scott