Unbit.it, rails e capistrano - howto

la prima edizione è pubblicata su

http://wiki.unbit.it/HowToCapistrano#preview

jeko

Ciao ragazzi,
come va?
Vi scrivo perchè avrei bisogno di un aiutino :

Ho due applicazioni rails APP1 e APP2 che devo far girare sotto apache
utilizzando FastCGI nella seguente sintassi :

http://server/APP1
http://server/APP2

Ho modificato i files dispatch.rb,dispatch.fcgi e .htaccess di tutte e
due le applicazioni e la mia attuale configurazione apache funzionante
per un’applicazione è la seguente :

Grazie mille.
Simone C.

LoadModule fastcgi_module
/usr/lib/apache2/mod_fastcgi.so
LoadModule rewrite_module
/usr/lib/apache2/mod_rewrite.so
LoadModule proxy_module
/usr/lib/apache2/mod_proxy.so
LoadModule proxy_http_module
/usr/lib/apache2/mod_proxy_http.so
AddHandler fastcgi-script .fcgi
FastCgiConfig -minProcesses 2 -killInterval 3600 -maxProcesses 128
-startDelay 30 -idle-timeout 40 -restart -initial-env
‘RUBYOPT=-rubygems’

FastCgiIpcDir tmp/ FastCgiServer /srv/www/rails/APP1/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -processes 1 FastCgiServer /srv/www/rails/APP2/public/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -processes 1

<VirtualHost *:80>
SetEnv RAILS_ENV production
ServerName server
AddDefaultCharset UTF-8
DocumentRoot /srv/www/rails/APP1/public
<Directory “/srv/www/rails/APP1/public”>
Order allow,deny
Allow from all
AllowOverride All
Options -Indexes -ExecCGI -FollowSymLinks -Includes
RewriteEngine On

AccessFileName .htaccess
AddOutputFilterByType DEFLATE text/html
AddOutputFilterByType DEFLATE application/x-javascript
AddOutputFilterByType DEFLATE text/css
AddOutputFilterByType DEFLATE text/plain
AddOutputFilterByType DEFLATE text/xml
AddOutputFilterByType DEFLATE application/xml
AddOutputFilterByType DEFLATE application/xhtml+xml
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4.0[678] no-gzip
BrowserMatch bMSIE !no-gzip !gzip-only-text/html
ErrorLog /var/log/apache2/server-error_log
CustomLog /var/log/apache2/server-access_log common
CustomLog /var/log/apache2/server-access_log deflate

Come faccio ad aggiungere APP2 in modo che se digito http://server/APP2
vada direttamente li ?
Stò provando le direttive alias e location ma non ho ottenuto buoni
risultati
Mi dareste un aiutino?

Il giorno mar, 26/06/2007 alle 18.17 +0200, simone cecchetti ha scritto:

-zac

Ci sono tanti metodi, qui te ne dico uno forse bruttino ma che non
richiede di essere un ‘guru’ di apache.

Poniamo che hai questa struttura:

/SRV
/SRV/app1
/SRV/app2

dove app1 e app2 sono le tue due app rails

aggiungi una dir all’albero:

/SRV/www

sara’ la tua DocumentRoot (imposta quindi il virtualhost di conseguenza)

ovviamente se vai adesso sul browser la troverai vuota quindi:

da dentro /SRV/www fai 2 link simbolici alle directory public delle 2
app:

ln -s …/app1/public app1
ln -s …/app2/public app2

ora avrai:

/SRV/www/app1
/SRV/www/app2

se vai sul browser dovresti gia’ vedere le due index.html di rails
dentro ognuna delle due dir

ora bisogna agganciare il fastcgi:

FastCgiServer /SRV/www/app1/dispatch.fcgi -idle-timeout 120 -initial-env
RAILS_ENV=development -processes 1

    FastCgiServer /SRV/www/app2/dispatch.fcgi -idle-timeout 120

-initial-env RAILS_ENV=development -processes 1

