Comment puis-je avoir le plugin architecture Ruby on Rails?
Question
Je dois construire un site de réseautage social sur Ruby on Rails. Les caractéristiques du site peuvent changer de temps en temps; donc nous aurons besoin d'ajouter / supprimer des fonctionnalités avec la facilité. De plus, nous pouvons être en train de construire un autre site de réseautage social. Pour ces raisons, nous pensons construire un cadre de base pour les sites de réseaux sociaux en RoR avec la fonctionnalité pour installer ou désinstaller des extensions du cadre.
Je travaillais auparavant dans Joomla! CMS et son architecture pour l'ajout / suppression d'extensions est un peu ce que je regarde. Dans un Joomla! l'installation il y a habituellement un côté admin à partir de laquelle vous pouvez ajouter / supprimer / personnaliser les extensions.
Je suis nouveau à RoR et trouvant peu difficile de décider comment faire cela. Toute aide sera appréciée.
La solution
Mise à jour 2015: il a été répondu en 2009 beaucoup de choses ont changé
Plug-ins ont été remplacés par des pierres précieuses et moteurs Pour toutes les informations dont vous avez besoin sur les moteurs: http://guides.rubyonrails.org/engines.html
Les moteurs sont une excellente façon de construire encapsulé et code réutilisable pour vos applications Rails.
Réponse originale pour référence
Du côté de développement Rails moteurs et / ou plug-ins est probablement ce que vous recherchez.
Dites par exemple votre application de réseau social a un wiki, blog, chatroom etc. Vous devriez plus probablement envie de créer un moteur de wiki, moteur de blog et le moteur chatroom.
Les moteurs vous permet de réutiliser cette fonctionnalité dans les différentes applications afin que vous ne devez pas vous répéter.
Jetez un oeil à: http://rails-engines.org/
Certains support des plugins 'moteur' a été fusionné dans le noyau Rails Rails 2.3 codebase.
Je recommande également jeter un oeil à certains projets publics dire sur GitHub et voir comment les gens ont des moteurs utilisés.
Jetez un oeil à certains moteurs:
- Wiki-moteur
- Skinny-Blog-moteur
Autres liens utiles pour la lecture
- Conseils pour les moteurs d'écriture
- moteurs Rails, Railscast par Ryan Bates
- Le modèle de poupée russe (PDF)
En termes de fonctionnalité, vous pouvez toujours avoir une zone d'administration qui pourrait activer certaines fonctions soit. votre blog ou wiki en permettant aux utilisateurs d'accéder à ces zones avec un système d'autorisations / rôles.
Si vous voulez construire un CMS qui prend en charge une sorte d'extensions comme dans Wordpress ou Joomla, vous devrez soit le construire et de fournir guidlines ou tout au moins se pencher sur la façon dont vous télécharger / installer des moteurs / Plugins d'un point de vue de l'utilisateur .
Je ne sais pas sur les conséquences sur la sécurité de ce
Redmine a mis ce genre de fonctionnalité dans leur application impressionnante. Vous pouvez creuser autour du code source pour obtenir des conseils et des indices
Enfin Adva_CMS a essentiellement adopté cette approche et ont créé un certain nombre de moteurs pour leur application CMS
HTH
Autres conseils
Les moteurs sont encore une façon assez solide pour aller, le nouvel emplacement pour obtenir des informations sur celles-ci est situé ici: http://guides.rubyonrails.org/engines.html
Mais ce que vous avez besoin est vraiment une application plus spécifique. Beaucoup d'applications développent ces choses organiquement au fil du temps. Ils commencent par la main élaboration d'un peu d'entre eux, puis ils les re-facteur périodiquement jusqu'à ce qu'ils trouvent des modèles qui correspondent aux modèles de conception de logiciels, puis ils développent un cadre de plug-in.
Vous allez exposer votre interface à l'utilisateur final? Pour les développeurs tiers? Quelles parties de l'application sont contrôlées par ces plug-ins? Est-ce juste le niveau de présentation? Est-il affecte le modèle de données? Considérez le fait que lorsque vous publiez tout type d'interface externe, vous développez des contrats que vous devez honorer.
Vous pouvez vérifier ces modèles de conception: http://en.wikipedia.org/wiki/Software_design_pattern . Ils vous aideront à comprendre comment gérer votre processus de développement. Si vous êtes en train de travailler plugins pour un usage interne, alors quel est le but réel d'entre eux? Ce qui les rend différents de modules?