Les aventures de Rails 1.1... \o/
‘Fiou… Enfin ça remarche… ;P
Voilà, donc mon joli typo tourne désormais correctement sous RoR 1.1 :)
Note pour plus tard: Lire la ML typo AVANT de se jetter sur la maj Rails comme un sauvage… ^ ^
En passant, j’ai setup un Munin, pour avoir de jolis graph, sans sa casser la tête à config un truc overkill genre Cacti… :)
Je connaissais pas du tout, découvert au hasard d’une conversation avec Arnaud, de CrazyMoto... :)
Bref, ça se passe par la :).
J’ai ajouté ça tout bien comme il faut à mon script WebTC, vu leur ordre de release et un poil tordu, et comme j’ai un peu galéré à pondre un truc basé sur le trunk qui soit fonctionnel, autant pas se le retaper à chaque fois… Maaaiis bon, globalement, si on essaye pas de faire le malin comme moi, c’est ouat’millions de fois plus rapide/simple à setup que Cacti :)
EDIT: Voiilà, je pense que je toucherais plus à la config pendant un paquet de temps maintenant, sauf peut-être pour grapher le nombre de joueurs TM:N… Bref, y’a eu encore pas mal de charcutage/de plugins custom, le patch contre la 1.3.2 sf est dispo dans mon overlay portage ;)
Les aventures de Typo trunk
Gniii, voilà, j’ai dé-freezé le cache de typo, l’index devrait désormais re-fonctionner correctement…
Comme quoi ça fait pas toujours du bien de se jetter sur les nouvelles révisions svn! ;)
Ruby On Rails et Typo sous Lighttpd
Hé ben vi, faut bien que ça tourne grâce à quelquechose ce joli blog… ;o)
Comme c’est un peu long, je cache le reste dans la suite ;)
Note sur les extraits de code
NB: Attention aux retours à la ligne, j’ai du charcuter un peu pour que ça rentre dans les blocs de code, mais le caractère \ indique que la ligne suivante fait partie intégrante de cette ligne, attention donc, notamment pour les extraits de fichier de config! (Je vous conseille de passer le thème en full-width, via les icônes en haut de l’écran)
Ce document est aussi disponible sur Mon Wiki, les blocs de code sont corrects sur le wiki ;)
Installation des Paquets nécessaires
Alors, en résumé, sous Gentoo, c’est facile:
emerge ruby rails
Les dépendances viendront toutes seules (gem, mysql-ruby & co).
Sous Debian, c’est moins rigolo, déjà, il faut installer Gem à la main, et passer au maximum par gem pour chopper les dépendances…
En tas, ça donnerait un truc du genre:
apt-get install ruby libtest-unit-ruby ruby libyaml-ruby ri irb ruby-dev libcfgi-ruby libfcgi0 libfcgi-dev libxml-ruby libxml-parser-ruby libzlib-ruby
Et éventuellement rails après, voir s’il ne manquerait pas des dépendances…
Pour l’installation manuelle de gem:
wget http://rubyforge.org/frs/download.php/5207/rubygems-0.8.11.tgz
tar -xvvzf rubygems-0.8.11.tgz
cd rubygems-0.8.11
ruby setup.rb
Serveur de Base De Données
Il nous faut aussi un serveur de Base de Données fonctionnel (dans mon cas, MySQL 4.1, installé dans un path tordu, ce qui posera un tout petit problème plus tard, on verra comment le régler), et les libs ruby qui vont avec (gem powah!).
Si vous ne souhaitez pas installer MySQL, vous devrez utiliser SQLite, comme expliqué plus bas, lors de la configuration de typo. (Et vous n’aurez pas besoin de la gem mysql).
Installation de RoR via RubyGems
Donc, on installe tout ce qui nous manque via gem (Sous Debian j’entends, sous Gentoo, les dépendances devraient déjà être installées correctement, viva Portage ^ ^ ) :)
gem install -y rails mysql fcgi
Et on patiente… Mais dans le cas d’un serveur MySQL dont les libs ne sont pas dans un path classique (ce qui risque d’être le cas si vous l’avez installé manuellement depuis les sources), et non spécifié dans la variable d’environnement LD_LIBRARY_PATH, le configure de mysql-ruby va se chier dessus… Pas de panique! ;) Un petit
gem install -y mysql -- --with-mysql-config=/blah/bin/mysql_config
Et c’est parti ;) (NB: Changer le path, évidemment hein ^ ^ )
Donc, on devrait avoir un setup fonctionnel niveau ruby / rails maintenant, on peut s’attaquer à Typo!
Installation de Typo
J’ai choisi d’utiliser la version de développement (trunk), c’est à vous de choisir si vous préferrez utiliser la version stable (Sachez que de petits changements peuvent empêcher certains thèmes de fonctionner correctement en trunk, et vice-versa, certains thèmes ne fonctionnent par défaut qu’en trunk).
Bref, pour la version trunk, on aura besoin de subversion (emerge/apt-get install subversion si ce n’est pas déjà fait).
On choisit un répertoire d’installation, qui ne sera PAS le répertoire accessible par votre serveur web (en dehors du docroot donc, ou sur un autre sous-domaine à la limite), on s’occupera de la publication via un lien symbolique plus tard. (J’ai choisis ~/typo dans mon exemple)
svn co svn://leetsoft.com/typo/trunk ~/typo
Il suffira d’un
svn up ~/typo
pour vérifier les mises à jour…
Configuration de Typo
Ensuite, on attaque la config BDD pour typo, dans mon cas, j’ai crée 3 bases (En production, seule une de ces bases sera utilisée): typo, typo_test et typo_dev, ainsi qu’un utilisateur typo n’ayant des droits spécifiques qu’à ces 3 bases, tout cela via PhpMyAdmin, ou en shell MySQL si vous préférrez ;)
Ensuite, on peuple ces bases avec le schéma de base mysql de typo, personnellement, je fait ce type d’opérations en shell, j’ai des mauvais souvenirs de PmA foutant le bordel dans les charsets, et c’est de toutes façons plus rapide via le shell MySQL.
cd ~/typo
mysql -utypo -p
use typo
source db/schema.mysql.sql
use typo_dev
source db/schema.mysql.sql
use typo_tests
source db/schema.mysql.sql
Hop! On configure ensuite l’accès MySQL pour typo, la syntaxe devrait parler d’elle même, si vous avez gardé les mêmes noms de table que dans l’exemple, vous n’aurez plus qu’à modifier l’utilisateur et le mot de passe:
cp config/database.yml.example config/database.yml.example
vim config/database.yml
Si vous préférez utiliser une BDD SQLite
Il suffit pour cela d’installer sqlite (emerge/apt-get install sqlite), de créer la bdd, et de configurer Typo:
cd ~/typo
sqlite db/typo.sqlite.db < db/schema.sqlite.sql
vim config/database.yml
Config qui devrait ressembler à ça:
login: &login
adapter: sqlite
dbfile: db/typo.sqlite.db
development:
<<: *login
test:
<<: *login
production:
<<: *loginTest préliminaire
Courage, on y est presque!
On peut dors-et-déjà lancer un mini-test avec le script serveur RoR:
ruby script/server
Vous devriez pouvoir accéder à votre blog via l’url http://votredomaine.tld:3000
En cas de problème, vérifiez bien tous les fichiers logs :) (~/typo/log, ainsi qu’en sortie console, vous pouvez aussi éventuellement lancer directement le script ~/typo/public/dispatch.fcgi en console).
(NB: ^C (CTRL+C) pour tuer le script serveur ;)
Problèmes relatifs à la présence d’un serveur MySQL installé dans un répertoire non “traditionnel”
En parlant de problème, notre serveur MySQL installé dans un path tordu va refaire des siennes, vous risquez de rencontrer une erreur Mysql, du fait de l’incapacité de l’extension ruby-mysql de trouver une bibliothèque dynamique mysqlclient sur votre système…
Deux solutions: Le symlink barbare, ou modifier la variable d’environnement LD_LIBRARY_PATH (au niveau du système, ou au niveau de la configuration FastCGI dans la config du serveur Web)... J’ai opté pour le symlink barbare ^ ^
ln -s /blah/lib/mysql/libmysqlclient.so.14 /usr/lib/libmysqlclient.so.14
Configuration du serveur Web (Lighttpd)
Hop! :) On attaque maintenant la configuration Lighttpd.. (Vous ne trouverez ici aucune info concernant une utilisation avec Apache, je vous redirige pour cela vers les sites officiels rails & typo, ainsi que ce guide ^ ^).
Il faut déjà une installation de lighttpd fonctionnelle (emerge lighttpd sous gentoo), il ne me semble pas qu’il y ait de paquets lighttpd Debian, j’utilise personnellement mon script de build, évidemment :) (NB: Je prévois un article plus détaillé sur l’utilisation de ce script)
On va donc s’attaquer à un extrait de config Lighttpd, ça ne devrait pas être très compliqué, la syntaxe des configs lighttpd est on ne peut plus claire :)
## Typo ;o)
server.modules += ("mod_rewrite")
server.modules += ("mod_redirect")
server.modules += ("mod_fastcgi")
$HTTP["host"] == "blog.ak-team.com" {
server.follow-symlink = "enable"
server.indexfiles = ( "dispatch.fcgi" )
server.error-handler-404 = "/dispatch.fcgi"
url.rewrite-once = (
"^/$" => "index.html"
#Break le cache si on acc?de un post en .html _AVANT_ qu'il ait été correctement caché (=> sans extension)
#"^([^.]+)$" => "$1.html"
)
## Redirection sur les .html, sauf pour l'index \
Cf le rewrite plus haut
url.redirect = (
"^/index\.html.*" => "http://blog.ak-team.com/",
"^/([^.]+)\.html$" => "http://blog.ak-team.com/$1"
)
fastcgi.server = (
".fcgi" => (
"typo" => (
"min-procs" => 1,
"max-procs" => 4,
"check-local" => "disable",
"socket" => "/var/run/fastcgi/typo.socket",
"bin-path" => "/home/niluje/typo/public/dispatch.fcgi",
"bin-environment" => ("RAILS_ENV" => "production" ),
"idle-timeout" => 120
)
)
)
}
On voit que j’utilise une configration cantonnée à un sous-domaine et que je charge les modules nécessaires.
Si vous préférez utiliser Typo via SCGI…
Lighttpd supporte par défaut le scgi, et il existe un launcher scgi pour RoR, nous avons donc la possibilité d’utiliser typo via scgi :)
Pour cela, vous aurez besoin d’installer quelques gems:
gem install -y cmdparse highline
wget http://www.zedshaw.com/downloads/scgi_rails/scgi_rails-0.4.3.gem
gem -y install scgi_rails-0.4.3.gem
scgi_ctrl config
scgi_ctrl start
Paf, notre launcher scgi a lancé un daemon scgi, sur le port 9999 par défaut (scgi_ctrl help config pour plus d’infos).
On peut donc attaquer la config lighttpd:
server.modules += ("mod_scgi")
server.modules += ("mod_rewrite")
server.modules += ("mod_redirect")
$HTTP["host"] == "blog.ak-team.com" {
server.indexfiles = ( "dispatch.scgi" )
server.error-handler-404 = "/dispatch.scgi"
server.follow-symlink = "enable"
## SCGI
url.rewrite-once = (
"^/$" => "index.html"
#"^([^.]+)$" => "$1.html"
)
url.redirect = (
"^/index\.html.*" => "http://blog.ak-team.com/",
"^/([^.]+)\.html$" => "http://blog.ak-team.com/$1"
)
scgi.server = (
"dispatch.scgi" => ((
"host" => "127.0.0.1",
"port" => 9999,
"check-local" => "disable"
)) )
:) Le launcher SRR poss?de aussi un mode cluster, pour lancer plusieurs daemons:
scgi_cluster config -c 3
scgi_cluster start
Et la config lighttpd (seulement la partie scgi.server)
scgi.server = (
"dispatch.scgi" =>
(
"server1" =>
( "host" => "127.0.0.1",
"port" => 9999,
"check-local" => "disable"),
"server2" =>
( "host" => "127.0.0.1",
"port" => 10000,
"check-local" => "disable"),
"server3" =>
( "host" => "127.0.0.1",
"port" => 10001,
"check-local" => "disable")
)
)Dernières vérifications et publication…
Pensez à vérifier les paths et les permissions du répertoire où sera stocké le socket (l’utilisateur lighttpd doit avoir les droits d’écriture dessus, de même que les dossiers~/typo/public et ~/typo/log [chmod 777 de bourrin, ou chown vers l’utilisateur de lighttpd et chmod 666], et j’insiste la dessus, sinon le syst?me de cache & de log ne fonctionnera pas correctement, entraînant une baisse de performance tr?s significative)
Et on oublie pas le symlink qui va bien, vers le répertoire où pointe notre sous-domaine:
ln -s ~/typo/public /var/www/blog.ak-team.com
Et voilààà! :).
Ça fait un gros paté comme premier post, je sais ^ ^.
Et je vais enchainer sur l’utilisation d’un client de Blogging sous Linux! ;) (blogtk/drivel)
Changement de thème en cours...
Waaai! Comme j’aime beaucoup ce thème-ci, j’ai décidé de le porter pour qu’il fonctionne correctement sous Typo trunk… Ça avance pas mal, pour l’instant tout ce qui est relatif aux articles devrait fonctionner, j’attaque la barre de menu :)
PS: évidemment je publierais le patch une fois que ça sera terminé ;)
EDIT: C’est fait, j’ai porté le thème Phokus aussi en passant… Par ici et par ici aussi :)
Il ne devrait plus y avoir de problème lors du post d’un commentaire sous FireFox 1.5 ;)
(Apu de coccinelles non plus, sniff’)
Ho, un blog! :)
Hé ben vi, j’ai fini par céder à la tentation, voilà un joli blog tout frais pour le NiLuJe ;)
Have Fun! :)
Note: Le thème n’est pas définitif, mais vu que j’utilise Typo trunk, y’en a pas des masses qui marchent à 100%, donc bon, en attendant… ^^
