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 .

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
[email protected]:~$

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:

<IfModule mod_ruby.c>
  RubyRequire apache/ruby-run
  # AddType text/html .rb .rbx
  RubySafeLevel 0
  <Files *.rb>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
  </Files>
  <Files *.rbx>
    SetHandler ruby-object
    RubyHandler Apache::RubyRun.instance
  </Files>
</IfModule>

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
<Directory /usr/local/tracks-1.5/public>
  Options +FollowSymLinks +ExecCGI
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

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/*
 
obsolete/installer-tracks-avec-une-base-postgresql-et-apache-mod_ruby.txt · Dernière modification: 11/12/2010 17:15 par orgrim