APE - Installation symfony

Tagged:

Donc le dernier billet j'expliquais brièvement ce qu'était APE et à quoi ça peut servir, la je vais progressivement essayer de le mettre en pratique.

Je profite du fait que je ne termine pas souvent mes projets perso après avoir trouvé techniquement ce que je cherche pour utiliser un maximum des techno "avant-gardistes".

Je vais donc faire un jeu, vous verrez ce que c'est en temps et en heure si ça avance, et l'idée c'est toujours d'apprendre alors je vais utiliser :
* symfony1.4 (je voulais utiliser la 2.0 mais c'est encore trop early stage)
* html5 pour les canvas, les sons ce genre de choses
* css3 pour pas passer des heures a réinventer ce qui y est déja
* APE (oué c'est basé sur ça)
* d'autres trucs ...

Commençons par installer symfony1.4 (pour aller vite je prends la sandbox)

  1. cd /path/to/mytld/..
  2. wget http://www.symfony-project.org/get/sf_sandbox_1_4.zip
  3. unzip sf_sandbox_1_4.zip
  4. mv sf_sandbox mytld

Et il faut rajouter dans son vhost :

  1. Alias /web/sf /path/to/mytld/lib/vendor/symfony/data/web/sf
  2. <Directory /path/to/mytld/lib/vendor/symfony/data/web/sf>
  3. Options FollowSymLinks
  4. AllowOverride All
  5. Allow from All
  6. </Directory>

Ensuite un check sur :
http://mytld.com/web/frontend_dev.php

J'ai bougé APE_binary dans lib/vendor et ape-jsf dans web/js

Dans la mesure où je veux faire simple pour tester je vais faire un module avec 2 actions, une liste ( de channels ) et un détail pour un channel.

  1. ./symfony generate:module frontend channels

Le fichier routing.yml

  1. channels_details:
  2. url: /channels/detail/:id_channel
  3. param: { module: channels, action: detail }
  4.  
  5. homepage:
  6. url: /
  7. param: { module: channels, action: listall }

la classe d'actions:

  1. class channelsActions extends sfActions
  2. {
  3.  
  4. public function executeDetail(sfWebRequest $request)
  5. {
  6. return sfView::SUCCESS;
  7. }
  8.  
  9. public function executeListall(sfWebRequest $request)
  10. {
  11. return sfView::SUCCESS;
  12. }
  13. }

On crée 2 fichiers de template listallSuccess.php et detailSuccess.php et j'en ai fini avec symfony pour l'instant !

Pour rendre plus pratique l'utilisation de APE avec symfony je crée 2 tâches :

  1. ./symfony generate:task APEStart
  2. ./symfony generate:task APEStop

et les tâches correspondantes :

  1. class APEStartTask extends sfBaseTask
  2. {
  3. protected function configure()
  4. {
  5. $this->namespace = 'ape';
  6. $this->name = 'start';
  7. $this->briefDescription = 'This starts the APE daemon';
  8. }
  9.  
  10. protected function execute($arguments = array(), $options = array())
  11. {
  12. $apedFolder = realpath(dirname(__FILE__) . '/../vendor/APE_binary/bin/');
  13. chdir($apedFolder);
  14. exec('nice '.$apedFolder.'/aped > /tmp/loglog 2>&1 &');
  15. }
  16. }
  17.  
  18. class APEStopTask extends sfBaseTask
  19. {
  20. protected function configure()
  21. {
  22. $this->namespace = 'ape';
  23. $this->name = 'stop';
  24. $this->briefDescription = 'This stops the APE daemon';
  25. }
  26.  
  27. protected function execute($arguments = array(), $options = array())
  28. {
  29. exec('ps -aux | grep aped | grep -v \'grep\' | cut -d " " -f 2 | xargs kill -9');
  30. }
  31. }

Il se peut qu'il faille un peu adapter le stop, ps est implémenté différemment sous OSx que sous linux ! Mais l'utilisation est super simple :
* ./symfony ape:start
* ./symfony ape:stop

Prochaine étape je fait un wrapper jQuery pour APE et je fais un premier test de fonctionnement.