En fait, ça marche pas trop avec postgresql, des requêtes ne respectent pas les contraintes d'agrégation de SQL92. De plus, la méthode indiquée avec mod_ruby ne semble pas la meilleure, mod_ruby n'a pas bonne réputation. Il faudrait passer à une configuration de lighttpd avec rails en fastcgi.
====== Installer Tracks avec un base PostgreSQL et Apache-mod_ruby ======
Tracks est un gestionnaire de TODO list écrit en ruby et accessible par une interface web. Il se base sur la méthode GTD (Getting Thing Done) de David Allen (célèbre au USA), un résumé du bouquin est dispo [[http://wikisummaries.org/Getting_Things_Done:_The_Art_of_Stress-Free_Productivity|là]].
Même s'il est fourni avec un serveur web, mieux vaut utiliser Apache et mettre la base de donnée sur un serveur PostgreSQL (au lieu de SQLite 3). Le site du project est là : http://www.rousette.org.uk/projects/.
===== Installer Ruby =====
Tracks 1.5 fonctionne avec ruby 1.8.2, la version par défaut fournie avec Etch.
* Installer ruby avec la doc :
# aptitude install ruby rdoc ri rake
Il faut aussi certains packages ruby tiers, pour le support PostgreSQL par exemple. Il s'agit de "RubyGems", qu'on peut comparer à Pear pour PHP ou les modules Perl provenant du CPAN.
* Installer RubyGems :
# aptitude install rubygems
Ce package fourni la base de pour obtenir et gérer les gems, surtout avec la commande ''/usr/bin/gem''.
Installer le gem pour PostgreSQL :
# gem install postgres
Bulk updating Gem source index for: http://gems.rubyforge.org
Building native extensions. This could take a while...
Successfully installed postgres-0.7.9.2008.01.28
1 gem installed
Installing ri documentation for postgres-0.7.9.2008.01.28...
Installing RDoc documentation for postgres-0.7.9.2008.01.28...
# gem list
*** LOCAL GEMS ***
postgres (0.7.9.2008.01.28)
===== Créer la base de donnée =====
==== Se logguer avec postgres ====
En root, changer d'utilisateur vers ''postgres'', l'utilisateur de PostgreSQL:
# su - postgres
postgres@serveur:~$
==== Créer un rôle ====
Créer un nouveau rôle pour les bases de données de tracks (si on veux en avoir plusieurs) :
$ createuser -SDRlPE tracks
Entrez le mot de passe pour le nouvel rôle :
Entrez-le de nouveau :
CREATE ROLE
Les options utilisées sont décrites dans le "usage" de la commande ''createdb'' en lançant la commande avec l'option ''--help'':
-S, --no-superuser le rôle ne sera pas un super-utilisateur
-D, --no-createdb le rôle ne peut pas créer des bases de données
-R, --no-createrole le rôle ne peut pas créer de nouveaux rôles
-l, --login le rôle peut se connecter (par défaut)
-P, --pwprompt affecte un mot de passe au nouveau rôle
-E, --encrypted crypte le mot de passe stocké
==== Créer un base de donnée ====
Maintenant que le rôle est prêt, créer un base de donnée assignée à ce rôle:
$ createdb -E UTF8 -O tracks tracks15
CREATE DATABASE
Comme pour ''createuser'', les options sont décrites dans le "usage", en lançant la commande avec l'option ''--help'':
-E, --encoding=CODAGE codage de la base de données
-O, --owner=PROPRIETAIRE nom de l'utilisateur
===== Récupérer et installer Tracks =====
Tracks n'est pas packagé dans Etch, il faut récupérer une archive sur le site : http://www.rousette.org.uk/projects/downloads/index
==== Installer et configurer ====
On récupère donc un fichier zip, à extraire dans ''/usr/local'' :
# cd /usr/local
# unzip /path/to/tracks-1.5.zip
Il faut donner les droits à l'utilisateur d'Apache :
# chown -R www-data:www-data /usr/local/tracks-1.5
Il faut éditer deux fichiers de configuration, ''config/database.yml'' et ''config/environment.rb'':
* ''config/database.yml'': Commenter avec des ''#'' les lignes concernant sqlite3 et ajouter un bloc pour l'accès à la base PostgreSQL (le mot de passe est bien sûr à remplacer dans l'exemple) :
#####################################################################
#### Default configuration for using postgresql as a database ###
#####################################################################
production:
adapter: postgresql
database: tracks15
host: localhost
username: tracks
password: PASSWORD
* ''config/environment.rb'' : Editer la ligne définissant la variable ''SALT'', il faut mettre une phrase pour améliorer l'encryption des mots de passes :
SALT = "this is a tracks test, hope it will work"
==== Charger la base de données ====
Enfin il faut initialiser la base :
# cd /usr/local/tracks-1.5
# rake db:migrate RAILS_ENV=production
(in /usr/local/tracks-1.5)
== CreateTracksDb: migrating ==================================================
-- create_table(:contexts)
...
==== Tester si tout fonctionne ====
Avant de configurer Apache, il vaut mieux vérifier que tout fonctionne, en lançant (temporairement) le serveur web fourni avec tracks (il s'appelle Mongrel) :
# cd /usr/local/tracks-1.5
# script/server -e production
=> Booting WEBrick...
=> Rails application started on http://0.0.0.0:3000
=> Ctrl-C to shutdown server; call with --help for options
[2008-05-10 16:33:15] INFO WEBrick 1.3.1
[2008-05-10 16:33:15] INFO ruby 1.8.6 (2008-03-03) [x86_64-linux]
[2008-05-10 16:33:15] INFO WEBrick::HTTPServer#start: pid=16939 port=3000
Normalement, en allant à l'url : http://localhost:3000, tracks demande de créer un nouveau compte pour commencer à l'utiliser.
Pour stopper Mongrel, faire un Ctrl-C dans la console où il est lancé, il s'affiche alors ce message :
...
[2008-05-10 16:37:39] INFO going to shutdown ...
[2008-05-10 16:37:39] INFO WEBrick::HTTPServer#start done.
===== Configurer Apache =====
On part du principe qu'Apache est déjà installé sur la machine, avec mod_rewrite activé.
==== Installer mod_ruby ====
Installer mod_ruby:
# aptitude install libapache2-mod-ruby
Activer le module dans la config d'apache:
# a2enmod
Which module would you like to enable?
Your choices are: actions alias asis auth_basic auth_digest authn_alias authn_anon authn_dbd authn_dbm authn_default
authn_file authnz_ldap authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache
cern_meta cgid cgi charset_lite dav_fs dav dav_lock dav_svn dbd deflate dir disk_cache dump_io env expires ext_filter
file_cache filter headers ident imagemap include info ldap log_forensic mem_cache mime mime_magic mod_python negotiation
php5 proxy_ajp proxy_balancer proxy_connect proxy_ftp proxy_http proxy rewrite ruby setenvif speling ssl status suexec
unique_id userdir usertrack version vhost_alias
Module name? ruby
This module is already enabled!
Créer une configuration pour ruby, dans ''/etc/apache2/conf.d/ruby.conf'':
RubyRequire apache/ruby-run
# AddType text/html .rb .rbx
RubySafeLevel 0
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
SetHandler ruby-object
RubyHandler Apache::RubyRun.instance
Relancer Apache, comme l'indique aptitude:
# /etc/init.d/apache2 force-reload
==== Configurer Tracks sur Apache ====
Créer un fichier de configuration pour tracks, dans ''/etc/apache2/conf.d/tracks.conf'', pour avoir un alias et autoriser l'accès au répertoire par le web :
Alias /tracks /usr/local/tracks-1.5/public
Options +FollowSymLinks +ExecCGI
AllowOverride All
Order allow,deny
Allow from all
Relancer Apache, pour prendre en compte cette nouvelle configuration :
# /etc/init.d/apache2 force-reload
Tracks peut utiliser le CGI, le FastCGI ou mod_ruby, par défaut, il appelle le CGI par l'intermédiaire du fichier ''.htaccess'' dans ''/usr/local/tracks-1.5/public''. Il faut éditer ce fichier :
* Commenter les lignes ''AddHandler ...'' au début :
#AddHandler fcgid-script .fcgi
#AddHandler fastcgi-script .fcgi
#AddHandler cgi-script .cgi
* Ajouter la directive ''RewriteBase'' correspondant au nom de l'alias de ''/etc/apache2/conf.d/tracks.conf'' au dessus de la première ''RewriteRule'' :
RewriteBase /tracks
RewriteRule ^$ index.html [QSA]
* Enfin, changer la ligne contenant ''dispatch.cgi'' :
RewriteRule ^(.*)$ dispatch.rb [QSA,L]
Enfin, il faut éditer le fichier ''/usr/local/tracks-1.5/public/dispatch.rb'', pour commenter la ligne suivante :
#ADDITIONAL_LOAD_PATHS.reverse.each { |dir| $:.unshift(dir) if File.directory?(dir) } if defined?(Apache::RubyRun)
Cette modification empêche le script de planter en affichant ce message :
[Sun May 11 13:15:13 2008] [error] mod_ruby: error in ruby
[Sun May 11 13:15:13 2008] [error] mod_ruby: /var/www/tracks-1.5/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:266:in
`load_missing_constant': uninitialized constant ADDITIONAL_LOAD_PATHS (NameError)
[Sun May 11 13:15:13 2008] [error] mod_ruby: from /var/www/tracks-1.5/vendor/rails/activerecord/lib/../../activesupport/lib/active_support/dependencies.rb:452:in
`const_missing'
[Sun May 11 13:15:13 2008] [error] mod_ruby: from /var/www/tracks-1.5/public/dispatch.rb:10
[Sun May 11 13:15:13 2008] [error] mod_ruby: from /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `load'
[Sun May 11 13:15:13 2008] [error] mod_ruby: from /usr/lib/ruby/1.8/apache/ruby-run.rb:53:in `handler'
==== Aller voir si ça fonctionne ====
Aller à l'url suivante pour voir si tout marche: http://localhost/tracks, normalement la page de login de tracks s'affiche et demande la création du premier compte utilisateur.
Si ça ne marche, pas voir les messages de log:
* Apache : ''/var/log/apache2/error.log''
* Tracks : ''/usr/local/tracks-1.5/log/*''