Ruby on Rails
HowtoSettareApacheConFastCGIERubyBindings

Come installare Apache, Ruby, RubyGems, Rails, e FastCGI? su Linux

  1. Diventa root e mettiti in una directory dove lavorare
    
    su root
    cd /usr/local/src
  2. Scarica tutti i file necessari (la ultima versione).
    
    wget http://xyz.csail.mit.edu/ruby/ruby-1.8.4.tar.gz
    wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz
    wget http://www.fastcgi.com/dist/fcgi-2.4.0.tar.gz
    wget http://www.fastcgi.com/dist/mod_fastcgi-2.4.2.tar.gz
    wget http://mirrors.ccs.neu.edu/Apache/dist/httpd/httpd-2.0.53.tar.gz
  3. Installa Ruby
    
    tar -zxvf ruby-1.8.4.tar.gz
    cd ruby-1.8.4
    ./configure
    make
    make test
    make install
    cd ..</pre>
  4. Installa Ruby Gems
    
    tar -zxvf rubygems-0.8.11.tgz
    cd rubygems-0.8.11
    ruby setup.rb
    cd ..</pre>
  5. Installa Apache (solo se necessario, se hai giá APache installato puoi saltare questa sezione)
    
    tar -zxvf httpd-2.0.53.tar.gz
    cd httpd-2.0.53
    ./configure --enable-rewrite --enable-cgi
    make
    make install
    cd ..
    </pre>
  6. Installa FastCGI?
    
    tar -zxvf fcgi-2.4.0.tar.gz 
    cd fcgi-2.4.0
    ./configure
    make
    make install</pre>
  7. Installa mod_fastcgi per Apache (questo significa che devi avere Apache-2.x. Se stai usando Apache 1.3, DSOs, etc. leggi il file INSTALL.
  8. Installa Rails
    
    gem install rails
        :
    Install required dependency rake? [Yn]  y
    Install required dependency activesupport? [Yn]  y
    Install required dependency activerecord? [Yn]  y
    Install required dependency actionpack? [Yn]  y
    Install required dependency actionmailer? [Yn]  y
    Install required dependency actionwebservice? [Yn]  y
        :
    </pre>
  9. Installa il gem fcgi
    
    gem install fcgi</pre>
    Su FreeBSD, se ricevi l’errore “ERROR: While executing gem” che dice “checking for fcgiapp.h… no” allora installa il gem in questo modo:
    
    gem install fcgi -- --with-fcgi-include=/usr/local/include --with-fcgi-lib=/usr/local/lib
    

    Se ricevi un errore che dice “can’t find header files for ruby.”, allora installa il package ruby-devel.
  10. Modifica la configurazione di Apache (tipicamente cerca qualcosa come /usr/local/apache2/conf/httpd.conf or /etc/httpd/conf/httpd.conf) e aggiungi queste righe
    
    <Directory /var/www/>
        AllowOverride all
    </Directory>

LoadModule fastcgi_module modules/mod_fastcgi.so

AddHandler fastcgi-script .fcgi

<VirtualHost *:80>
ServerAdmin webmaster
@example.com DocumentRoot /var/www/rails/testapp/public ServerName www.example.com ErrorLog /var/log/httpd/testapp-error_log CustomLog /var/log/httpd/testapp-access_log common Options Indexes ExecCGI FollowSymLinks RewriteEngine On

  1. Modifica la configurazione di Apache (con fcgid al posto di fastcgi)
    FastCGI é molto antiquato, é meglio usare FCGID al suo posto. Se usi FCGID due linee nel file di configurazione saranno diverse:
    
    LoadModule fcgid_module modules/mod_fcgid.so

AddHandler fcgid-script .fcgi

  1. Avvia Apache
    
    /usr/local/apache2/bin/apachectl start
  2. Vai a http://www.example.com e verifica che appaia la pagina di benvenuto di Rails.
  3. Inserisci un database per Rails in database.yml (oppure vai a HowToUseRailsWithoutADatabase).
  4. Crea un semplice controller per testare Rails
    
    cd /var/www/rails/testapp/public
    rm index.html
    cd ..
    script/generate controller home index</pre>
  5. Vai a http://www.example.com/home/index e verifica che appaia una view di default con cgi.
  6. Abilita FastCGI?
    1. Edita /var/www/rails/testapp/public/.htaccess e sostituisci dispatch.*cgi* con dispatch.*fcgi*
    2. Edita /var/www/rails/testapp/public/dispatch.fcgi (in Rails 0.13.1 é dentro la installazione di Rails: lib/fcgi_handler.rb) e sostituisci
      require 'fcgi'

      con
      require 'rubygems'
      require_gem 'fcgi'
  7. Vai a http://www.example.com/home/index e verifica che appaia una view di default, peró questa volta con fcgi

Suggerimenti
Assicurati di cancellare tutti i file di sessione ruby nella directory /tmp prima di switchare a dispatch.fcgi. Se hai testao con cgi, ci potrebbero essere dei permessi differenti che Apache (fastcgi) legge e che potrebber ocausare problemi.

Se vuoi verificare se fastcgi sta eseguendo con ruby, prova a copiare questo codice in test.fcgi (nella directory rails/public). Assicurati che il file abbia i permessi settati a 755 (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

———

Il test qui sopra funzionava ma non sono riuscito a far sí che il dispatcher funzionasse con Apache2 (self built) fino a quando ho cambiato le dipendenze di rails-0.14.1/lib/fcgi_handler.rb con:


require 'cgi'
require 'rubygems'
require_gem 'fcgi'
require 'logger'
require 'dispatcher'
require 'rbconfig'

class RailsFCGIHandler


Non so perché, ma ha funzionato.

———

Mi sono scontrato con questo problema durante la configurazione di Apache: avevo il MultiViews abilitato, e questo ridirigeva /some/url.html a /some/url (non voglio estensioni di file negli URL). La seconda regola causa loop infiniti con il file .htaccess di Rails, e il MultiView crea conflitti con la cache di Rails. Quindi, disabilita il MultiView e presta attenzione alle ridirezioni. - Matijs van Zuijlen
-
——