(mi raccomando i path in questo punto)

ora sistema i file .htaccess per utilizzare fastcgi e aggiungi (come
consigliato nei commenti dello stesso file) la RewriteBase

per app1 ->

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

per app2 ->

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

Ora gia’ dovresti veder funzionare il tutto ma ci vuole il tocco di
classe:

nel config/environment.rb di ogni app metti:

ActionController::AbstractRequest.relative_url_root = “/app1”

e

ActionController::AbstractRequest.relative_url_root = “/app2”

riavvia le due app e hai finito

Parto del presupposto che hai gia’ configurato apache per leggere i
file .htaccess, e per seguire i link simbolici

Ciao

Ciao Roberto,
mille grazie.
Domattina la provo subito e ti faccio sapere.

Ciao e grazie ancora.
Simone

Le informazioni trasmesse attraverso la presente e-mail ed i suoi
allegati sono diretti esclusivamente al destinatario e devono ritenersi
riservati con divieto di diffusione e di uso. La diffusione e la
comunicazione da parte di soggetto diverso dal destinatario è vietata
dall’art. 616 e ss. c.p. e dal d. l.vo n. 196/03.
Se la presente e-mail ed i suoi allegati fossero stati ricevuti per
errore da persona diversa dal destinatario siete pregati di distruggere
tutto quanto ricevuto e di informare il mittente con lo stesso mezzo.

Il giorno mer, 27/06/2007 alle 12.57 +0200, simone cecchetti ha scritto:

Ciao Roberto,
ho provato ma ho un access denied perché i symbolic links hanno come owner l’utente root e non sono riuscito a cambiare i permessi del link simbolico.
Devo aggiungere qualcosa su apache?

Accertati che la direttiva FollowSymLinks sia attiva per la directory
che contiene i link

Ciao Roberto,
ho provato ma ho un access denied perché i symbolic links hanno come owner
l’utente root e non sono riuscito a cambiare i permessi del link
simbolico.
Devo aggiungere qualcosa su apache?

Ciao e grazie ancora.
Simone

-----Messaggio originale-----
Da: [email protected] [mailto:[email protected]]
Per conto di Roberto De Ioris
Inviato: martedì 26 giugno 2007 19.38
A: ruby-it
Oggetto: Re: [ruby-it] Configurazione Apache + FastCGI

Il giorno mar, 26/06/2007 alle 18.17 +0200, simone cecchetti ha scritto:

-zac

Ci sono tanti metodi, qui te ne dico uno forse bruttino ma che non
richiede di essere un ‘guru’ di apache.

Poniamo che hai questa struttura:

/SRV
/SRV/app1
/SRV/app2

dove app1 e app2 sono le tue due app rails

aggiungi una dir all’albero:

/SRV/www

sara’ la tua DocumentRoot (imposta quindi il virtualhost di conseguenza)

ovviamente se vai adesso sul browser la troverai vuota quindi:

da dentro /SRV/www fai 2 link simbolici alle directory public delle 2
app:

ln -s …/app1/public app1
ln -s …/app2/public app2

ora avrai:

/SRV/www/app1
/SRV/www/app2

se vai sul browser dovresti gia’ vedere le due index.html di rails
dentro ognuna delle due dir

ora bisogna agganciare il fastcgi:

FastCgiServer /SRV/www/app1/dispatch.fcgi -idle-timeout 120 -initial-env
RAILS_ENV=development -processes 1

    FastCgiServer /SRV/www/app2/dispatch.fcgi -idle-timeout 120

-initial-env RAILS_ENV=development -processes 1

(mi raccomando i path in questo punto)

ora sistema i file .htaccess per utilizzare fastcgi e aggiungi (come
consigliato nei commenti dello stesso file) la RewriteBase

per app1 →

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

per app2 →

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

Ora gia’ dovresti veder funzionare il tutto ma ci vuole il tocco di
classe:

nel config/environment.rb di ogni app metti:

ActionController::AbstractRequest.relative_url_root = “/app1”

e

ActionController::AbstractRequest.relative_url_root = “/app2”

riavvia le due app e hai finito

Parto del presupposto che hai gia’ configurato apache per leggere i
file .htaccess, e per seguire i link simbolici

Ciao


Roberto De Ioris
http://unbit.it
JID: [email protected]

Ho applicato la direttiva FollowSymLinks ed è scomparso l’errore ma ora
la pagina ci mette tantissimo a caricare e alla fine mi da errore 500.
Puoi aiutarmi?
Grazie mille Roberto.
A presto.
Simone

-----Messaggio originale-----
Da: [email protected] [mailto:[email protected]]
Per conto di Roberto De Ioris
Inviato: mercoledì 27 giugno 2007 13.16
A: ruby-it
Oggetto: Re: R: [ruby-it] Configurazione Apache + FastCGI

Il giorno mer, 27/06/2007 alle 12.57 +0200, simone cecchetti ha scritto:

Ciao Roberto,
ho provato ma ho un access denied perché i symbolic links hanno come owner l’utente root e non sono riuscito a cambiare i permessi del link simbolico.
Devo aggiungere qualcosa su apache?

Accertati che la direttiva FollowSymLinks sia attiva per la directory
che contiene i link

Il giorno mar, 26/06/2007 alle 18.17 +0200, simone cecchetti ha scritto:

da dentro /SRV/www fai 2 link simbolici alle directory public delle 2
se vai sul browser dovresti gia’ vedere le due index.html di rails
(mi raccomando i path in questo punto)
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
Ora gia’ dovresti veder funzionare il tutto ma ci vuole il tocco di


Roberto De Ioris
http://unbit.it
JID: [email protected]

Si Roberto i permessi sono di tipo 755 e il proprietario è l’utente di
apache wwwrun .
Nell’error log di apache ho questo :

[Wed Jun 27 12:30:17 2007] [error] [client XX.XX.XX.XX] FastCGI: comm
with server “/srv/www/rails/railsymbols/APP1/dispatch.fcgi” aborted:
idle timeout (120 sec)
[Wed Jun 27 12:30:17 2007] [error] [client XX.XX.XX.XX] FastCGI:
incomplete headers (0 bytes) received from server
“/srv/www/rails/railsymbols/APP1/dispatch.fcgi”

La mia configurazione apache è la seguente :

AddHandler fastcgi-script .fcgi
FastCgiConfig -minProcesses 2 -killInterval 3600 -maxProcesses 128
-startDelay 30 -idle-timeout 40 -restart -initial-env
‘RUBYOPT=-rubygems’
LoadModule fastcgi_module
/usr/lib/apache2/mod_fastcgi.so
LoadModule proxy_module /usr/lib/apache2/mod_proxy.so
LoadModule proxy_http_module /usr/lib/apache2/mod_proxy_http.so
LoadModule proxy_connect_module /usr/lib/apache2/mod_proxy_connect.so
LoadModule headers_module /usr/lib/apache2/mod_headers.so
LoadModule deflate_module /usr/lib/apache2/mod_deflate.so
LoadModule rewrite_module /usr/lib/apache2/mod_rewrite.so
LoadModule status_module /usr/lib/apache2/mod_status.so
#LoadModule alias_module /usr/lib/apache2/mod_alias.so

FastCgiIpcDir tmp/ FastCgiServer /srv/www/rails/railsymbols/APP1/dispatch.fcgi -idle-timeout 120 -initial-env RAILS_ENV=production -processes 1 SetEnv RAILS_ENV production ServerName test.local DocumentRoot /srv/www/rails/railsymbols #AddDefaultCharset UTF-8 Order allow,deny Allow from all AllowOverride All Options Indexes ExecCGI FollowSymLinks RewriteEngine On ErrorLog /var/log/apache2/app1-error_log AccessFileName .htaccess

Il Symbolic Link è app1 all’interno della cartella railsymbols

