오래전 이야기/Server

Apache+ruby+rubygem+fastcgi

리눅스 엔지니어였던 2008. 9. 15. 14:19

Ruby on Rails
HowtoSetupApacheWithFastCGIAndRubyBindings

How to install Apache, Ruby, RubyGems, Rails, and FastCGI? under Linux

  1. Become root and go to a directory to work in
     su root cd /usr/local/src
  2. Download all of the needed files. These versions may be out of date, so you might want to go find the latest.
     wget http://xyz.lcs.mit.edu/ruby/ruby-1.8.2.tar.gz 
  3. wget http://rubyforge.org/frs/download.php/3700/rubygems-0.8.10.tgz 
  4. wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz 
  5. wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz 
  6. wget http://mirrors.ccs.neu.edu/Apache/dist/httpd/httpd-2.0.53.tar.gz
  7. Install Ruby
     tar -zxvf ruby-1.8.2.tar.gz cd ruby-1.8.2 
  8. ./configure
  9.  make 
  10. make test 
  11. make install 
  12. cd ..
  13. Install Ruby Gems
     tar -zxvf rubygems-0.8.10.tgz 
  14. cd rubygems-0.8.10 
  15. ruby setup.rb : Install required dependency rake? [Yn] y 
  16. Install required dependency activesupport? [Yn] y 
  17. Install required dependency activerecord? [Yn] y 
  18. Install required dependency actionpack? [Yn] y 
  19. Install required dependency actionmailer? [Yn] y 
  20. Install required dependency actionwebservice? [Yn] y : 
  21. cd ..
  22. Install Apache (if needed—if you have an existing Apache installation & know what you are doing this step can be skipped)
     tar -zxvf httpd-2.0.53.tar.gz cd httpd-2.0.53 
  23. ./configure --enable-rewrite --enable-cgi 
  24. make 
  25. make install 
  26. cd .. 
  27. Install FastCGI?
     tar -zxvf fcgi-2.4.0.tar.gz cd fcgi-2.4.0 
  28. ./configure 
  29. make 
  30. make install
  31. Install mod_fastcgi for Apache (note that this assumes you are using Apache-2.x, etc.; if you are using Apache 1.3, DSOs, etc. read the INSTALL file.
  32. Install Rails
     gem install rails
  33. Install the fcgi gem
     gem install fcgi

    On FreeBSD, If you receive “ERROR: While executing gem” stating “checking for fcgiapp.h… no” then you will have to run the gem install with alternate syntax:
     gem install fcgi -- --with-fcgi-include=/usr/local/include --with-fcgi-lib=/usr/local/lib 
  34. Edit your Apache configuration (typically found somewhere like /usr/local/apache2/conf/httpd.conf or /etc/httpd/conf/httpd.conf) and add these lines:
     <Directory /var/www/> 
  35. AllowOverride all 
  36. </Directory> 
  37. LoadModule fastcgi_module modules/mod_fastcgi.so 
  38. AddHandler fastcgi-script .fcgi 
  39. <VirtualHost *:80> 
  40. ServerAdmin webmaster@example.com 
  41. DocumentRoot /var/www/rails/testapp/public 
  42. ServerName www.example.com 
  43. ErrorLog /var/log/httpd/testapp-error_log 
  44. CustomLog /var/log/httpd/testapp-access_log common 
  45. Options Indexes ExecCGI FollowSymLinks RewriteEngine On 
  46. </VirtualHost>
  47. Start Apache
     /usr/local/apache2/bin/apachectl start
  48. Go to http://www.example.com and see the Rails welcome page.
  49. Set up a database for Rails in database.yml (or see HowToUseRailsWithoutADatabase).
  50. Create a simple controller for testing Rails
     cd /var/www/rails/testapp/public 
  51. rm index.html 
  52. cd .. 
  53. script/generate controller home index
  54. Go to www.example.com/home/index and see a default view, running with normal cgi.
  55. Enable FastCGI?
    1. Edit /var/www/rails/testapp/public/.htaccess and change dispatch.*cgi* to dispatch.*fcgi*
    2. Edit /var/www/rails/testapp/public/dispatch.fcgi (in rails 0.13.1 this is within the rails installation: lib/fcgi_handler.rb) and change
      require 'fcgi'

      to
      require 'rubygems' require_gem 'fcgi'
  56. Go to www.example.com/home/index and see a default view again, but with fcgi

Troubleshooting Suggestions
Make sure that you delete any ruby session files in your /tmp directory before switching to dispatch.fcgi. If you tested with cgi, there might be some with different permission that what apache (fastcgi) can read and will cause issue.

If you want to see if fastcgi is working with ruby, try pasting the following into test.fcgi (in your rails/public dir). You will need to make sure the file has 755 permissions (chmod 755 test.fcgi).

 #!/usr/local/bin/ruby 
require 'cgi' 
require 'rubygems' 
require_gem 'fcgi' FCGI.each_cgi do |cgi| content = '' env = [] cgi.env_table.each do |k,v| env << [k,v] end env.sort! env.each do |k,v| content << %Q(#{k} => #{v}<br>\n) end cgi.out{content} end 

The above test was working but I didn´t get the dispatcher running under apache2 (self built) until i changed the dependencies of rails-0.14.1/lib/fcgi_handler.rb to:

 require 'cgi' require 'rubygems' require_gem 'fcgi' require 'logger' require 'dispatcher' require 'rbconfig' class RailsFCGIHandler ... 

I don´t know why this is like this (why the dependencies in the dispatcher should be wrong) but it helped.


I’ve been bitten by two things with the Apache configuration: I had MultiViews on, and I was redirecting /some/url.html to /some/url because I don’t want file extensions in my URLs. The second rule causes endless redirect looping with standard Rails’ .htaccess, and MultiViews interferes badly with Rails’ caching. So, keep MultiViews off, and be careful with those redirects. —Matijs van Zuijlen


I have yet to get Apache fcgi working Windows XP SP2. I’ve got Apache working with Rails but it’s slow as mud. I’ve downloaded all the software that I can find and put in the http.conf file the recommended Apache configuration but can’t tell if fcgi is working or not.

Does anyone have a simple step by step recipe to get Apache (v2) on Windows XP Prof running fcgi? I found a test page for Rails but it doesn’t render the link

<html> <head> <title>Ajax Demo</title> <%= javascript_include_tag "prototype" %> </head> <body> <h1>What time is it?</h1> <div id="time_div"> I don't have the time, but <%= link_to_remote( "click here", :update => "time_div", :url =>{ :action => :say_when }) %> and I will look it up. </div> </body> </html> 

I get the page minus the “click here” link????


For anyone trying to get fastcgi working after installing the gem version of the ruby fastcgi lib, I found uninstalling it, then loading the library version and building it, fixed all problems. Download from here http://raa.ruby-lang.org/project/fcgi/ read the README and build and install, and fastcgi starts working.