47.22.2. Instalace aplikace na produkční server Debian 4.0 a vyšší

Jednoduchý postup jak vystavuju aplikace. Nejdříve na produkčním serveru vyberu adresář. Já sám preferuji adresáře /usr/local/share/aplikace. Poté do aplikace dopíši rake úlohu lib/tasks/upload.rake s tímto obsahem:

# -*- mode:ruby; coding:utf-8 -*-

desc "Upload application to a production server"
task :upload do
    rexcl = '--exclude "*~" --exclude tmp/ --exclude log/'
    ropts = '-avPe ssh -C --delete --delete-after'
    puts "Uploading application" 
    system "echo $PWD"
    system "rsync #{ropts} #{rexcl} ./ root@server.example.com:/usr/local/share/aplikace"

Distribuci aplikace provedu příkazem:

$ rake upload

Nyní je čas se podívat na server a upravit konfiguraci Apache2. Přidáme do něj další Rails aplikaci. Do souboru /etc/apache2/sites-enabled/000-default přidáme mezi Rails aplikace sekci

        # Další aplikace v Ruby on Rails.
        Alias /aplikace/     "/usr/local/share/aplikace/public/"
        Alias /aplikace      "/usr/local/share/aplikace/public/"
        <Directory /usr/local/share/aplikace/public>
                Options ExecCGI FollowSymLinks
                #FastCgiConfig -initial-env RAILS_ENV=production
                AllowOverride All
		# Omezení přístupu k aplikaci na úrovni Apache2.
                Order Deny,Allow
                Deny From All
		include /etc/apache2/allow-from-strediska
                include /etc/apache2/allow-special
        </Directory>

Po restartu apache vidíme úvodní stránku aplikace, ale nic nefunguje. Je třeba do našeho programu dodat ještě .htaccess soubor.

# General Apache options
AddHandler fcgid-script .fcgi
#AddHandler fastcgi-script .fcgi
AddHandler cgi-script .cgi
Options +FollowSymLinks +ExecCGI

# If you don't want Rails to look in certain directories,
# use the following rewrite rules so that Apache won't rewrite certain requests
# 
# Example:
#   RewriteCond %{REQUEST_URI} ^/notrails.*
#   RewriteRule .* - [L]

# Redirect all requests not available on the filesystem to Rails
# By default the cgi dispatcher is used which is very slow
# 
# For better performance replace the dispatcher with the fastcgi one
#
# Example:
#   RewriteRule ^(.*)$ dispatch.fcgi [QSA,L]
RewriteEngine On

# If your Rails application is accessed via an Alias directive,
# then you MUST also set the RewriteBase in this htaccess file.
#
# Example:
#   Alias /myrailsapp /path/to/myrailsapp/public
#   RewriteBase /myrailsapp

RewriteBase /aplikace
RewriteRule ^$ index.html [QSA]
RewriteRule ^([^.]+)$ $1.html [QSA]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ dispatch.fcgi [E=X-HTTP_AUTHORIZATION:%{HTTP:Authorization},QSA,L]

# In case Rails experiences terminal errors
# Instead of displaying this message you can supply a file here which will be rendered instead
# 
# Example:
#   ErrorDocument 500 /500.html

ErrorDocument 500 "<h2>Application error</h2>Rails application failed to start properly"

# Turn off mod_security filtering.
<IfModule mod_security.c>
  SecFilterEngine Off
</IfModule>

S tímto souborem jsme se dostali o kousek dál. Rails aplikace již vyhodí chybu při přístup na nějaký controller. Teď vytvoříme SQL databázi a nastavíme k ní přístup. Přihlásíme se tedy jako administrátor do Postgresové databáze a vatvoříme uživatele a databázi.

template1=# CREATE USER app_user WITH ENCRYPTED PASSWORD 'tajné-heslo' NOCREATEDB NOCREATEUSER;
CREATE USER
template1=# CREATE DATABASE app_database WITH OWNER app_user TEMPLATE=template0 ENCODING='utf-8';
CREATE DATABASE

Nyní musíme povolit přístup do této databáze. Do souboru pg_hba.conf, u mě je to /etc/postgresql/7.4/main/pg_hba.conf vložíme

# Aplikace nova-lekarna, produkční databáze.
local   novalekarna_production  novalekarna     md5

Reloadnem konfiguraci Postgresu a vyzkoušíme připojení.

# /etc/init.d/postgresql-7.4 reload
# psql -d app_database -U app_user -W

FIXME: úpravy v aplikaci

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 .