Grazie ancora per il tuo tempo.

A presto.
Simone
-----Messaggio originale-----
Da: Roberto De Ioris [mailto:[email protected]]
Inviato: mercoledì 27 giugno 2007 15.47
A: simone cecchetti
Cc: ruby-it
Oggetto: Re: R: R: [ruby-it] Configurazione Apache + FastCGI

Il giorno mer, 27/06/2007 alle 15.42 +0200, simone cecchetti ha scritto:

Ho applicato la direttiva FollowSymLinks ed è scomparso l’errore ma ora la pagina ci mette tantissimo a caricare e alla fine mi da errore 500.
Puoi aiutarmi?
Grazie mille Roberto.

Guarda l’error_log di apache ,quasi sicuramente il fastcgi non e’
partito.
Ma i permessi delle due applicazioni sono giusti ? apache deve poter
scrivere dentro la directory log

Ciao

ho provato ma ho un access denied perché i symbolic links hanno come owner l’utente root e non sono riuscito a cambiare i permessi del link simbolico.
Da: [email protected] [mailto:[email protected]] Per conto di Roberto De Ioris

Poniamo che hai questa struttura:

ora avrai:
RAILS_ENV=development -processes 1

RewriteRule ^([^.]+)$ $1.html [QSA]

Ciao


Roberto De Ioris
http://unbit.it
JID: [email protected]

Il giorno mer, 27/06/2007 alle 15.42 +0200, simone cecchetti ha scritto:

Ho applicato la direttiva FollowSymLinks ed è scomparso l’errore ma ora la pagina ci mette tantissimo a caricare e alla fine mi da errore 500.
Puoi aiutarmi?
Grazie mille Roberto.

Guarda l’error_log di apache ,quasi sicuramente il fastcgi non e’
partito.
Ma i permessi delle due applicazioni sono giusti ? apache deve poter
scrivere dentro la directory log

Ciao

Ciao Roberto,
alla fine io e Stefano abbiamo risolto il problema.
Volevo ringraziarti molto,il tuo aiuto c’è stato utilissimo.

Ciao a presto.
Simone

Le informazioni trasmesse attraverso la presente e-mail ed i suoi
allegati sono diretti esclusivamente al destinatario e devono ritenersi
riservati con divieto di diffusione e di uso. La diffusione e la
comunicazione da parte di soggetto diverso dal destinatario è vietata
dall’art. 616 e ss. c.p. e dal d. l.vo n. 196/03.
Se la presente e-mail ed i suoi allegati fossero stati ricevuti per
errore da persona diversa dal destinatario siete pregati di distruggere
tutto quanto ricevuto e di informare il mittente con lo stesso mezzo.


Da: Roberto De Ioris [mailto:[email protected]]
Inviato: mer 27/06/2007 15.46
A: simone cecchetti
Cc: ruby-it
Oggetto: Re: R: R: [ruby-it] Configurazione Apache + FastCGI

Il giorno mer, 27/06/2007 alle 15.42 +0200, simone cecchetti ha scritto:

Ho applicato la direttiva FollowSymLinks ed è scomparso l’errore ma ora la pagina ci mette tantissimo a caricare e alla fine mi da errore 500.
Puoi aiutarmi?
Grazie mille Roberto.

Guarda l’error_log di apache ,quasi sicuramente il fastcgi non e’
partito.
Ma i permessi delle due applicazioni sono giusti ? apache deve poter
scrivere dentro la directory log

Ciao

ho provato ma ho un access denied perché i symbolic links hanno come owner l’utente root e non sono riuscito a cambiare i permessi del link simbolico.
Da: [email protected] [mailto:[email protected]] Per conto di Roberto De Ioris

Poniamo che hai questa struttura:

ora avrai:
RAILS_ENV=development -processes 1

RewriteRule ^([^.]+)$ $1.html [QSA]

Ciao


Roberto De Ioris
http://unbit.it http://unbit.it/
JID: [email protected]