CMS on Rails: много вопросов, нужно ваше мнение

31 views
Skip to first unread message

zoz...@gmail.com

unread,
Jan 28, 2009, 7:12:29 AM1/28/09
to RubyOnRails to russian
Добрый день!

В компании, где я работаю, приняли решение (наконец!), что текущая CMS
устарела и дальнейшее её сопровождения - тупик. Не удивительно - она
ещё на ASP (не .NET) была написана.

Начав чуть больше полу года назад работать с Ruby on Rails (над своим
проектом snowdb.com), я активно пропагандировал использование этой
технологии для дальнейших разработок. В общем, принято решение,
разрабатывать новую CMS на Ruby on Rails. Собственно, этим я и буду в
ближайшем будущем заниматся.
А пока у меня есть некоторое кол-во вопросов, как лучше реализовать
некоторые принципиальные моменты.

Наверное, все сайты, которые будут работать на этой CMS, можно
разделить на две части: стандартная функциональность и <<расширенная>>,
которая будет разрабатыватся под конкретный проект. При этом,
очевидно, есть желание регулярно обновлять во всех проектах <<основную>>
часть, как только в ней появилось что-то новое, или исправилось
старое.

Первое, что приходит в голову - оформить <<основную>> часть, как плагин
и ставить его во все проекты. Пока что мне не приходилось самому
писать плагинов и глубоко в этот вопрос я не влезал. Однако, насколько
я знаю, не всё можно вынести в плагин. Напрмер модель - нельзя. Помимо
этого, <<основная часть>> будет содержать не мало таких вещей, как
достаточно массивные JS-файлы (бэкофис будет на ExtJS) и другие
статический файлы. Их выносить в плагины тоже, насколько я понимаю,
даже если и возможно, то неудобно?

Была масль оформить это всё в виде плагина, который с помощью
различных генераторов ставит в проект все необходимые файлы и
расширения. Но как тогда следить за версионностью и изменениями,
которые были сделаны от отной до другой версии <<основной>> части?

Как поступить с разработкой плагина? Насколько я понимаю, разработка
кода плагина гораздо менее удобна, чем кода основного приложения? Там
не всегда (если вообще) работает отладка и не весь код обновляется
сразу (без перезапуска приложения) даже в development environment?

Я понимаю, что мне не удалось сформулировать четкие вопросы, на
которые вы мне можете ответить, однако мне было бы очень интересно
услышать ваши, прифессиональные и более опытные советы и рассуждения
на эту тему. Как лучше решить мою задачу?

Я сильно впечатлен красотой и изяществом всего мира ruby и очень не
хочу, что бы мне снова пришлось завязываться на некрасивые и
неприятные (как минимум, лично мне) технологии типа .NET, PHP...

Большое спасибо!

leonid bugaev

unread,
Jan 28, 2009, 7:25:41 AM1/28/09
to ror...@googlegroups.com
Added app/[models|controllers|helpers] to the load path for plugins that has an app directory (go engines ;)) [DHH]
http://github.com/rails/rails/commit/63d8f56774dcb1ea601928c3eb6c119d359fae10#comments

Генератор не надо, с этим функционалом станет намного проще такой подход использовать.

28 января 2009 г. 15:12 пользователь zoz...@gmail.com <zoz...@gmail.com> написал:

Dmitri Lifshits

unread,
Jan 28, 2009, 7:38:36 AM1/28/09
to ror...@googlegroups.com
Спасибо!

С помощью вышей ссылки нашел http://rails-engines.org/ - изучаю...

28 января 2009 г. 15:25 пользователь leonid bugaev <leon...@gmail.com> написал:

leonid bugaev

unread,
Jan 28, 2009, 7:42:57 AM1/28/09
to ror...@googlegroups.com
Стой! Не используй http://rails-engines.org/, это сторонняя разработка, которая постоянно отваливается и глючит. Используй только официальную версию.

28 января 2009 г. 15:38 пользователь Dmitri Lifshits <zoz...@gmail.com> написал:

Maxim Alex. Pechnikov

unread,
Jan 28, 2009, 7:43:52 AM1/28/09
to RubyOnRails to russian
По поводу обновление общей части проектов пользуюсь git.
Вот хорошее описание как это делать.
http://www.html-blog.ru/2008/10/1/git-project-support
спасибо Декарту.

On 28 янв, 17:38, Dmitri Lifshits <zoz...@gmail.com> wrote:
> Спасибо!
>

> С помощью вышей ссылки нашелhttp://rails-engines.org/- изучаю...
>
> 28 января 2009 г. 15:25 пользователь leonid bugaev <leons...@gmail.com> написал:


>
> > Added app/[models|controllers|helpers] to the load path for plugins that has
> > an app directory (go engines ;)) [DHH]
>

