2. ПРИВЕТ
О чем буду рассказывать?
Меня зовут Макс Лапшин
•max@maxidoors.ru
•http://github.com/maxlapshin
•модератор ror2ru
3. ПЛАГИНЫ
А зачем это?
Да что такое рельсовые плагины?
Неперезагружаемый код, лежащий в
/vendor/plugins
•Умеют встраиваться во все три слоя MVC;
•Могут объявлять новые классы модели.
Первая проблема очевидна:
Плагин до 2.3 не мог объявить шаблон,
контроллер или маршрут к нему.
4. КОНТРОЛЛЕР В ПЛАГИНЕ
А Engines?
3 года один и тот же вопрос в ror2ru:
встраивание форума/вики в рельсы.
Ответ один: DocuWiki.php + phpBB.
Рельсы не позволяли вовсе встраивать
подприложения, хотя потребность была.
5. ПЛАГИН ENGINES
А что там про 2.3?
Все те три года, пока мучались с форумами
на PHP жил плагин Engines
•Полноценные подприложения в
vendor/plugins;
•жуткие хаки ядра рельс, отваливающиеся
на апдейтах;
•сомнительной стабильности хаки
dependencies;
•несовместимость с другими хаковыми
плагинами;
•маленькое количество пользователей;
•рабочий форум savage beast. Честно, он
6. 2.3 — PLUGIN APP
Неужели счастье пришло?
Что-то поменялось в умах 37signals и парни
решили начать вставлять в ядро рельс
функциональность плагинных приложений.
•Контроллеры в плагинах;
•шаблоны в плагинах;
•роуты в плагинах.
Стало возможно создавать приложения в
плагинах.
7. КУЧА ПРОБЛЕМ
Это мелкие? А что же крупные??
Мелкие:
•Неработающие маршруты. Нельзя из
приложения перекрыть маршрут в плагине.
Смотрим код clearance;
•нельзя выполнять миграции из плагинов. ln
-s в помощь;
•с миграциями ещё проблема с порядком;
•нет простого способа обратиться к ассетам
из плагинов. Проблема глубокая, но ln -s в
помощь.
8. КУЧА ПРОБЛЕМ
А стоит ли овчинка выделки?
Крупные:
•Перекрывание кода плагина из
пользовательского приложения.
Ссылки для чтения:
•http://coryosborn.com/posts/railsconf-day-2-
rails-engines
•http://rails-
engines.org/news/2009/02/02/engines-in-rails-
2-3/
10. ГЕНЕРАТОР ПОМОГАЕТ
сам то пробовал такое?
В рельсах есть генераторы. Помогают
создать миграции с правильными timestamp
Он же сгенерирует нужные пользовательские
модели в которых будет стоять include
PluginCode
11. ПРИМЕРЫ РАБОТЫ
Решение
Задача стояла так:
Есть источник данных, которые могут
запаздывать на несколько минут.
Вставить в несколько внутренних
приложений код, который будет
синхронизировать эти данные.
12. SOURCE CLIENTВ плагине были контроллеры, к которым
источник обращается для оповещения об
обновлениях.
В плагине спрятаны ActiveResource модели,
умеющие обрабатывать данные с источника.
ActiveRecord модели помещены с помощью
генератора в приложение и в них
включаются модули из плагина.
Есть rake task-и для обновления по крону.А чего у других?
13. DJANGO
Самый близкий пример—Django на питоне.
Все приложение состоит из ядра, в которое
вставляются плагины—namespaces. Все
модели соответственно в пространствах
имен и никаких миграций.
14. ИТОГИ
•Контроллеры и шаблоны можно класть в
плагины уже сейчас;
•всякие хитрости вида перекрытия кода
плагина пока толком недоступны;
•ждем фишек в Rails 3.0