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 aplikacelib/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 uploadNyní 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_userWITH ENCRYPTED PASSWORD 'tajné-heslo' NOCREATEDB NOCREATEUSER; CREATE USER template1=# CREATE DATABASEapp_databaseWITH OWNERapp_userTEMPLATE=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
