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

More Related Content

What's hot

Python в ядре Яндекс.Диска
Python в ядре Яндекс.ДискаPython в ядре Яндекс.Диска
Python в ядре Яндекс.ДискаYandex
 
JavaScript завтра
JavaScript завтраJavaScript завтра
JavaScript завтраSergey Rubanov
 
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...CodeFest
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word pressvovasik
 
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС DevDay
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий7bits
 
Почему стоит выбрать PHP
Почему стоит выбрать PHPПочему стоит выбрать PHP
Почему стоит выбрать PHPMaxim Sivokon
 
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...WDDay
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновAnton Piskunov
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование SymfonyMedia Gorod
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Fwdays
 
От локальной Devops инфраструктуры в облако
От локальной Devops инфраструктуры в облакоОт локальной Devops инфраструктуры в облако
От локальной Devops инфраструктуры в облакоMicrosoft
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеYandex
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...7bits
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?Oleksandr Torosh
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Pavel Chertorogov
 
11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...
11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...
11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...HappyDev-lite
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4rit2011
 

What's hot (20)

Python в ядре Яндекс.Диска
Python в ядре Яндекс.ДискаPython в ядре Яндекс.Диска
Python в ядре Яндекс.Диска
 
JavaScript завтра
JavaScript завтраJavaScript завтра
JavaScript завтра
 
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...CodeFest 2011. Климова Н. — FitNesse, полезный для проекта,  или история одно...
CodeFest 2011. Климова Н. — FitNesse, полезный для проекта, или история одно...
 
Как быть с большими сайтами на Word press
Как быть с большими сайтами  на Word pressКак быть с большими сайтами  на Word press
Как быть с большими сайтами на Word press
 
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС «CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
«CI. Jenkins. 2GIS» — Игорь Павлов, 2ГИС
 
Svn rule in_team_project
Svn rule in_team_projectSvn rule in_team_project
Svn rule in_team_project
 
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис ВоскобойникКак работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
Как работать с legacy проектом, которому больше10 лет? |Денис Воскобойник
 
Спецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версийСпецкурс-2015. Занятие 05. Системы контроля версий
Спецкурс-2015. Занятие 05. Системы контроля версий
 
Почему стоит выбрать PHP
Почему стоит выбрать PHPПочему стоит выбрать PHP
Почему стоит выбрать PHP
 
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
ОЛЕКСІЙ ГОЛУБЄВ «Electron. Як використовуючи WEB framework’і створити багатоп...
 
BeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демоновBeeGo для веб приложений, API и демонов
BeeGo для веб приложений, API и демонов
 
Использование Symfony
Использование SymfonyИспользование Symfony
Использование Symfony
 
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
Сергей Яковлев "Phalcon 2 - стабилизация и производительность"
 
От локальной Devops инфраструктуры в облако
От локальной Devops инфраструктуры в облакоОт локальной Devops инфраструктуры в облако
От локальной Devops инфраструктуры в облако
 
Денис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в ЯндексеДенис Чистяков: Workflow. Работа над проектом в Яндексе
Денис Чистяков: Workflow. Работа над проектом в Яндексе
 
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
Спецкурс-2015. Занятие 04 (часть 2). Обработка исключительных ситуаций, запи...
 
Phalcon. Что нового?
Phalcon. Что нового?Phalcon. Что нового?
Phalcon. Что нового?
 
Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)Бэкенд, фронтенд — всё смешалось (nodkz)
Бэкенд, фронтенд — всё смешалось (nodkz)
 
11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...
11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...
11 HappyDev-lite-2015 autumn. Александр Дец. Теплый LAMPовый веб. Промышлен...
 
как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4как стать хорошим веб технологом. нарек мкртчян. зал 4
как стать хорошим веб технологом. нарек мкртчян. зал 4
 

Viewers also liked

Urban agriculture intro
Urban agriculture introUrban agriculture intro
Urban agriculture intromlrazza
 
Graphic Design Services Company - MYQSOFT
Graphic Design Services Company - MYQSOFTGraphic Design Services Company - MYQSOFT
Graphic Design Services Company - MYQSOFTMYQSOFT
 
621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro
621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro
621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San IsidroBrest Fabian Dario
 
Intramedullary neurocysticercosis
Intramedullary neurocysticercosisIntramedullary neurocysticercosis
Intramedullary neurocysticercosisREKHAKHARE
 
