Как у меня есть архитектура плагинов в Ruby on Rails?

Я должен построить сайт социальной сети на Ruby on Rails. Функции на сайте могут время от времени меняться; поэтому нам нужно будет легко добавлять / удалять функции. Более того, возможно, мы создаем еще один сайт социальной сети. По этим причинам мы подумываем создать базовую платформу для сайтов социальных сетей в RoR с функцией установки или удаления расширений для этой платформы.

Я работал ранее в Joomla! CMS и ее архитектура для добавления / удаления расширений - это то, на что я смотрю. В Joomla! В инсталляции обычно есть сторона администратора, с которой вы можете добавлять / удалять / настраивать расширения.

Я новичок в RoR, и мне немного трудно решить, как это сделать. Любая помощь будет оценена.

2 ответа

Решение

ОБНОВЛЕНИЕ 2015: на это ответили в 2009 году многое изменилось

Плагины были заменены Gems и Engines. Вся необходимая информация о двигателях: http://guides.rubyonrails.org/engines.html

Двигатели - это фантастический способ создания инкапсулированного и многократно используемого кода для ваших приложений rails.

Оригинальный ответ для справки

Что касается разработки, Rails Engines и / или плагины, вероятно, то, что вы ищете.

Rails Engines - это небольшие подмножества приложений, которые можно поместить в любое из ваших приложений Rails и обрабатывать общие части приложения с нуля.

Например, в вашем приложении для социальных сетей есть вики, блог, чат и т. Д. Вы, скорее всего, захотите создать вики-движок, блог-движок и чат-движок.

Двигатели позволяют вам повторно использовать такую ​​функциональность в разных приложениях, поэтому вам не придется повторяться.

Взгляните на: http://rails-engines.org/

Некоторая поддержка плагинов 'engine' была объединена с основной кодовой базой Rails в Rails 2.3.

Я также рекомендовал бы взглянуть на некоторые публичные проекты, например, на github, и посмотреть, как люди использовали движки.

Посмотрите на некоторые двигатели:

Другие полезные ссылки для чтения

С точки зрения функциональности у вас все еще может быть область администратора, которая может активировать определенные функции, т.е. Ваш блог или вики, предоставляя пользователям доступ к таким областям с помощью системы разрешений / ролей.

Если вы хотите создать CMS, которая поддерживает какие-то расширения, такие как Wordpress или Joomla, то вам придется либо создать ее и предоставить руководящие указания, либо хотя бы посмотреть, как вы будете загружать / устанавливать модули / плагины с точки зрения пользователя.

Не уверен в последствиях этого для безопасности

Redmine поместил этот вид функциональности в свое удивительное приложение. Вы можете копаться в исходном коде для советов и подсказок

Наконец Adva_CMS в основном принял этот подход и создал несколько двигателей для своего приложения CMS

НТН

Двигатели по-прежнему довольно солидный путь, новое место для получения информации о них находится здесь: http://guides.rubyonrails.org/engines.html

Но то, что вам нужно, действительно более специфично для приложения. Многие приложения разрабатывают эти вещи органично с течением времени. Они начинают вручную, создавая некоторые из них, а затем периодически пересматривают их, пока не найдут шаблоны, которые соответствуют шаблонам разработки программного обеспечения, а затем разработают структуру плагинов.

Собираетесь ли вы представить свой интерфейс конечным пользователям? Сторонним разработчикам? Какие части приложения контролируются этими плагинами? Это просто уровень презентации? Влияет ли это на модель данных? Примите во внимание тот факт, что когда вы публикуете какой-либо внешний интерфейс, вы разрабатываете контракты, которые вам необходимо соблюдать.

Вы можете проверить эти шаблоны проектирования: http://en.wikipedia.org/wiki/Software_design_pattern. Они помогут вам понять, как управлять процессом разработки. Если вы просто работаете над плагинами для внутреннего использования, то какова их реальная цель? Чем они отличаются от модулей?

Другие вопросы по тегам