> >http://github.com/rails/rails/commit/63d8f56774dcb1ea601928c3eb6c119d...

Dmitri Lifshits

unread,
Jan 28, 2009, 7:45:22 AM1/28/09
to ror...@googlegroups.com
Эм... я пока вообще не хорошо понимаю, о чем идет речь.
Предполаю, что этот engine - некий плагин, который позволяет делать
то, что сейчас добавили в EDGE?
В любом случае, почитаю, для поиска интересных идей.
Спасибо за предупреждение!

28 января 2009 г. 15:42 пользователь leonid bugaev <leon...@gmail.com> написал:

Dmitri Lifshits

unread,
Jan 28, 2009, 7:46:33 AM1/28/09
to ror...@googlegroups.com
Да, все проекты планирую класть в GIT. Хотя, начальство может начать
противится против отказа от привычного SVNа, буду на этом настаивать.
Спасибо - почитаю.

28 января 2009 г. 15:43 пользователь Maxim Alex. Pechnikov
<paral...@gmail.com> написал:

Marat Karimov

unread,
Jan 28, 2009, 10:22:49 AM1/28/09
to ror...@googlegroups.com
http://github.com/tog/tog/tree/master
и по пользователям
http://github.com/tog
http://github.com/suratpyari
http://github.commolpe
http://github.commjuneja

основное предназначение социальные сети но очень хорошо организована
система плагинов - можете либо использовать либо взять на заметку
организацию

2009/1/28 zoz...@gmail.com <zoz...@gmail.com>:

Julik Tarkhanov

unread,
Jan 28, 2009, 3:02:55 PM1/28/09
to ror...@googlegroups.com
On Jan 28, 2009, at 1:12 PM, zoz...@gmail.com wrote:

Была масль оформить это всё в виде плагина, который с помощью
различных генераторов ставит в проект все необходимые файлы и
расширения. Но как тогда следить за версионностью и изменениями,
которые были сделаны от отной до другой версии <<основной>> части?

Следующим образом (по крайней мере такой подход выбрал я). 
Плагины версионировать и выкатывать как гемы, а дальше делать следующий трюк в рельсовом конфиге

config.gem "superkampanent_numer_adyn", :version => "0.2.0", :source => "http://nash-server-kampanentaff-dlya-ziimesky.ru/gems"
config.after_initialize do
     SuperkampanentAdyn.init!
end

Для этого полезно иметь свой gem server (то бишь просто папку на сервере).
Это не решает проблем типа установки плагиновских рейк-тасков, но на первое время этого хватает (ты получаешь встроенное управление
зависимостями от rubygems).


Как поступить с разработкой плагина? Насколько я понимаю, разработка
кода плагина гораздо менее удобна, чем кода основного приложения? Там
не всегда (если вообще) работает отладка и не весь код обновляется
сразу (без перезапуска приложения) даже в development environment?

Тану. Все там обновляется, а перезапуск тебе не нужен потому что как правило плагин
делается вслепую, test driven. Пример хелпера чтобы тестить плагин:


Первые 30 строк бутстрапят тебе все что нужно чтобы гонять в изолированной ситуации ActiveRecord с определенной базой.

Я понимаю, что мне не удалось сформулировать четкие вопросы, на
которые вы мне можете ответить, однако мне было бы очень интересно
услышать ваши, прифессиональные и более опытные советы и рассуждения
на эту тему. Как лучше решить мою задачу?

Взять готовый велосипед, видимо.


Ну или там desert, engines.

Но там где рельсовики слышат слова "CMS" и "component" все как правило закрываются веерами и говорят "дурно мне дурно",
хотя на самом деле надо то всем и часто. Это посконное но реальное.

Помимо
этого, <<основная часть>> будет содержать не мало таких вещей, как
достаточно массивные JS-файлы (бэкофис будет на ExtJS) и другие
статический файлы. Их выносить в плагины тоже, насколько я понимаю,
даже если и возможно, то неудобно?

Ты с этим делом аккуратнее, за extjs ващето платить надо - и немалые деньги.
Выносить не очень удобно поскольку это надо делать статикой - а ее надо выплевывать в рут как никак.

Можно из плагина вывесить в руты свой контроллер assets который после первого хита выплевывает в public
нужные детальки нужной версии.

По поводу управления своей системой библиотек гемами есть на confreaks какая-то презентация, но в общем и целом
это совершенно несложно.

P.S. знаю что меня закидают гнилой капустой - но у 90 процентов админо-цмсно-компонетных проектов чудовищный
английский в документации и readme, и большинство разработчиков из _стран_. Что наталкивает на мысль что в стандартной
рельсовой экосистеме (сильно американизированной) таки закрываются веером, потому что на конкретную задачу конкретное
приложение. И поделом - гнусное это дело, цмски для всего. Паганое. Нужно как правило либо ненавидимому суперэнтерпрайзу
либо не менее ненавидимой "миграции с пыхыпы".


