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 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 variableSALT
, 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èreRewriteRule
:
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/*