Partes del cuerpo body parts
Partes del cuerpo   body partsPartes del cuerpo   body parts
Partes del cuerpo body partsFranklin Jesper
 
Ruby 1.9 Fibers
Ruby 1.9 FibersRuby 1.9 Fibers
Ruby 1.9 FibersKevin Ball
 

Viewers also liked (10)

BOLETIM INFORMATIVO - 2016
BOLETIM INFORMATIVO - 2016BOLETIM INFORMATIVO - 2016
BOLETIM INFORMATIVO - 2016
 
Urban agriculture intro
Urban agriculture introUrban agriculture intro
Urban agriculture intro
 
Graphic Design Services Company - MYQSOFT
Graphic Design Services Company - MYQSOFTGraphic Design Services Company - MYQSOFT
Graphic Design Services Company - MYQSOFT
 
621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro
621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro
621-HCD-2016 Proyecto de Decreto: Observatorio Legislativo del HCD de San Isidro
 
Mark-P-Hooper
Mark-P-HooperMark-P-Hooper
Mark-P-Hooper
 
Intramedullary neurocysticercosis
Intramedullary neurocysticercosisIntramedullary neurocysticercosis
Intramedullary neurocysticercosis
 
Tav 3
Tav 3Tav 3
Tav 3
 
Partes del cuerpo body parts
Partes del cuerpo   body partsPartes del cuerpo   body parts
Partes del cuerpo body parts
 
Ruby 1.9 Fibers
Ruby 1.9 FibersRuby 1.9 Fibers
Ruby 1.9 Fibers
 
Obezita u detí
Obezita u detíObezita u detí
Obezita u detí
 

Similar to Приложения в плагинах

Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковCodeFest
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаTatyanazaxarova
 
Presentation for students about Laravel.pptx
Presentation for students about Laravel.pptxPresentation for students about Laravel.pptx
Presentation for students about Laravel.pptxGetOverHere
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинSergey Xek
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Ontico
 
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают ADN Digital Studio
 
Ruby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработкиRuby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработкиMedia Gorod
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только одинHappyDev
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Александр Ежов
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25MoscowJS
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic appsDenis Izmaylov
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarova
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это былоMskDotNet Community
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Ontico
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Yandex
 

Similar to Приложения в плагинах (20)

Frontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиковFrontend: Путешествие в мир модульных загрузчиков
Frontend: Путешествие в мир модульных загрузчиков
 
Построение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кодаПостроение систем автоматического протоколирования Си/Си++ кода
Построение систем автоматического протоколирования Си/Си++ кода
 
Presentation for students about Laravel.pptx
Presentation for students about Laravel.pptxPresentation for students about Laravel.pptx
Presentation for students about Laravel.pptx
 
Javascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только одинJavascript-фреймворки:
 должен остаться только один
Javascript-фреймворки:
 должен остаться только один
 
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
Javascript-фреймворки: должен остаться только один / Аверин Сергей (Acronis)
 
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
Adn@it'summer - Как ленивые фронтенды себе жизнь упрощают
 
Sivko
SivkoSivko
Sivko
 
Highload 2011-demona
Highload 2011-demonaHighload 2011-demona
Highload 2011-demona
 
Ruby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработкиRuby on Rails снижаем стоимость разработки
Ruby on Rails снижаем стоимость разработки
 
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
2015-12-05 Сергей Аверин - Javascript-фреймворки: должен остаться только один
 
Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015Борьба с багами: RailsClub на DevConf 2015
Борьба с багами: RailsClub на DevConf 2015
 
Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)Viacheslav Eremin about DOT NET (rus lang)
Viacheslav Eremin about DOT NET (rus lang)
 
Invisible
InvisibleInvisible
Invisible
 
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
"Redux: the best for isomorphic apps", Денис Измайлов, MoscowJS 25
 
redux: the best for isomorphic apps
redux: the best for isomorphic appsredux: the best for isomorphic apps
redux: the best for isomorphic apps
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
Елизавета Голенок Переходим на mono или как это было
Елизавета Голенок  Переходим на mono или как это былоЕлизавета Голенок  Переходим на mono или как это было
Елизавета Голенок Переходим на mono или как это было
 
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
Разработка портируемой инфраструктуры New Relic — контейнеры, CoreOS и прочие...
 
