Последнюю пару месяцев совершенно нездорово балдею от Camping - изобретения _why.

В основном потому, что если Rails последнее время движется к инициализаторам, конфигураторам, дескрипторам и разворачивателям (и нещадно набирает при этом LOC), Camping движется в сторону прямо обратную - возвращение к lean&mean. Дабы питоновским товарищам было понятнее - Camping это наш web.py и paste в одном флаконе.

Будьте проще

Рельсовое приложение к которому даже не приступили это пара десятков папок, пять файлов инициализации и один файл настроек. Camping-app, к которому только приступили это

 Camping.goes :Blaggh

в одном файле. Поскольку полное веб-приложение на Ruby с таким тулкитом можно уместить в 300-400 строк кода, выходить за рамки этого файла в общем-то и необязательно.

Модельно

Camping сохраняет рельсовую ActiveRecord в полном обьеме. Более того - при столь плотной рабочей части становится еще более правильным держать 80 процентов рабочей логики именно в моделях. На месте даже миграции, которые автоматически выполняются при запуске.

Сервлетно

Контроллеры Camping по стилю - элементарные сервлеты с методами get, post и так далее. В связи с этим не возникает желания такие контроллеры раздувать. Помимо этого (и в отличие от web.py) роуты интегрированы в сами контроллеры; так как Ruby работает не с тупыми statements а с expressions – класс для наследования контроллера создается динамически:

 class EditArticle < R('/articles/(+.)/') 
	def get(slug)
		@article = Article.find_by_slug(slug)
		# показываем формочку
	end

	def post(slug)...
 end				

Маркабно

Для шаблонов используется Markaby, что действует прекрасно - вы видели в какой салат превращается ERB если надо вывести динамическое значение HTML-атрибута, к примеру? А в Markaby:

 div :id => @dynamic_id do ...

Если ERB - это наши позавчерашние “шаблоны для дизайнера”, то маб – это почти шаблоны динамических компонентов из Seaside, когда шаблон есть плоть и кровь приложения (но в то же время разумно отделен от него в отдельный модуль). При этом подключить ERB в качестве движка шаблонов - тоже дело одной минуты.

При наличии нормального CSS - дизайна преимущества над erb очевидны.

(Шура, вы будете смеяться) - Компонентно

Camping-приложения по стилю - WAR. То есть на одном сервере приложений (и на одной базе, и на одном Ruby-процессе - что нехило экономит ресурсы между прочим!) можно держать сколько угодно независимых аппликаций. Хочется внутри одного сервера блог, фотогалерею и wiki (разработанный кем-то еще) - нет проблем, если они написаны по-человечески то мешать друг другу они не будут. 4 базы заводить тоже не надо - все модели из-за своего пространства имен имеют префиксы, тоже автоматически. Запуск тоже элементарен:

 $ camping teopee.rb homes.rb tracker.rb gallery.rb ...

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

Более того, вы будете смеяться но он даже прокладывает роуты от одного приложения к другому.

Повесить на все эти приложения (включая чужую вики кстати!) общую аутентификацию или ешще какой подобный треш – вопрос одного модуля и трех команд include.

В противовес этому, Rails подобного совмещения нескольких приложений в одном Ruby-процессе не приемлет (у них ответ на все как два пальца - “купите еще сервер”). Ретранслирую - Camping это те самые Django apps, только в анном случае они действительно независимы друг от друга. Это позволяет использовать итеративный подход и делать из больших функциональных блоков отдельные мини-приложения.

Ключ на 2

Ну и самое главное - Camping делает Ruby прекрасно применимой для сайтов того масштаба, при котором содержание целого рельсового сервера - оверкилл, по деплою, по памяти, по всему. Об этом прекрасно написал Robert Hahn:

Or maybe you’re like me, and found yourself trying to figure out how to use this power drill to build something where only a jeweller’s screwdriver was really required.

Точнее для тех ситуации когда HTML – никак, Rails – слишком много, а от мысли о 5 маленьких PHP скриптах сводит зубы.

I don’t know about you but I’m having a ball.

Дабы не быть голословным

$ sudo gem install camping
$ sudo gem install bluecloth
$ svn co http://julik.textdriven.com/svn/tools/micro-apps/homes/app/
$ cd app; camping homes.rb

P.S. Следует следить за собой - код в Camping apps быстро становится по-перловски непонятным если слишком увлечься сокращением.