47.4.9.1. fcgid

section id="rails.apache2.fcgid"

RailsOnDebian

Fcgid je náhrada, respektive následník mod-fcgi.

Nejdříve tedy instalace a „konfigurace“ fcgid. Nainstalujeme balíčky libapache2-mod-fcgid a libfcgi-ruby.

# aptitude install apache2 libapache2-mod-fcgid libfcgi-ruby

Pokud nemáme povolené, povolíme následující moduly v Apache a znovu nahrajeme konfiguraci Apache.

# a2enmod ssl
# a2enmod rewrite
# a2enmod suexec
# a2enmod include
# a2enmod fcgid
# /etc/init.d/apache2 force-reload

# aptitude install libmysql-ruby

A to je vše, co potřebujeme. Další konfigurace jsou již v souvislosti s konkrétními aplikacemi v Rails. Předtím, než k těmto konfiguracím přistoupím, popíši model který používám.

Potřeboval jsem mít všechny aplikace na jednom serveru. Myšleno všechny přístupné pod jednou adresou serveru například www.example.com. Každá aplikace má na tomto serveru vlastní adresář. Já adresáře aplikací umístňuji do kořene serveru, takže mají adresy jako www.example.com/app1, www.example.com/app2 atd. Vlastní program a data aplikací jsou umístněny v /usr/local/share/rails-app/app1, /usr/local/share/rails-app/app2

Nejdříve tedy ukázková aplikace test pro odzkoušení konfigurace.

Poznámka

Pro následující řádky, příkazy zadávané za výzvou $ jsou v kontextu uživatele www-data.

# mkdir -p /usr/local/share/rail-app/test
# chown www-data /usr/local/share/rail-app/test
$ rails /usr/local/share/rails-app/test

Nejdříve si ověříme funkčnost aplikace ve vývojvém prostředí serveru WEBrick.

$ cd /usr/local/share/rails-app/test
$ script/server

Nasměrujeme svůj prohlížeč na adresu http://localhost:3000. Zde uvidíme uvítací stránku aplikace. Nyní WEBrick server ukončíme a nakonfigurujeme Apache. Do souboru /etc/apache2/sites-available/default kde je konfigurace „hlavního virtuálního serveru“ vložíme řádky definující naši testovací aplikaci. Pro přehlednost nejlépe někam na konec sekce <VirtualHost>.

NameVirtualHost *
<VirtualHost *>
        ⋮
        # Konfigurace zkušební Rails aplikace test.
        Alias /test/ "/usr/local/share/rails-app/test/public/"
        Alias /test "/usr/local/share/rails-app/test/public/"
        <Directory /usr/local/share/rails-app/test/public>
                Options ExecCGI FollowSymLinks
                AllowOverride All
                Order Allow,Deny
                Allow From All
        </Directory>
</VirtualHost>

Upravenou konfiguraci apache nahrajeme.

# /etc/init.d/apache2 reload

A do prohlížeče zadáme adresu http://localhost/test/index.html. Nyní vidíme opět uvítací stránku aplikace. Rozkliknutím About your application's environment zjistíme že ještě není vše úplně v pořádku. Chybí nám nastavení aplikace pro FCGI a rovněž nastavení kořenového adresáře aplikace. Toto učiníme v souboru /usr/local/share/rails-app/test/public/.htaccess. Nejdříve FCGI. Hned na druhém řádku souboru je nastavení ovladače pro fcgi skripty. Toto upravíme z původního

AddHandler fastcgi-script .fcgi

na

AddHandler fcgid-script .fcgi

Standardne je aplikace nakonfigurována na cgi. Přehození na FCGI učiníme v pravidle

RewriteRule ^(.*)$ dispatch.cgi [QSA,L]

které přepíšeme na

RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]

Protože naše není jako taková v kořenu serveru, ale ve vlastním adresáři, musíme tuto okolnost v konfiguraci také zohlednit. Vyhledáme zakomentovaný řádek

#   RewriteBase /myrailsapp

a přepíšeme na

RewriteBase /test

Pokud si nyní rozklikneme About your application's environment, vidíme již vše bez chyby.

Konfigurace aplikace tedy znamená zahrnout do sekce <VirtualHost> souboru /etc/apache2/sites-available/default blok příkazů:

# Konfigurace Rails aplikace app
Alias /app/ "/usr/local/share/rails-app/app/public/"
Alias /app "/usr/local/share/rails-app/app/public/"
<Directory "/usr/local/share/rails-app/app/public">
        Options ExecCGI FollowSymLinks
        AllowOverride All
        Order Allow,Deny
        Allow From All
</Directory>

Na straně aplikace pak musí být v souboru .../rails-app/app/public/.httaccess předefinovány či přidány řádky:

AddHandler fcgid-script .fcgi
RewriteBase /app
RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
Licence Creative Commons
Tento dokument Ruby, jehož autorem je Radek Hnilica, podléhá licenci Creative Commons Uveďte autora-Nevyužívejte dílo komerčně-Zachovejte licenci 3.0 Česká republika .