# ModularitÃ©, engines et override

**URL:** <https://www.ruby-forum.com/t/modularita-engines-et-override/181199>\
**Category:** FR\
**Created:** [January 7, 2010, 7:49am UTC](https://www.ruby-forum.com/t/modularita-engines-et-override/181199 "2010-01-07T07:49:51Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![vzmind](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/4af34b/32.png) [@vzmind](https://www.ruby-forum.com/u/vzmind)\
**Post date:** [January 7, 2010, 7:49am UTC](https://www.ruby-forum.com/t/modularita-engines-et-override/181199/1 "2010-01-07T07:49:51Z")

</div>

Bonjour Ã tous,

nous travaillons chez thinkDRY sur un CMS 2.0 OpenSource, la  
BlankApplication. AprÃ¨s un an de travail et d’implÃ©mentation pour  
diffÃ©rents clients, nous avons achevÃ© le dÃ©veloppement du coeur de  
l’application. Pour la rendre totalement modulaire, faciliter les  
dÃ©veloppements de la communautÃ©s et suivre l’exemple des meilleurs  
projets OpenSource Rails du moment (Radiant, Spree), nous souhaitons  
mettre en place un mÃ©canisme d’extensions  
([http://spreecommerce.com/documentation/extensions.html](http://spreecommerce.com/documentation/extensions.html)). Les engines  
sont a priori la meilleure faÃ§on de rÃ©aliser cela.

Cependant, lors de la crÃ©ation de la premiere extension nous avons Ã©tÃ©  
confrontÃ© Ã un principe de chargement qui veut que ce soit les  
controllers/models/vues de l’application principale qui “surdÃ©finissent”  
ceux prÃ©sent dans les engines. Or comme notre coeur est dans  
l’application principale… ajouter des engines ne permet pas d’Ã©tendre  
les fonctions natives.

Je pensais pouvoir inverser cette rÃ¨gle avec des Dependencies:load\_path  
mais aprÃ¨s 2jours de recherche sur le web, je n’ai toujours pas  
solution. J’ai bien essayÃ© de faire une tache rake d’install dÃ©placant  
les fichiers du coeur mais bonjour les conflits dans git et la  
maintenabilitÃ© Ã terme !!

Avez-vous une idÃ©e, une piste?

–  
VS

Original post: [Modularity, engines and loading - Engines - Ruby-Forum](http://www.ruby-forum.com/topic/201694#878262)  
Note: [www.blankapplication.org](http://www.blankapplication.org) to get the release 1.0.4. V1.1 coming  
this month

---

<div class="post-metadata">

**Author:** ![vzmind](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/4af34b/32.png) [@vzmind](https://www.ruby-forum.com/u/vzmind)\
**Post date:** [January 7, 2010, 11:13am UTC](https://www.ruby-forum.com/t/modularita-engines-et-override/181199/2 "2010-01-07T11:13:45Z")

</div>

Le 07/01/10 07:49, Vincent Spehner a Ã©crit :

> sont a priori la meilleure faÃ§on de rÃ©aliser cela.  
> solution. J’ai bien essayÃ© de faire une tache rake d’install dÃ©placant  
> les fichiers du coeur mais bonjour les conflits dans git et la  
> maintenabilitÃ© Ã terme !!
> 
> Avez-vous une idÃ©e, une piste?

Personnellement, je ne suis pas convaincu que les Engine soit rÃ©Ã©lement  
le meilleur solution.

Typiquement Radians n’utilise pas engine et c’est selon moi la meilleur  
solution.

Le dÃ©veloppement d’un systÃ¨me de plugin/extension custom Ã votre cas  
peux rapidement se montrer plus performant, surtout au niveau sandboxing  
que vous gÃ©rer ainsi beaucoup mieux.

Typiquement dans Typo, les helpers dÃ©fini dans Typo sont loader  
automatiquement par l’application de maniÃ¨re custom. Ca marche super  
bien (merci Neuro)

---

<div class="post-metadata">

**Author:** ![vzmind](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/4af34b/32.png) [@vzmind](https://www.ruby-forum.com/u/vzmind)\
**Post date:** [January 7, 2010, 7:44pm UTC](https://www.ruby-forum.com/t/modularita-engines-et-override/181199/3 "2010-01-07T19:44:52Z")

</div>

C’est une mauvaise idÃ©e d’avoir le cms au sein de l’application Rails  
car dans ce cas l’utilisateur ne peut faire aucune custo et que ca  
complique beaucoup les mises Ã jour du cms. Comme ca dans ton appli  
rails tu as les tests spÃ©cifiques Ã ce qui est construit avec le cms,  
les assets spÃ©cifique Ã l’utilisation de ton cms, et les modÃ¨les  
spÃ©cifique Ã l’intÃ©gration.

C’est Ã©galement une mauvaise idÃ©e de patcher le fonctionnement de  
rails au niveau de sa politique de chargement parce que c’est un peu  
poilu avec les histoires de cache class, cache view, reloading  
auto …

A mon avis une meilleur archi serait:

1. mise en plugin du cms
2. c’est le premier plugin chargÃ© (cf fichier config/environment.rb)
3. Les extensions partagÃ© peuvent surcharger le plugin
4. Le code de l’application rails peut surcharger le tout et ne  
contient QUE du code client

Pour mettre Ã jour le cms il suffit de faire un update du submodule  
plugin correspondant au cms.

Pour completer le tout il faut gÃ©rer une copie d’asset du plugin cms  
vers le public globale, mais tu as dÃ©jÃ le problÃ¨me avec tes  
extensions qui voudrait avoir leur propre assets.

Sinon tu as le choix de ne pas utiliser les plugins rails qui ne  
doivent pas t’apporter grand chose si ce n’est le support des taches  
rake et script/plugin install et ce que tu appelles les engines (qui  
ne dÃ©pendent pas du tout des plugins et pourrait aussi Ãªtre dans un  
autre rep) mais de faire ton propre systÃ¨me de plugin, c’est vraiment  
pas compliquÃ© en ruby.

---

<div class="post-metadata">

**Author:** ![vzmind](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/v/4af34b/32.png) [@vzmind](https://www.ruby-forum.com/u/vzmind)\
**Post date:** [January 8, 2010, 9:20am UTC](https://www.ruby-forum.com/t/modularita-engines-et-override/181199/4 "2010-01-08T09:20:16Z")

</div>

Merci beaucoup pour ces premiers Ã©lÃ©ments. Je vais installer ces trois  
applications et Ã©tudier d’un peu plus pres le fonctionnement de leurs  
Engines/Extensions. Est-ce que l’un d’entre vous Ã dÃ©jÃ eu a travailler  
avec ces systemes?

Comme notre CMS contient dÃ©jÃ une bonne dizaine de plugins, je pense que  
pour l’embarquer il nous le mettre dans un engine. Je vais demander au  
dev de faire ca. PremiÃ¨re Etape.

Avez-vous quelques Best practices concernant ce sujet? Regardez  
simplement [demo.blankapplication.org](http://demo.blankapplication.org). C’est l’ancienne version mais ca  
vous donnera une idÃ©e. (Login: guest/secret).

En fait nous avons dÃ©jÃ 2 engines gÃ©rant les 2 mÃ©tiers principaux de  
notre outils. Acts\_as\_item et acts\_as\_container. Le premier est pour  
gÃ©rer gÃ©nÃ©riquement toutes formes de contenu et les actions classiques  
associÃ©es (video, article, pages, RSS etc… en CRUD, rating, comment,  
searchable etc…). Le deuxiÃ¨me est pour organiser ces dits items  
(workspace, folder, website, shop). Nous partions dans une  
“morcellisation” systÃ©matiques des fonctionnalitÃ©s dans plusieurs  
acts\_as… Mais si je comprends bien il faudrait mieux n’en faire qu’un  
pour ensuite mettre la partie client dans l’app ou des extensions.

Le problÃ¨me malgrÃ© tout est que notre systÃ¨me se basant aussi sur un  
nombre consÃ©quent de gems, comment pouvons-nous les embarquer dans  
l’engine? Avec une tache rake d’install? Mais bon je devie, de toute  
facon on passera aussi en SaaS dÃ¨s que possible.

Je vous tiens informÃ© de l’avancement.

## Regards,

Vzmind  
Skype Id: vzmind  
mail: vincent (arobase) thinkdry (point) com
