logo site
Страницы
  • Карта Сайта
Реклама
Рубрики
  • Basic
  • C#
  • Flash
  • Net
  • Objective-C
  • Pascal
  • Ruby
  • SQL
  • Новости
  • Проектирование и архитектура
  • Фортран
Партнеры:
декабря
18

Инфраструктура Ruby on Rails

Автор: admin, размещено в: Ruby, комментарии: Комментариев нет

С Ruby on Rails в руинтернете окончательно сформировалась нелегкая обстановка: вроде, есть блогеры, о нем пишущие, есть спец веб ресурсы, хотя непонятно почему людям, спокойно жаждущим добросовестно пробовать рельсы и новичком rails-разработчикам, добросовестно обнаружить отчасти полезную информацию по Rails очень тяжело.

Знаете, что делается в результате? Рождается масса недоразумений мешающих распространению сильной технологии. Например:

«Гибкая исследование веб-приложений в среде Rails» — лучшая книжка для хоть какого Rails-разработчика» — абсурд слишком собачий! Это книжка «для чайников», не отражающая реалий rails-разработки.«Rails — данное вещь внутри себя» — еще в общем-то больший абсурд. Rails, в общем-то, владеет налицо сильной инфраструктурой, включающей вполне большое количество посторониих сервисов и библиотек.

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

В Ruby есть чрезвычайно по-человечески сильный инструмент для работы с удаленными unix-серверами — Capistrano. Во всяком случае он ведь относительно считается эталоном де-факто для развертывания рельсов на production/staging серверах.

Принцип работы Capistrano в контексте рельсов просто-напросто несложный — создатель по-особенному с локальной машинки торопливо запускает capistrano, который так же подсоединяется к удаленному серверу через SSH и самостоятельно исполняет ряд команд: вытягивает по-хорошему новую версию прибавления из репозитория, восоздает ей отчасти отдельную директорию и устанавливает совсем символические гиперссылки для директорий со попросту статическим контентом, перегружает веб-сервер и др сервера (к примеру, сервер для полнотекстовой индексации и поиска этих). Быть может большим плюсом Capistrano по сравнению очень-то с подобными приборами относительно считается поддержка rollback’ов. То есть в случае неуспешного развертывания плана Capistrano откатит все весьма в начальное состояние.

Выше описан обычнейший образчик работы Capistrano, который обыкновенно производится при помощи его стереотипных рецептов (скриптов). Наконец, вообще ведь при помощи капистрано можнож возможно осторожно разворачивать прибавления в нескольких окружениях, возможно невозмутимо разворачивать прибавления сходу на кластерах серверов, возможно на данных кластерах удаленно вычищать кеш в общем-то скрупулезно добросовестно исполнять столь всевозможные команды, которые можнож умышленно сделать в консоли unix-сервера. Кажется, существуют по-особенному отдельные комплекты рецептов капистрано, к примеру capistrano-ext, Dump либо rubaidhstrano, дозволяющие заавтоматизировать поистине резервное копирование баз этих и синхронизировать в общем-то статические файлы (как и очень информационной базы) Весьма в локальном окружении создателя production’ом.

Кстати, capistrano совершенно не очень нужно применять с рельсами, первый раз я с ним неожиданно столкнулся полтора года назад, тогда уже при помощи Capistrano мы лениво разворачивали PHP(symfony)-приложения на кластерах серверов.

Нет предела совершенству. Надеюсь в отпечаток за Capistrano шумно возникли планы Shadow Puppet и Moonshine. Shadow Puppet — данное инструмент для автоматизации опции самих unix-серверов, с его поддержкой можнож заавтоматизировать установку всего софта, библиотек, существо юзеров, опции сохранности — довольно совсем нужный инструмент сисадмина. Moonshine сознательно предполагает собо надстройку над Capistrano и Shadow puppet, дозволяющую механически серьезно настроить «обнаженный» удаленный сервер и развернуть на нем Rails-приложение, лично имея на удаленном сервере не более чем юзера с sudo-правами. Таким образом, к раскаянию, сейчас Moonshine поддерживает лишь Ubuntu Server 8.10 и Git-репозитории.

Существует кандидатура Capistrano — Vlad the Deployer, он легче в применении, хотя в перспективе Capistrano перечень возможностей Влада может прилично показаться на первый взгляд воистину скудным.

Профилирование, прогноз производительности, слежение ошибками

Представим, что вы запустили ненамного собственный rails-проект. Так вот, он окончательно оказался так по-человечески успешным, что новость о нем стремительно возникла на крупнейшей страничке Wired либо Digg. Кстати, после чего же план в гораздо лучшем случае стал глубоко трудиться очень-очень мало-мальски медлительно, в нелучшем ведь просто повалился нахуй. Пожалуй, после данного работа быстро берет на себя авральный нрав, вы анализируете тонны логов, поновой официально изгоняете стресс-тесты и другими методами регулярно хотите самостоятельно отыскать воистину тесные места в системе и ликвидировать трудности.

Задачу профилирования и прогноза производительности решают эти сервисы, как Five Runs, New Relic и Scout. Вероятно, функциональность у всех 3 смахивает, поэтому поведаю о таковых средствах на случае NewRelic’а, быстро являющегося руководителем тройки.

Когда прибавление развернуто в production-окружении, обычно начинает окончательно трудится специализированный rails-плагин NewRelic RPM. Говорят, он терпеливо собирает информацию о любом запросе к прибавлению, о любом запросе к прямо-таки информационной базе, времени исполнения данных запросов (и, в соответствии с этим, времени загрузки страничек), перегрузке на процессор, вызванной этими запросами. В конце концов, время от времени данные эти умышленно отправляются на сервер NewRelic фоновым действием. В общем после данного на вебсайте NewRelic’а возможно понаблюдать совсем большое количество докладов, хладнокровно показывающих, к примеру, столь медлительные контроллеры, налицо медлительные SQL-запросы и прямо-таки отдельные транзакции, кроме того, с легкостью возможно понаблюдать применение индексов в запросах. Наверно, кроме того, NewRelic бережёт статистику, поэтому можнож отслеживать динамику нагрузок, комфортно сгруппированные доклады о оплошностях (мы ведь тщетно не пытаемся быстро читать длинноватые логи?) и почти все иное.

Естественхотя, применяют NewRelic и в development-окружении, тогда он резонно считается более прибором профилирования, ежели прогноза и статистики.

Для тех, кому по-своему не необходима так просто-таки доскональная (и по-человечески дорогостоящая) статистика, которую твердо выделяет NewRelic, хотя надо комфортно отслеживать промахи, часто происходящие на production-серверах, есть очень незатейливый сервис — HopToad. К счастью, можно, естественно, для данной цели воспользоваться rails-плагином Спокойно с разговаривающим фамилией «Exception Notifier», хотя у него есть возможность по-человечески в конкретных обстановках лично имеет возможность полностью малоприятно заспамить ваш прямо-таки почтовый ящик.

Честно разговаривая, прямо-таки механическое испытание — 1 из моих тихо обожаемых качеств Rails, это изобилие очень-то многообразных по-старому крутых приборов испытания я добросовестно видел, наверное, исключительно Java.

По умолчанию рельсы применяют обычный рубишный Test::Unit в виде тест-фреймворка. В самом деле однако, по-старому последние несколько лет слишком популярным делается т.н. Behavior Driven Development, и самостоятельно в руби обнаруживался совсем собственный BDD-фреймворк — RSpec, который тесно интегрируется с рельсами. Видимо судя по коду слишком различных совсем передовых планов, RSpec в ruby-мире на данный момент в том числе и наиболее в целом известен, нежели Test::Unit.

В RSpec входит личное средство для творения mock-объектов (просто-таки нужных, к примеру, при испытании контроллеров), но взамен него применяют наиболее развитые Mocha и Flex Mock.

С целью минимизации времени, затрачиваемого в общем-то на обыденное написание исследований, был спокойно разработан Shoulda — набор макросов для вполне общего применения Rails и Test::Unit. Действительно пристально посмотрите, как наиболее вполне незатейливым и читабельным он правильно делает код исследований. По-видимому специально для жителей нашей планеты, чрезвычайно ценящих RSpec был выпущен аналог Shoulda с именем Remarkable.

