ErlyWeb et Postgres

faut que je corrige le problème des > qui devient de &gt ;. Dans un premier temps faites le vous même.

Aujourd’hui, j’ai testé ErlyWeb, le framework web écrit en Erlang qui reprend un certain nombres d’idées à Rails.

N’ayant pas MySQL d’installé sur ma machine, mais ayant PostgreSQL, je décide de faire tourner l’application de ce tutorial de Yariv, l’auteur d’erlyweb.

Mais plutôt que de faire un site de musicien, je fais un moteur de blog. Plus simple encore que le modèle de donnée proposé par Yariv.

Et ce n’est pas trivial.

Tout d’abord, le driver PostgreSQL fourni est celui d’Erlang Consulting. Il fonctionne comme une application OTP. Donc il lui faut un fichier psql.app dans le chemin de recherche.

Un modèle est là : erlyweb-0.6/src/erlang-psql-driver/psql.app.src

ATTENTION

Avant de continuer il faut absolument que l’authentification de postgresql se fasse en MD5.
C’est à dire que dans le fichier pg_hba.conf, il doit y avoir au moins la ligne suivante :


host   all         all         127.0.0.1/32          md5

Sinon le driver ne démarre pas et bloque même la console erl.

Un petit script de démarrage

Je me suis inspiré de ce tutorial.

A la racine de votre projet erlyweb, créez un fichier start.erl :


-module(start).
-export([boot/0, boot/1]).
-define(P, "/Users/cstar/devs/erlang/blog").

boot() ->
    boot(true).
boot(false) ->
    compile();
boot(true) ->
    pgsql_start(),
    compile().

pgsql_start() ->
    code:add_pathz(?P ++ "/ebin"),
    application:start(psql),
    erlydb:start(psql).

compile() ->
    erlyweb:compile(?P, [{erlydb_driver, psql}]).

On lance le bazar

Dans le terminal : yaws -i
et dans la console :


1> c(start).
{ok,start}
2> start:boot().
debug:erlyweb_compile:340: Compiling Erlang file "blog_app_controller"
debug:erlyweb_compile:335: Compiling ErlTL file "html_container_view"
debug:erlyweb_compile:340: Compiling Erlang file "html_container_controller"
debug:erlyweb_compile:340: Compiling Erlang file "entries_view"
debug:erlyweb_compile:335: Compiling ErlTL file "entries_show"
debug:erlyweb_compile:340: Compiling Erlang file "entries_controller"
debug:erlyweb_compile:340: Compiling Erlang file "entries"
debug:erlyweb_compile:104: Generating ErlyDB code for models: "entries.erl "
{ok,{{2007,7,25},{19,1,20}}}

Tout va bien ; C’est parti !
On pointe sur http://localhost:4000/blog/entries/ (à ajuster selon la config de Yaws)

Ca marche pô !

Postgresql se plaint de la syntaxe de LIMIT X,Y. Lui il veut LIMIT Y OFFSET X.
Ouvrez un autre terminal.
Rapidement le problème est identifié dans la ligne 309 du fichier erlyweb-0.6/src/erlsql/erlsql.erl. Il faut la remplacer par la ligne suivante :


    [<>, encode(Num),<> , encode(Offset)];

Ensuite à la racine de ErlyWeb, on refait un make.
Il faut maintenant recharger le code de erlsql.


3>l(erlsql).

Il ne reste qu’à recharger la page dans le navigateur, et de profiter de notre application.

Notes de fin

  1. Je voulais consacrer plus temps à l’utilisation du framework. C’est un peu gaché.

  2. Modifier directement le code du framework c’est pas terrible non plus. Mais j’ai pas encore trouvé de solution propre, vu que le driver erlydb ne peut pas indiquer ses préférences à erlsql. Je posterai sur la ML pour en parler.

  3. Au final, je voulais surtout utiliser Mnesia, j’aimerai pouvoir interconnecter mon appli erlyweb avec ejabberd. Ca fera l’occasion d’autres post.

2 comments so far

  1. Robyn Weiss on

    rupie shauwe falx diogenite postnati cladophyllum stenocoriasis disinfestation
    Perry Hall Florist
    http://bowers.ci.manchester.ct.us/


Comments are closed.

%d bloggers like this: