Je m'excuse par avance car je risque d'en choquer certains, mais je ne vais pas vous expliquer comment installer Yaws. En effet, je considère que lorsqu'on s'intéresse à Yaws, c'est qu'on programme en Erlang, et qu'une personne programmant en Erlang est un minimum curieuse et débrouillarde, parce que bon, faut déjà être motivé pour faire de l'Erlang. Mais bref...
Configurer Yaws
Bon, quand bien même je ne vous parle pas de l'installation de Yaws en elle-même, je vais quand même vous toucher deux mots quant à sa configuration. Tout ce dont nous allons nous occuper ici est de la modification du fichier
yaws.conf. Encore une fois, je ne peux pas vous dire où le trouver, car je ne connais ni OS X, ni Windows et même sous Linux, cet emplacement varie selon votre installation, mais je suppose que vous saurez le trouver vous-mêmes. Chez les linuxiens, il sera très probablement dans
/etc ou dans
/usr/local/etc, pour les autres... Eh bien cherchez, c'est votre OS après tout.
Le fichier yaws.conf
Ceci est le fichier de configuration de Yaws, c'est grâce à ce fichier que nous allons spécifier les serveurs que nous souhaitons créer, à quelle IP écouter pour être connectés à ces serveurs, et surtout : où se trouvent les fichiers que nous souhaitons rendre disponibles.
Vous vous apercevrez que ce fichier est abondamment commenté. Parmi les variables qui vont nous servir, on peut noter dès le début du fichier :
ebin_dir. Il faudra ici ajouter le dossier dans lequel on placera les fichiers beam allant avec votre projet. C'est tout pour les variables, intéressons-nous aux serveurs ; la
création d'un serveur suit ce motif :
Code : Autre1
2
3
4
5
6
| <server localhost>
port = 8000
listen = 127.0.0.1
docroot = /usr/local/var/yaws/www
appmods = <cgi-bin, yaws_appmod_cgi>
</server> |
Ça, c'est le serveur par défaut. Vous trouverez en dessous un autre serveur, avec plus d'options, il ne nous servira pas : vous pouvez donc entièrement le commenter. Il faudra ensuite modifier le serveur par défaut pour qu'il redirige les visiteurs vers notre wiki. Pour cela, il faut modifier la variable
docroot ; vous pouvez aussi si vous le souhaitez modifier le port d'écoute, bien que ce ne soit pas obligatoire. Voici par exemple la configuration de mon serveur :
Code : Autre1
2
3
4
5
6
| <server localhost>
port = 8000
listen = 127.0.0.1
docroot = /home/dark-side/wiki/www
appmods = <cgi-bin, yaws_appmod_cgi>
</server> |
Voilà, vous êtes désormais parés pour la suite !
Lancer votre serveur
Informations complémentaires
Nos pages seront écrites dans des fichiers
.yaws, fichiers dans lesquels nous pourrons écrire de l'HTML. Pour introduire du code en Erlang, on se sert des balises
<erl> ... </erl>. Entre ces balises devra
toujours figurer une fonction
out/1 dont l'argument sera un record que nous étudierons plus tard. Ces fonctions pourront renvoyer deux types de variables, un tuple du type :
{html, VosDonnees}, qui est la manière la plus simple d'afficher des données, ou bien renvoyer un tuple du type
{ehtml, Ehtml}, où
Ehtml peut être au choix du type :
- [Ehtml]
- {Tag}
- {Tag, Attrs}
- {Tag, Attrs, Corps}
Où
Tag est un atome du nom d'une balise HTML,
Attrs sera une liste de tuple du type :
{NomAttrs, Valeur} ; de même,
NomAttrs sera un atome,
Valeur pourra par contre être soit un atome, soit un string. Et pour finir,
Corps sera, lui, une variable similaire à
Ehtml, suivant donc à nouveau la syntaxe décrite précédemment. Pour que ce soit bien clair, voilà un exemple :
Code : Erlang 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 | {ehtml,
{table, [{bgcolor, red}],
[
{tr, [],
[
{td, [], "(0, 0)"},
{td, [], "(1, 0)"},
{td, [], "(2, 0)"}
]},
{tr, [],
[
{td, [], "(0, 1)"},
{td, [], "(1, 1)"},
{td, [], "(2, 1)"}
]},
{tr, [],
[
{td, [{colspan, "3"}], "(*, 2)"}
]}
]}
}
|
Qui produira le code HTML suivant :
Code : HTML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | <table bgcolor="red">
<tr>
<td>(0, 0)</td>
<td>(1, 0)</td>
<td>(2, 0)</td>
</tr>
<tr>
<td>(0, 1)</td>
<td>(1, 1)</td>
<td>(2, 1)</td>
</tr>
<tr>
<td colspan="3">(*, 2)</td>
</tr>
</table>
|
Bon, c'est sûr que présenté comme ça, ce n'est pas forcément très esthétique, mais c'est très utile, et
très pratique. Cela permet en effet d'afficher des structures plus
complexes qu'avec un simple tuple {</minicode>html,
</minicode>}. La dernière chose à savoir est que vous pouvez créer d'autres fonctions que la fonction
out/1 entre les balises
<erl></erl>. Attention par contre car ces fonctions sont locales, c'est-à-dire que vous ne pourrez y accéder que dans le
bloc erl dans lequel elles sont définies.
Voilà : je crois que tout est dit.
Votre première page
On va faire simple, affichons un
Hello, World!, voyez plutôt :
Code : HTML 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | <html>
<head>
<title>Wiki</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head>
<body>
<p>Un peu d'HTML...<br>
<erl>
out(_) ->
Hello = io_lib:format("Hello, ~p!", ["World"]),
{html, Hello}.
</erl>
<br>Et encore du HTML...</p>
</body>
</html>
|
Bon, d'accord : si j'avais voulu faire simple, j'aurais fait :
out(_) -> {html, "Hello, World!"}
.
Mais c'était pour vous montrer qu'on peut
vraiment mettre n'importe quel type de code entre ces balises.
Lancer Yaws
Placez-vous dans le dossier où se trouve l'exécutable, ouvrez la console et faites :
yaws -i. Cela va lancer Yaws dans le mode interactif, c'est-à-dire avec l'interprète Erlang habituel. Ce mode est très utile lors du développement. Une fois que votre projet sera stable, vous voudrez probablement lancer Yaws comme un daemon : pour cela, il suffit de faire :
yaws -D -heart. Le
-D va vous permettre de lancer Yaws en tant que daemon et l'option
-heart va lancer le programme du même nom, qui va se charger de relancer Yaws si celui-ci crashe, ou ne répond plus.
Une fois ceci fait, vous pouvez ouvrir votre browser et vous rendre à l'adresse : http://localhost:8000.