<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Superблог компании LOCUM &#187; gem</title>
	<atom:link href="http://locum.ru/blog/tag/gem/feed" rel="self" type="application/rss+xml" />
	<link>http://locum.ru/blog</link>
	<description></description>
	<lastBuildDate>Thu, 26 Mar 2015 11:44:11 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Разворачиваем rails-приложение правильным и удобным методом</title>
		<link>http://locum.ru/blog/hosting/%d1%80%d0%b0%d0%b7%d0%b2%d0%be%d1%80%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-rails-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d1%8b</link>
		<comments>http://locum.ru/blog/hosting/%d1%80%d0%b0%d0%b7%d0%b2%d0%be%d1%80%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-rails-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d1%8b#comments</comments>
		<pubDate>Fri, 28 Jan 2011 14:38:27 +0000</pubDate>
		<dc:creator><![CDATA[freeman]]></dc:creator>
				<category><![CDATA[Хостинг]]></category>
		<category><![CDATA[capistrano]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>
		<category><![CDATA[unicorn]]></category>

		<guid isPermaLink="false">http://blog.locum.ru/?p=187</guid>
		<description><![CDATA[В этой статье я расскажу как проще и удобнее всего разворачивать приложения на ruby on rails на нашем хостинге. Используя эту инструкцию вы сэкономите время и легко обнаружите ошибки, которые могут возникать при развертывании Rails-приложений. Так же будет информация о самых частых проблемах и о том, как их избежать. Описанный метод так же подходит и [&#8230;]]]></description>
				<content:encoded><![CDATA[<p><a rel="attachment wp-att-201" href="http://blog.locum.ru/hosting/%d1%80%d0%b0%d0%b7%d0%b2%d0%be%d1%80%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-rails-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d1%8b/attachment/rails"><img class="aligncenter size-full wp-image-201" title="rails" src="http://blog.locum.ru/wp-content/uploads/2011/01/rails.png" alt="" width="600" height="401" /></a></p>
<p>В этой статье я расскажу как проще и удобнее всего разворачивать приложения на ruby on rails на нашем хостинге. Используя эту инструкцию вы сэкономите время и легко обнаружите ошибки, которые могут возникать при развертывании Rails-приложений. Так же будет информация о самых частых проблемах и о том, как их избежать. Описанный метод так же подходит и для Rack-приложений, с некоторыми оговорками и незначительными изменениями в конфигурационных файлах.<span id="more-187"></span></p>
<h2>Сервер приложений.</h2>
<p>На серверах locum.ru для Rails-приложений по умолчанию используется <a href="http://unicorn.bogomips.org" target="_blank">unicorn</a>. По запросу можно создать проект, который будет использовать <a href="http://www.modrails.com/" target="_blank">Phusion Passenger</a>, но обычно это не требуется. Unicorn зарекомендовал себя как быстрый и очень гибкий в использовании сервер для rails и rack.</p>
<h2>Определяем нужную версию Rails.</h2>
<p>Итак, мы решили разместить приложение на ruby on rails на сервере locum.ru. Первое что нам нужно знать &#8212; версию Ruby On Rails, которую использует наше приложение. Если это Rails ветки 2.3 и версия выше 2.3.5 &#8212; дополнительные действия не нужны. Можно сразу переходить к следующему шагу. Приложение на Rails 2.3.5 и старше скорее всего не получится запустить на Unicorn, из-за несовместимости этих версий с нужной версией <a href="http://rack.rubyforge.org/" target="_blank">Rack</a>. Стоит отметить, что для большинства приложений будет достаточно просто поменять версию фреймворка на 2.3.6 в config/environment.rb, чтобы все заработало на unicorn, например с популярным issue-трекером <a href="http://redmine.org" target="_blank">Redmine</a> это легко решает проблему запуска.</p>
<p>Если наше приложение использует rails 3.X, первым делом следует войти по ssh на сервер и установить соответствующий gem. Для этого нужно выполнить команду:</p>
<pre>gem install rails --user-install --no-rdoc --no-ri</pre>
<p>Если хочется использовать <a href="http://gembundler.com/" target="_blank">Bundler</a> и устанавливать gem вне стандартного пути &#171;~/.gem&#187;,  то нужно установить хотя бы rack версии 1.2 в стандартный путь для gem аналогичной командой:</p>
<pre>gem install raсk --user-install --no-rdoc --no-ri</pre>
<p>Дело в том, что unicorn при старте запускается вне bundle, поэтому он будет использовать rack 1.1, и не сможет запустить приложение, требующее более новую версию rack, так же как и не сможет заменить в процесс работы уже активированную версию rack на более новую. Это является особенностью работы rack и часто приводит к ошибкам, если не помнить о ней.</p>
<h2>Создание проекта из панели управления.</h2>
<p>Теперь нужно зайти в панель управления и создать проект для нашего приложения. Заходим в раздел &#171;проекты&#187;, создаем новый проект с типом Ruby On Rails. Если планируется использовать отличную от MySQL базу данных, то отключаем пункт &#171;создать базу данных&#187;, так как по умолчанию создается база именно этого типа.</p>
<h2>Размещение кода на сервере.</h2>
<p>Создание проекта занимает некоторое время, но после этого у вас на сервер в директории projects появится директория с именем проекта, а в ней стандартная структура каталогов для <a href="http://capify.org/" target="_blank">Сapistrano</a>.  Удобнее всего использовать именно capistrano для загрузки кода на сервер. Это стандартное средство, которое позволяет легко обновлять версию кода, перезапускать сервер приложений, а так же многое другое. Пример конфигурационного файла, адаптированного для использования с нашим хостингом и unicorn можно скачать по следующей ссылке: <a href="http://locum.ru/examples/deploy.rb">http://locum.ru/examples/deploy.rb</a></p>
<p>Заменив в примере нужные значения вы сможете легко загрузить ваш проект на сервер и перезапустить unicorn командой &#171;cap deploy&#187;.</p>
<p>Если не хочется использовать capistrano &#8212; это не проблема, можно обойтись и без  нее. Структура директорий такова:</p>
<pre>имя проекта/
   current -&gt; текущий каталог для unicorn, является символической ссылкой на одну из версий в релизах
   releases/ -&gt; директория с версиям приложения
       initial_release/ -&gt; созданное по умолчанию приложение</pre>
<p>Вам нужно разместить код вашего приложения в директории внутри releases, имя выберите произвольно, а затем изменить ссылку current, чтобы она указывала на директорию с вашим приложением, вместо initial_release, сделать это можно командой ln -sf по ssh.</p>
<p>Типичной ошибкой является удаление директории initial_release или всех файлов в ней.  Дело в том, что у нас unicorn использует очень удобный метод перезапуска. Когда приходит команда на перезагрузку сервера, запускается новый экземпляр unicorn, загружается код и затем, если все в порядке &#8212; новый экземпляр замещает предыдущий, а старый завершается. Сам процесс немного сложнее, но полное описание работы unicorn выходит за рамки этой статьи. Так как старый процесс был запущен в то время, когда ссылка current указывала на каталог initial_release, то и лог пишется там. Если новый экземпляр unicorn не сможет запуститься, то информацию об ошибке следует искать в файле log/unicorn.stderr.log именно по старому пути. Если эти файлы удалить, unicorn будет все еще пытаться писать по открытому заранее дескриптору, но прочитать мы эти данные уже не сможем. Если директория initial_release вам чем-то мешает, то вы всегда сможете удалить ее позже, после того как эти файлы уже перестанут использоваться.</p>
<p>После того, как файлы размещены и ссылка current изменена следует зайти в подробности проекта в панели управления хостингом и нажать кнопку &#171;перезагрузить сервер&#187;.  В случае использования capistrano, сервер будет перезапущен автоматически. Через минуту вы можете зайти на URL вашего проекта и увидеть свое приложение в работе.</p>
<h2>Распространенные ошибки, где их искать и как избежать.</h2>
<p>Опыт показывает, что самой распространенной проблемой при размещении rails-приложений на нашем хостинге является  нехватка того или иного gem или же нужной его версии. Этого можно избежать, если описывать все, необходимые для работы кода gem в environment.rb и выполнять rake gems:install перед перезагрузкой unicorn с новым кодом. Так же можно использовать bundler и выполнять bundle install. Имейте ввиду, что команда bundle по умолчанию будет пытаться установить gem в системные директории, что конечно же не удастся сделать без root-доступа. Поэтому не забывайте всегда использовать ключ &#8212;path с указанием пути, куда вы хотите устанавливать локальные gem. Можно делать это, например, в директорию &#171;~/.gem&#187;.</p>
<p>Так же, некоторые пользователи банально забывают внести нужные настройки для базы данных в database.yml. Не забывайте, что на нашем хостинге все проекты запускаются в режиме &#8216;production&#8217;, а значит и настройки нужно вносить в соответствующей секции database.yml</p>
<p>Что делать, если после перезагрузки кода unicorn на сайте проекта ничего не поменялось? Это значит, что новый экземпляр unicorn не смог запуститься по какой-то причине. Для выяснения причины нужно посмотреть последние строки файла log/unicorn.stderr.log в той директории, где запущена версия unicorn, которая осталась работать. При загрузке нового приложения это будет releases/initial_release.</p>
<p>Еще одна частая ошибка, это попытка зайти на домен, созданный для проекта сразу после появления его в панели управления. Дело в том, что для перезагрузки конфигурации DNS-сервера требуется некоторое время, потому лучше подождать несколько минут. В противном случае можно оказаться в неприятной ситуации. DNS сервер вашего провайдера может кэшировать ответы на запросы, если вы зайдете слишком рано и получите ответ, что такого домена нет, и это попадет в кэш, может получиться, что после того, как наш DNS сервер уже начнет сообщать IP-адрес этого домена, вы  все еще будете получать ошибочный ответ из кэша.</p>
<p>Коллектив Locum.ru желает успеха всем нашим пользователям в разработке и размещении проектов.</p>
]]></content:encoded>
			<wfw:commentRss>http://locum.ru/blog/hosting/%d1%80%d0%b0%d0%b7%d0%b2%d0%be%d1%80%d0%b0%d1%87%d0%b8%d0%b2%d0%b0%d0%b5%d0%bc-rails-%d0%bf%d1%80%d0%b8%d0%bb%d0%be%d0%b6%d0%b5%d0%bd%d0%b8%d0%b5-%d0%bf%d1%80%d0%b0%d0%b2%d0%b8%d0%bb%d1%8c%d0%bd%d1%8b/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
	</channel>
</rss>