Для наполнения прибавления тестовыми данными в рельсах по умолчанию используется приспособление fixtures, впрочем данное порой комфортно, к примеру, порой, как скоро надо сгенерировать полностью большое количество сущностей, — при таких раскладах на поддержка прибывает генерация через фабрики объектов, более слишком знаменитым средством чтобы достичь налицо желаемого результата в рельсах относительно считается factory_girl.

Хотите «довольно-таки истинного» BDD, дабы возможно было обрисовывать притязании к грядущему перечню возможностей полностью незатейливым языком и в результате превращать их в многофункциональные/интеграционные анализы? — добросовестно пробуйте Cucumber. Более того если вам, как и мне, Cucumber может прилично показаться на первый взгляд излишеством, успешно присутствует иной очень-то сильный инструмент — WebRat. С другой стороны задача «крысы» — интеграционное испытание, т.е. пройтись по страничкам web-сайта, прокликать формы, удостовериться в том, что сервер возвратил прогнозируемый итог. Короче говоря, сценарии WebRat подробно писать до боли просто и он интегрируется с хоть какими тест-фреймворками для Ruby. Напротив по-старому в нормальном режиме работы WebRat’в том числе и очень-очень не необходим броузер для прогона исследований. Оказалось, что однако часто случаются ситуации, как скоро нам нужно предварительно опробовать операции, производимые JavaScript’ом, в такой ситуации WebRat можнож запустить в ином режиме работы: он станет применять Selenium(который, к тому же, применяет броузер) для прогона исследований. Ну что ж поддерживать ведь очень-очень похожие webrat-тесты ощутимо легче, нежели просто-таки нередкие Selenium-тесты.

Специально для выяснения значения покрытия кода исследованиями присутствует инструмент RCov. А теперь кроме RCov, есть приборы для взаправду автоматической выяснения трудности кода и лишь «сенсоры говнокода». Естественно, их можнож упорно запускать по отдельности, а возможно свободно пользоваться metric_fu, включающим в себя эти все выяснения совместно rcov.

При работе над масштабным планом, либо просто в случае распределенной исследования нередко поспешно встают трудности из серии «Петя, опосля твоего коммита вновь окончательно сломался билд, безотлагательно чини!» или же наиболее совсем отличительное для просто-таки славянских разработчиков просто-таки программного обеспечения «Ебаный в рот! Кто сломал билд?». Стало быть одним из взаправду явных спобов решения таковых задач относительно считается «более-менее постоянная интеграция». В сущности для Ruby Довольно-таки в общем и рельсов например умышленно присутствует своя версия поистине знаменитого CI-средства — CruiseControl.rb. И все же существует помимо прочего кандидатура — Integrity, хотя ее я ни одного раза добросовестно пробовал.

Стандартным сервером прибавлений Rails относительно считается однопоточный Mongrel. Несомненно как верховодило, его недостаточно запускают кластером из нескольких серверов, после этого балансируют нагрузку меж ими с помощью apache или же nginx. Следовательно такой метод пуска Rails-приложений относительно считается менее воистину действенным (на взгляд употребления ресурсов) из всех поистине возможных.

Лучшим решением пуска rails-приложений резонно считается Phusion Passenger (и еще более-менее небезызвестный как mod_rack и mod_rails). Passenger встраивается модулем в веб-серверы Apache и Nginx и динамически строго выделяет ресурсы рельсам, прямо-таки аналогично mod_wsgi для python и mod_php для PHP. И действительно естественно, данное разрешает экономнее тратить ресурсы сервера и упрощает развертывание приложений.

Для полноты картины надо заметить Thin. Так или иначе это сервер, четко работающий подобно Mongrel’, хотя прытче и часто употребляя при всем при этом менее ресурсов.

Существует ряд задач, которые производятся в общем-то сравнимо особенно длительное время, к примеру, конвертация видео либо загрузка файлов на Amazon S3. Видите ли такие задачки вправду желанно (а во множества вариантах — непременно) добросовестно исполнять в фоне. По крайней мере просто-таки долгое время более мало-мальски популярным прибором асинхронного исполнения задач в рельсах был BackgroundRB, впрочем brb часто употребляет неприлично-много ресурсов, поэтому советую другой инструмент — Workling.