Sonar quality
Sonar qualitySonar quality
Sonar quality
 
Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"Юрий Василевский "Автоматизация в XCode"
Юрий Василевский "Автоматизация в XCode"
 

More from Александр Ежов

Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуАлександр Ежов
 
Liquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRLiquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRАлександр Ежов
 
Антикризисная презентация
Антикризисная презентацияАнтикризисная презентация
Антикризисная презентацияАлександр Ежов
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийАлександр Ежов
 
Обзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsОбзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsАлександр Ежов
 
Использования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииИспользования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииАлександр Ежов
 
Интернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianИнтернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianАлександр Ежов
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsАлександр Ежов
 
Проблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gemПроблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gemАлександр Ежов
 

More from Александр Ежов (20)

Кеширование данных в БД
Кеширование данных в БДКеширование данных в БД
Кеширование данных в БД
 
Rails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changesRails 5: awesome features and breaking changes
Rails 5: awesome features and breaking changes
 
Big Data и Ruby
Big Data и RubyBig Data и Ruby
Big Data и Ruby
 
Abstract machines for great good
Abstract machines for great goodAbstract machines for great good
Abstract machines for great good
 
Rubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секундуRubt on Rails: 1000 запросов в секунду
Rubt on Rails: 1000 запросов в секунду
 
Liquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoRLiquor, Liquid и другие безопасные языки разметки в RoR
Liquor, Liquid и другие безопасные языки разметки в RoR
 
Vim or die
Vim or dieVim or die
Vim or die
 
Capistrano Rails
Capistrano RailsCapistrano Rails
Capistrano Rails
 
Умное кэширование в Rails
Умное кэширование в RailsУмное кэширование в Rails
Умное кэширование в Rails
 
Sphinx как база данных
Sphinx как база данныхSphinx как база данных
Sphinx как база данных
 
Emacs и Rails
Emacs и RailsEmacs и Rails
Emacs и Rails
 
Антикризисная презентация
Антикризисная презентацияАнтикризисная презентация
Антикризисная презентация
 
Eventmachine: структура evented-приложений
Eventmachine: структура evented-приложенийEventmachine: структура evented-приложений
Eventmachine: структура evented-приложений
 
Дэдлоки
ДэдлокиДэдлоки
Дэдлоки
 
Обзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для RailsОбзорное сравнение серверов приложений для Rails
Обзорное сравнение серверов приложений для Rails
 
Использования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложенииИспользования PgQ и Londste в rails-приложении
Использования PgQ и Londste в rails-приложении
 
Масштабирование в Rails
Масштабирование в RailsМасштабирование в Rails
Масштабирование в Rails
 
Интернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russianИнтернационализация и локализация Ruby on Rails. gem russian
Интернационализация и локализация Ruby on Rails. gem russian
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
Проблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gemПроблемы при работе с разными версиями Ruby и разными gem
Проблемы при работе с разными версиями Ruby и разными gem
 

Приложения в плагинах

  • 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/
  • 9. СТОИТ ./script/generate Проблемы, которые можно решить с помощью ln -s, решайте так. Возможный путь решения инъекции кода:
  • 10. ГЕНЕРАТОР ПОМОГАЕТ сам то пробовал такое? В рельсах есть генераторы. Помогают создать миграции с правильными timestamp Он же сгенерирует нужные пользовательские модели в которых будет стоять include PluginCode
  • 11. ПРИМЕРЫ РАБОТЫ Решение Задача стояла так: Есть источник данных, которые могут запаздывать на несколько минут. Вставить в несколько внутренних приложений код, который будет синхронизировать эти данные.
  • 12. SOURCE CLIENTВ плагине были контроллеры, к которым источник обращается для оповещения об обновлениях. В плагине спрятаны ActiveResource модели, умеющие обрабатывать данные с источника. ActiveRecord модели помещены с помощью генератора в приложение и в них включаются модули из плагина. Есть rake task-и для обновления по крону.А чего у других?
  • 13. DJANGO Самый близкий пример—Django на питоне. Все приложение состоит из ядра, в которое вставляются плагины—namespaces. Все модели соответственно в пространствах имен и никаких миграций.
  • 14. ИТОГИ •Контроллеры и шаблоны можно класть в плагины уже сейчас; •всякие хитрости вида перекрытия кода плагина пока толком недоступны; •ждем фишек в Rails 3.0