-- 
Julik Tarkhanov





Max Lapshin

unread,
Jan 28, 2009, 3:37:40 PM1/28/09
to ror...@googlegroups.com
А я против версионированных гемов. С таким подходом очень тяжело вносить мелкие правки в процессе развития базового приложения.

Julik Tarkhanov

unread,
Jan 28, 2009, 5:04:10 PM1/28/09
to ror...@googlegroups.com
А это разница в стратегии. Я лучше
напрягусь на 10 минут починить гем и
выкатить его по новой, чем запатчу что-
то левой ногой в svn trunk а потом выясню
что еще три аппы сломались из-за этих
изменений на ближайшем cap deploy. Это next step
после svn externals просто :-) и возникает он
когда externals создают аццкий бардак
--
Julik Tarkhanov
m...@julik.nl





Oleganza

unread,
Jan 28, 2009, 5:43:13 PM1/28/09
to ror...@googlegroups.com
В принципе, если использовать git submodules,
то можно зацепляться за номер коммита
или тег, что гораздо проще, чем
редеплой гема. А аккуратность та же.

Julik Tarkhanov

unread,
Jan 28, 2009, 5:58:27 PM1/28/09
to ror...@googlegroups.com
On Jan 28, 2009, at 11:43 PM, Oleganza wrote:

> А аккуратность та же.


Вопрос вкуса. На мой взгляд гем нам
роднее чем гит.
--
Julik Tarkhanov
m...@julik.nl





Oleganza

unread,
Jan 28, 2009, 6:16:01 PM1/28/09
to ror...@googlegroups.com

On 28 janv. 09, at 23:58, Julik Tarkhanov wrote:

> Вопрос вкуса. На мой взгляд гем нам
> роднее чем гит.

согласен. Но версионирование гемов
гиморнее. Поэтому я и думал о гит-гемах,
когда можно заказать что-то вроде:

gem "blah-blah", "=abf46fae6742b78fe8ee9b8e6742b78f9b3"

а сами гемы - вычекнуты из гит-
репозиториев. Идея прикольная, но я
пока не уверен до конца в
необходимости такой фичи.

Oleg...@gmail.com

unread,
Jan 28, 2009, 6:20:32 PM1/28/09
to RubyOnRails to russian

> а сами гемы - вычекнуты из гит-
> репозиториев. Идея прикольная, но я  
> пока не уверен до конца в  
> необходимости такой фичи.

А, вот только что увидел во френдленте гитхаба:

http://github.com/mislav/coral/tree/master

Проекту два дня от силы.

Val

unread,
Jan 28, 2009, 6:24:28 PM1/28/09
to RubyOnRails to russian
Напомнило как пару лет назад мы построили систему dev->qa->prod на
оснве гем-серверов, все компоненты были ввиде гемов (включае само
рельсовое приложение), и когда приложение было готово к QA, скрипт
собирал все версии гемов, забрасывал их на QA гем-сервер. Когда QA
давал добро, то же скрипт промоутил с QA в prod.


On Jan 28, 5:04 pm, Julik Tarkhanov <julian.tarkha...@gmail.com>
wrote:

Max Lapshin

unread,
Jan 29, 2009, 1:37:24 AM1/29/09
to ror...@googlegroups.com


2009/1/29 Julik Tarkhanov <julian.t...@gmail.com>


А это разница в стратегии. Я лучше
напрягусь на 10 минут починить гем и
выкатить его по новой, чем запатчу что-
то левой ногой в svn trunk а потом выясню
что еще три аппы сломались из-за этих
изменений на ближайшем cap deploy. Это next step
после svn externals просто :-) и возникает он
когда externals создают аццкий бардак

Как верно сказали, не пользуйся subversion-ом =), а во-вторых, речь идет не о 10 минутах.
Речь идет о реализации какой-то новой функциональности, которую приходится править и девелопить.



Dmitri Lifshits

unread,
Jan 29, 2009, 5:53:13 AM1/29/09
to ror...@googlegroups.com
> Для этого полезно иметь свой gem server (то бишь просто папку на сервере).
> Это не решает проблем типа установки плагиновских рейк-тасков, но на первое
> время этого хватает (ты получаешь встроенное управление
> зависимостями от rubygems).

Как и многим тут, мне тоже на первый взгляд больше нравится идея с
GIT'ом, т.к. это позволяет при разработке одного из приложений,
использующего что-то базовое, сразу вылить какие-то изменения в это
базовое. Ну и так же это это более динамично, что ли. Не надо собирать
гемы, обновлять.