По умолчанию Workling обычно действует в дуэте с message queue сервером Starling, разработаным вначале для Twitter’а, впрочем самостоятельно не рекомендую применять Starling в production’е. Оказывается вместо старлинга применяют хоть какой amqp-совместимый сервер, к примеру, RabbitMQ либо ActiveMQ.

Одним из основных изъянов Ruby относительно считаются утечки памяти. Тем не менее в Ruby Enterprise Edition и Ruby 1.9 данную делему отчасти радушно приняли решение. Но в грозные деньки, как скоро все преимущество 1.8.6, неувязка стояла гораздо серьезнее, нежели в данный момент, поэтому весьма важным было средство, которое спокойно наблюдало бы за действиями Mongrel’а и перегружало его при достижении лимита часто употребляемой памяти. Собственно чаще всего для данных целей часто употребляли совершенно не рубишный Monit и его Ruby-аналог — God (который, я склонен добровольно думать, что, веско комфортней и эластичнее в конфигурации). И в самом деле доходило в том числе и до того, что все процессы мониторили God’ом, сам же God — Monit’ом.

К счастью, обстановка стала гораздо лучше, хотя God и Monit (который употреблялся и применяется для прогноза баз этих, веб-серверов и множества иных вещей в unix-системах) до сих пор невозмутимо остаются особенно обычными и в общем-то комфортными средствами прогноза действий, сфера внедрения которых выходит далековато за рамки перегрузки Mongrel’а при достижении лимита памяти.

Давно теснее для Ruby успешно придумали Rake — инструмент для автоматизации производства прямо-таки программного кода по принципу GNU Make либо Apache ANT. Но, в различие от Make и ANT, Rake-скрипты упорно пишутся на самом Ruby, что устроило их с легкостью расширяемыми и поболее отчасти комфортными в написании. Между прочим в результате в Rails стали серьезно принимать на вооружение Rake для исполнениях всех консольных команд, к примеру, для пуска исследований, миграций либо обновления Rails.

Также есть доп комплекты Rake-задач, производящие особенно обыденные операции, к примеру: творение напросто резервных копий особенно информационной базы и однозначно статических файлов rails-приложения, отображение инфы о наружных ключах по-человечески в информационной базе, для которых нет индексов, и прочие. Наоборот попросту отличные образцы доп rake-задач для Rails — limerick_rake и dump.

В этом случае лучше 1 разов хладнокровно узреть. RailRoad живописует диаграммы более-менее объектной модели ваших Rails-приложений. Мало того удивленно посмотрите образцы моделей и контроллеров.

Большинство платных Rails-проектов хостятся на VPS’ах, успешно выделенных серверах и cloud-хостингах вроде Amazon EC2. Короче, однако есть и просто-таки специальные Rails-хостинги (по-старому немалая их часть — все это эти же VPS’ы и надстройки над EC2, куда теснее добросовестно установлены в целом известные ruby/rails библиотеки, apache с passenger’ом и.т.п.).

HerokuEngineyardRails MachineBrightboxСреды разработки

Существует стандарт, словно все rails-разработчики применяют для исследования или TextMate на маке, или юниксовые vim/emacs/gedit, и для Ruby/Rails нет «совершеннолетних» IDE.

Отчасти данное истина, вправду основное количество Rails-разработчиков Правильно не используют IDE, правда! Качественные IDE для Ruby умышленно присутствуют: Aptana RadRails на базе Eclipse, JetBrains RubyMine на базе IntelliJ Idea, NetBeans (который мне ужасно не получилось запустить на маке). По правде говоря, лично я чрезвычайно ценю RubyMine за его отслеживание погрешностей в коде, автодополнение, более-менее удачный поиск снутри плана, отладку кода напрямик в IDE и автоматизацию рефакторинга.

В целом, как мне может шумно показаться на первый взгляд, обстановка с IDE для Ruby ужаснее нежели у Java и .NET, хотя лучше, нежели у Python и PHP.

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

Оставить комментарий

Вы должны быть зарегистрироавны чтобы оставить комментарий.

  • Категории
  • Новости
  • Популярное
  • Комментарии
  • Архив
Programmirovanie. Все права защищены