Jednoduchý postup jak vystavuju aplikace. Nejdříve na produkčním serveru vyberu adresář. Já sám preferuji adresáře /usr/local/share/
. Poté do aplikace dopíši rake úlohu aplikace
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 USERapp_user
WITH ENCRYPTED PASSWORD 'tajné-heslo
' NOCREATEDB NOCREATEUSER; CREATE USER template1=# CREATE DATABASEapp_database
WITH OWNERapp_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 -dapp_database
-Uapp_user
-W
FIXME: úpravy v aplikaci