> Тану. Все там обновляется, а перезапуск тебе не нужен потому что как правило
> плагин делается вслепую, test driven. Пример хелпера чтобы тестить плагин:
> http://github.com/julik/make_like_a_tree/blob/658119c0004bb9dfef43acef7754c557e9cd4c5a/test/test_ordered_tree.rb
> Первые 30 строк бутстрапят тебе все что нужно чтобы гонять в изолированной
> ситуации ActiveRecord с определенной базой.

TTD это одно, а быстрый подхват изменений и дебаг, это другое. Только
что проверил - дебаг работает, изменения без рестарта не
подхватываются (Ubuntu 8.10, NetBeans), так что это проблема.

Насколько я понимаю, эти 30 строк кода создают тестовые данные, что бы
прогнать по нима тесты? Чем мне это поможет?

Сел за изучение, спасибо!

> Ну или там desert, engines.
> Но там где рельсовики слышат слова "CMS" и "component" все как правило
> закрываются веерами и говорят "дурно мне дурно",
> хотя на самом деле надо то всем и часто. Это посконное но реальное.

Ну вот про engines Леонид мне выше советовал не связыватся с ними...

> Ты с этим делом аккуратнее, за extjs ващето платить надо - и немалые деньги.

Эм... Насколько я понимаю, до 289$ за разработчика?
(http://extjs.com/store/extjs/)
Так что, не вижу больших проблем.

> Выносить не очень удобно поскольку это надо делать статикой - а ее надо
> выплевывать в рут как никак.
> Можно из плагина вывесить в руты свой контроллер assets который после
> первого хита выплевывает в public
> нужные детальки нужной версии.

Примерно ясно, но хотелось бы что-то покрасивее :(

> По поводу управления своей системой библиотек гемами есть на confreaks
> какая-то презентация, но в общем и целом
> это совершенно несложно.
> P.S. знаю что меня закидают гнилой капустой - но у 90 процентов
> админо-цмсно-компонетных проектов чудовищный
> английский в документации и readme, и большинство разработчиков из _стран_.
> Что наталкивает на мысль что в стандартной
> рельсовой экосистеме (сильно американизированной) таки закрываются веером,
> потому что на конкретную задачу конкретное
> приложение. И поделом - гнусное это дело, цмски для всего. Паганое. Нужно
> как правило либо ненавидимому суперэнтерпрайзу
> либо не менее ненавидимой "миграции с пыхыпы".

В общем-то, да. И в нашем случае это примерно и то и то. Только не
супер и было ASP вместо PHP. Но бизнес никто менять не будет из-за
того, что Rails-сообществу не нравится то, для чего используют их
творение. Согласен, что это не самое "благородное" использование, но
такова задача.

И мне бы хотелось её решать именно на ruby.

Большое спасибо за ваш ответ!

leonid bugaev

unread,
Jan 29, 2009, 6:05:49 AM1/29/09
to ror...@googlegroups.com
Это было к тому что engines уже не нужны, так как этот функционал появился в основной ветке. А так я ими сам активно ими пользовался в свое время.

29 января 2009 г. 13:53 пользователь Dmitri Lifshits <zoz...@gmail.com> написал:

Sergei

unread,
Jan 29, 2009, 10:31:56 AM1/29/09
to RubyOnRails to russian
> Первое, что приходит в голову - оформить <<основную>> часть, как плагин
> и ставить его во все проекты. Пока что мне не приходилось самому
> писать плагинов и глубоко в этот вопрос я не влезал. Однако, насколько
> я знаю, не всё можно вынести в плагин. Напрмер модель - нельзя. Помимо
> этого, <<основная часть>> будет содержать не мало таких вещей, как
> достаточно массивные JS-файлы (бэкофис будет на ExtJS) и другие
> статический файлы. Их выносить в плагины тоже, насколько я понимаю,
> даже если и возможно, то неудобно?

С текущей версией рельс в плагин можно добавлять не только модели, но
и контроллеры, и даже маршруты. Я этим активно пользуюсь в своих
плагинах/гемах, и даже выдаю CSS и JavaScript прямо изнутри плагина
(т.е. не используя генераторы, что, конечно, очень здорово). Хорошо
все расписано на официальной странице рельс: http://guides.rubyonrails.org/creating_plugins.html
(не знаю, переведено ли это где-то на русский).

Что касается бэкэнда, рекомендую взглянуть на Netzke, мой
развивающийся фреймворк, предназначенный прежде всего как-раз для
этого: бэкэнды на Rails+ExtJS. Живое демо здесь: http://netzke-demo.writelesscode.com/

Удачи!

Reply all
Reply to author
Forward
0 new messages