<?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>по стопам webkill&#039;а &#187; nginx</title>
	<atom:link href="http://blog.lukmus.ru/tag/nginx/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lukmus.ru</link>
	<description>это наш химический дом для печальных жителей Земли</description>
	<lastBuildDate>Sat, 21 Oct 2023 19:10:13 +0000</lastBuildDate>
	<language>ru-RU</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>установка ruby 2.0, rails 4, nginx+passenger</title>
		<link>http://blog.lukmus.ru/2013/10/05/ustanovka-ruby-2-0-rails-4-nginxpassenger/</link>
		<comments>http://blog.lukmus.ru/2013/10/05/ustanovka-ruby-2-0-rails-4-nginxpassenger/#comments</comments>
		<pubDate>Sat, 05 Oct 2013 10:33:56 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[настройка и установка]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[ruby 2.0]]></category>
		<category><![CDATA[ruby on rails 4]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=2105</guid>
		<description><![CDATA[Установка Ruby 2.0 через RVM и Rails4+Passenger+Nginx практически ни чем не отличается от аналогичной ситуацией с Rails 3, однако я опишу весь процесс просто для того, чтобы каждый раз не искать новый сайт RVM. установка ruby 2.0 Тут будет все практически тоже самое, что и для Ruby 1.9 и Rails 3, измениться практически только команда [...]]]></description>
			<content:encoded><![CDATA[<p>Установка Ruby 2.0 через RVM и Rails4+Passenger+Nginx практически ни чем не отличается от аналогичной ситуацией с Rails 3, однако я опишу весь процесс просто для того, чтобы каждый раз не искать новый сайт RVM.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/10/PngNgt4U5MM.jpg" alt="" title="Rails Girls" width="517" height="550" class="alignnone size-full wp-image-2112" /><br />
<span id="more-2105"></span></p>
<h2>установка ruby 2.0</h2>
<p>Тут будет все практически тоже самое, что и для <a href='http://blog.lukmus.ru/?p=985'>Ruby 1.9 и Rails 3</a>, измениться практически только команда установки самой RVM.</p>
<p>Итак, для начала надо установить Git.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span><span style="color: #c20cb9; font-weight: bold;">yum install</span> <span style="color: #c20cb9; font-weight: bold;">git</span> <span style="color: #660033;">-y</span></pre></td></tr></table></div>

<p>Далее надо установить RVM, как написано на <a href="https://rvm.io/" target="_blank" rel='nofollow'>офсайте</a> делаем:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span>\curl <span style="color: #660033;">-L</span> https:<span style="color: #000000; font-weight: bold;">//</span>get.rvm.io <span style="color: #000000; font-weight: bold;">|</span> <span style="color: #c20cb9; font-weight: bold;">bash</span> <span style="color: #660033;">-s</span> stable</pre></td></tr></table></div>

<p>Теперь надо выйти из консоли и зайти обратно, после чего можно установить непосредственно сам Ruby 2.0:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># rvm -v</span>
&nbsp;
rvm 1.22.16 <span style="color: #7a0874; font-weight: bold;">&#40;</span>stable<span style="color: #7a0874; font-weight: bold;">&#41;</span> by Wayne E. Seguin <span style="color: #000000; font-weight: bold;">&lt;</span>wayneeseguin<span style="color: #000000; font-weight: bold;">@</span>gmail.com<span style="color: #000000; font-weight: bold;">&gt;</span>, Michal Papis <span style="color: #000000; font-weight: bold;">&lt;</span>mpapis<span style="color: #000000; font-weight: bold;">@</span>gmail.com<span style="color: #000000; font-weight: bold;">&gt;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>https:<span style="color: #000000; font-weight: bold;">//</span>rvm.io<span style="color: #000000; font-weight: bold;">/</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>
&nbsp;
<span style="color: #666666; font-style: italic;"># rvm install 2.0</span></pre></td></tr></table></div>

<p>Когда Ruby 2.0 установлен, если необходимо можно поставить его используемым по умолчанию.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># rvm use 2.0 --default</span>
Using <span style="color: #000000; font-weight: bold;">/</span>usr<span style="color: #000000; font-weight: bold;">/</span>local<span style="color: #000000; font-weight: bold;">/</span>rvm<span style="color: #000000; font-weight: bold;">/</span>gems<span style="color: #000000; font-weight: bold;">/</span>ruby-2.0.0-p247
<span style="color: #666666; font-style: italic;"># ruby -v</span>
ruby 2.0.0p247 <span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000;">2013</span>-06-<span style="color: #000000;">27</span> revision <span style="color: #000000;">41674</span><span style="color: #7a0874; font-weight: bold;">&#41;</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span>i686-linux<span style="color: #7a0874; font-weight: bold;">&#93;</span></pre></td></tr></table></div>

<h2>установка rails 4</h2>
<p>Надо просто установить соответствующий gem.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># gem install rails</span>
<span style="color: #666666; font-style: italic;"># rails -v</span>
Rails 4.0.0</pre></td></tr></table></div>

<h2>установка nginx+passenger</h2>
<p>Установка Nginx+Passenger для Rails 4, точно такая же как и <a href='http://blog.lukmus.ru/?p=1106'>для Rails 3</a>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># gem install passenger</span>
<span style="color: #666666; font-style: italic;"># passenger-install-nginx-module</span></pre></td></tr></table></div>

<p>Теперь осталось воспользоваться предоставленными Passenger&#8217;ом настройками и правильно сконфигурировать конфиг Nginx <code>/opt/nginx/conf/nginx.conf</code>.</p>
<p>p.s. честно говоря, этот пост написан по двум причинам: давно не писал и хотелось бы забить ключевик <strong>установка rails 4</strong>.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2013/10/PngNgt4U5MM.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2013/10/05/ustanovka-ruby-2-0-rails-4-nginxpassenger/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>страничное кэширование мультидоменного сайта на Rails 3+Nginx</title>
		<link>http://blog.lukmus.ru/2013/03/07/stranichnoe-keshirovanie-multidomenn/</link>
		<comments>http://blog.lukmus.ru/2013/03/07/stranichnoe-keshirovanie-multidomenn/#comments</comments>
		<pubDate>Thu, 07 Mar 2013 14:46:48 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[cache_page]]></category>
		<category><![CDATA[expire_cache]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[subdomain]]></category>
		<category><![CDATA[кэш]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1902</guid>
		<description><![CDATA[«Наиболее эффективными считаются те запросы, которые никогда не выдаются», ― говорит Сэм Руби. Страничное кэширование с этой точки зрения не максимально эффективно, но близко к максимуму т.к. страница загруженная полностью из кэша не делает ни одного запроса к БД. Однако, в случае если сайт имеет поддомены, например, для определения локали (en.site.com, ru.site.com), кэш страницы в [...]]]></description>
			<content:encoded><![CDATA[<p>«Наиболее эффективными считаются те запросы, которые никогда не выдаются», ― говорит Сэм Руби. Страничное кэширование с этой точки зрения не максимально эффективно, но близко к максимуму т.к. страница загруженная полностью из кэша не делает ни одного запроса к БД. Однако, в случае если сайт имеет поддомены, например, для определения локали (en.site.com, ru.site.com), кэш страницы в одной локале будет затираться кэшом в другой. В этой статье мой опыт борьбы с этой проблемой.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2013/03/patriarh.jpg" alt="" title="патриарх Кирилл" width="517" height="388" class="alignnone size-full wp-image-1903" /><span id="more-1902"></span><br />
Если загуглить решение этой проблемы, то одно из первых, что выскакивает это статья Ryan Stout <a href="http://www.agileproductions.com/blog_posts/16-Page-Caching-by-Subdomain-in-Rails-and-Nginx" target="_blank" rel='nofollow'>«Page Caching by Subdomain in Rails and Nginx»</a>. Собственно, по ней я и пытался кэшировать на поддоменах, но не все так гладко как там описано. Поэтому я кое-что добавил от себя, а кое-что изменил.</p>
<h3>ApplicationController</h3>
<p>Прежде всего, как и описано в статье надо добавить кое-что в <code>ApplicationController</code>, но тут помимо указанного у Ryan&#8217;а метода <code>cache_page</code> надо будет еще перегрузить <code>expire_page</code> иначе обновить кэш из под рельс можно будет только на велосипеде.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> ApplicationController <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActionController::Base</span>
...
  <span style="color:#9966CC; font-weight:bold;">def</span> cache_page<span style="color:#006600; font-weight:bold;">&#40;</span>content = <span style="color:#0000FF; font-weight:bold;">nil</span>, options = <span style="color:#0000FF; font-weight:bold;">nil</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    path = <span style="color:#996600;">&quot;/#{request.host}/&quot;</span>
    path <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#9966CC; font-weight:bold;">case</span> options
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#CC00FF; font-weight:bold;">Hash</span>
      url_for<span style="color:#006600; font-weight:bold;">&#40;</span>options.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:only_path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, <span style="color:#ff3333; font-weight:bold;">:skip_relative_url_root</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, :<span style="color:#CC0066; font-weight:bold;">format</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span>:<span style="color:#CC0066; font-weight:bold;">format</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#CC0066; font-weight:bold;">String</span>
      options
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> request.<span style="color:#9900CC;">path</span>.<span style="color:#9900CC;">empty</span>? <span style="color:#006600; font-weight:bold;">||</span> request.<span style="color:#9900CC;">path</span> == <span style="color:#996600;">'/'</span>
        <span style="color:#996600;">'/index'</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        request.<span style="color:#9900CC;">path</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">super</span><span style="color:#006600; font-weight:bold;">&#40;</span>content, path<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> expire_page<span style="color:#006600; font-weight:bold;">&#40;</span>options = <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    path = <span style="color:#996600;">&quot;/#{request.host}/&quot;</span>
    params<span style="color:#006600; font-weight:bold;">&#91;</span>:<span style="color:#CC0066; font-weight:bold;">format</span><span style="color:#006600; font-weight:bold;">&#93;</span>=:html <span style="color:#9966CC; font-weight:bold;">if</span> options<span style="color:#006600; font-weight:bold;">&#91;</span>:<span style="color:#CC0066; font-weight:bold;">format</span><span style="color:#006600; font-weight:bold;">&#93;</span>
    path <span style="color:#006600; font-weight:bold;">&lt;&lt;</span> <span style="color:#9966CC; font-weight:bold;">case</span> options
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#CC00FF; font-weight:bold;">Hash</span>
      url_for<span style="color:#006600; font-weight:bold;">&#40;</span>options.<span style="color:#9900CC;">merge</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:only_path</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#0000FF; font-weight:bold;">true</span>, :<span style="color:#CC0066; font-weight:bold;">format</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> params<span style="color:#006600; font-weight:bold;">&#91;</span>:<span style="color:#CC0066; font-weight:bold;">format</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">when</span> <span style="color:#CC0066; font-weight:bold;">String</span>
      options
    <span style="color:#9966CC; font-weight:bold;">else</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> request.<span style="color:#9900CC;">path</span>.<span style="color:#9900CC;">empty</span>? <span style="color:#006600; font-weight:bold;">||</span> request.<span style="color:#9900CC;">path</span> == <span style="color:#996600;">'/'</span>
        <span style="color:#996600;">'/index'</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        request.<span style="color:#9900CC;">path</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#0000FF; font-weight:bold;">self</span>.<span style="color:#9966CC; font-weight:bold;">class</span>.<span style="color:#9900CC;">expire_page</span><span style="color:#006600; font-weight:bold;">&#40;</span>path<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
...
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<h3>настройка самого rails-приложения</h3>
<p>Согласно статье, кэш будет храниться в директории <code>public/cache</code>. Чтобы так и было нужно, во-первых, создать папку <code>cache</code> в <code>public</code>, а, во-вторых, сообщить о пути кэша самому приложению. Для этого можно, например, в <code>config/environments/production.rb</code> дописать:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#6666ff; font-weight:bold;">MyApp::Application</span>.<span style="color:#9900CC;">configure</span> <span style="color:#9966CC; font-weight:bold;">do</span>
...
  <span style="color:#9900CC;">config</span>.<span style="color:#9900CC;">action_controller</span>.<span style="color:#9900CC;">page_cache_directory</span> = Rails.<span style="color:#9900CC;">root</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;public/cache&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<h3>nginx</h3>
<p>В настройке сайта в <code>nginx.conf</code> нужно указать, что и в оригинальной статье:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;"># If the file exists in the public folder, send it
if (-f $request_filename) {
  break;	  
}
&nbsp;
# Check / files with index.html
if (-f $document_root/cache/$host/$uri/index.html) {
  rewrite (.*) /cache/$host/$1/index.html break;
}
&nbsp;
# Check the path + .html
if (-f $document_root/cache/$host/$uri.html) {
  rewrite (.*) /cache/$host/$1.html break;
}
&nbsp;
# Check directly
if (-f $document_root/cache/$host/$uri) {
  rewrite (.*) /cache/$host/$1 break;
}</pre></td></tr></table></div>

<p>Добавление этих условников говорит Nginx&#8217;у куда записывать кэш если его нет и откуда его читать если для данного адреса есть кэш. Вот тут и возникает проблема, Nginx не будет различать это GET-запрос или POST. И если в случае с GET, все хорошо, то когда поступает PUT-запрос на обновление модели (экшены <code>update</code> и <code>show</code> имеют один и тот же URL по умолчанию) Nginx с радостью обнаружит закэшированную страницу и выдаст ошибку 505.<br />
Язык конфигурации Nginx не поддерживает вложенные условники и не понимает конъюнкцию (&#038;&#038; или AND или еще как угодно), все, что остается это строить велосипед что-то типа:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="text" style="font-family:monospace;">if ( $request_method = GET ) {
  set $method_and_file &quot;method&quot;;
}
&nbsp;
if (-f $request_filename) {
  set $method_and_file $method_and_file+&quot;&amp;file&quot;;
}
&nbsp;
if ($method_and_file = &quot;method&amp;file&quot;) {
  break;
}</pre></td></tr></table></div>

<p>Но эти костыли у меня не завелись с первого раза и я забил на эти грязные мысли.</p>
<h2>как же тогда обновить кэш?</h2>
<p>Для обновления кэша я предлагаю такой, на мой взгляд, не самый кровавый вариант. Надо делать форму модели AJAX-вую и в вызове <code>expire_cache</code> явно указывать формат кэша.</p>
<h3>пример на модели Page</h3>
<p><strong>app/controllers/pages_controller.rb:</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> PagesController <span style="color:#006600; font-weight:bold;">&lt;</span> ApplicationController
...
  <span style="color:#9900CC;">caches_page</span> <span style="color:#ff3333; font-weight:bold;">:show</span>
  caches_page <span style="color:#ff3333; font-weight:bold;">:index</span>
...
  <span style="color:#9966CC; font-weight:bold;">def</span> update
    respond_to <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span><span style="color:#CC0066; font-weight:bold;">format</span><span style="color:#006600; font-weight:bold;">|</span>
      <span style="color:#9966CC; font-weight:bold;">if</span> <span style="color:#0066ff; font-weight:bold;">@page</span>.<span style="color:#9900CC;">update_attributes</span><span style="color:#006600; font-weight:bold;">&#40;</span>params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:page</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        expire_page<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>action: <span style="color:#ff3333; font-weight:bold;">:show</span>, id: <span style="color:#0066ff; font-weight:bold;">@page</span>.<span style="color:#9900CC;">id</span>, <span style="color:#CC0066; font-weight:bold;">format</span>: <span style="color:#ff3333; font-weight:bold;">:html</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        expire_page<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006600; font-weight:bold;">&#123;</span>action: <span style="color:#ff3333; font-weight:bold;">:index</span>, <span style="color:#CC0066; font-weight:bold;">format</span>: <span style="color:#ff3333; font-weight:bold;">:html</span><span style="color:#006600; font-weight:bold;">&#125;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
        <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">html</span> <span style="color:#006600; font-weight:bold;">&#123;</span> redirect_to <span style="color:#0066ff; font-weight:bold;">@page</span>, notice: <span style="color:#996600;">'Page was successfully updated.'</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
        <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">js</span>
      <span style="color:#9966CC; font-weight:bold;">else</span>
        <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">html</span> <span style="color:#006600; font-weight:bold;">&#123;</span> render action: <span style="color:#996600;">&quot;edit&quot;</span> <span style="color:#006600; font-weight:bold;">&#125;</span>
        <span style="color:#CC0066; font-weight:bold;">format</span>.<span style="color:#9900CC;">js</span>
        <span style="color:#008000; font-style:italic;">#format.json { render json: @page.errors, status: :unprocessable_entity }</span>
      <span style="color:#9966CC; font-weight:bold;">end</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
...
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p><strong>/app/views/pages/update.js:</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="javascript" style="font-family:monospace;">setTimeout<span style="color: #009900;">&#40;</span> <span style="color: #3366CC;">'window.location.replace(&quot;&lt;%=page_path(@page)%&gt;&quot;)'</span><span style="color: #339933;">,</span> <span style="color: #CC0000;">1500</span><span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span></pre></td></tr></table></div>

<p><strong>/app/views/pages/_form.html.erb:</strong></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>= form_for<span style="color:#006600; font-weight:bold;">&#40;</span>@page, remote: <span style="color:#0000FF; font-weight:bold;">true</span>, <span style="color:#CC0066; font-weight:bold;">format</span>: <span style="color:#ff3333; font-weight:bold;">:js</span><span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>f<span style="color:#006600; font-weight:bold;">|%&gt;</span>
...
<span style="color:#006600; font-weight:bold;">&lt;%</span>end<span style="color:#006600; font-weight:bold;">%&gt;</span></pre></td></tr></table></div>

<p><meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2013/03/patriarh.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2013/03/07/stranichnoe-keshirovanie-multidomenn/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>rails 3 на nginx+mongrel</title>
		<link>http://blog.lukmus.ru/2011/10/31/rails-3-na-nginxmongrel/</link>
		<comments>http://blog.lukmus.ru/2011/10/31/rails-3-na-nginxmongrel/#comments</comments>
		<pubDate>Mon, 31 Oct 2011 08:21:21 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[настройка и установка]]></category>
		<category><![CDATA[mongrel]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1116</guid>
		<description><![CDATA[Некоторые люди, которым интересен iLukmus, наверняка заметили, что сайт работает, мягко говоря, нестабильно и падает по несколько раз в сутки. Я уже пробывал ставить сайт на Apache+Passenger и Nginx+Passenger, и в обоих этих вариантах ситуация с падениям web-сервера была идентичной. Вероятнее всего, я просто не умею их готовить их правильно настраивать, но проблему все равно [...]]]></description>
			<content:encoded><![CDATA[<p>Некоторые люди, которым интересен iLukmus, наверняка заметили, что сайт работает, мягко говоря, нестабильно и падает по несколько раз в сутки. Я уже пробывал ставить сайт на Apache+Passenger и Nginx+Passenger, и в обоих этих вариантах ситуация с падениям web-сервера была идентичной. Вероятнее всего, я просто не умею <del datetime="2011-10-31T06:32:59+00:00">их готовить</del> их правильно настраивать, но проблему все равно нужно решать, а т.к. пробывать различные конфиги мне уже надоело, iLukmus переходит на Mongrel+Nginx.<br />
<img class="aligncenter size-full wp-image-1117" title="commie-obama" src="http://blog.lukmus.ru/wp-content/uploads/2011/10/commie-obama.jpg" alt="" width="517" height="315" /><span id="more-1116"></span></p>
<h2>установка Mongrel</h2>
<p>Mongrel на ruby 1.9 устанавливается своеобразно, обычный способ с прописыванием гема в Gemfile рельсов здесь не прокатит и вызовет ошибку.<br />
Ставим гем Mongrel&#8217;а:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">gem install mongrel <span style="color: #339933;">--</span>pre</pre></td></tr></table></div>

<p>Прописываем гем в Gemfile ROR&#8217;а:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">gem <span style="color: #0000ff;">'mongrel'</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">'&gt;= 1.2.0.pre2'</span></pre></td></tr></table></div>

<p>Ну и забандлим новый гем:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">bundle install</pre></td></tr></table></div>

<p>Подробнее почему нужно ставить именно так и какая конкретно вылезает ошибка можно почитать <a rel="nofollow" href="http://kevin.h-pk-ns.com/2011/08/11/using-mongrel-on-ruby-1-9-2/" target="_blank">здесь</a>.</p>
<h2>установка и настройка Nginx</h2>
<h3>установка</h3>
<p>Предполагается, что <a href="http://blog.lukmus.ru/?p=1106">Nginx был установлен вместе с Passenger&#8217;ом</a>, но его можно установить и просто так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># yum install nginx</span></pre></td></tr></table></div>

<h3>настройка</h3>
<p>Теперь открываем файл конфига nginx.conf и прописываем, что-то типа:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">user  deploy<span style="color: #339933;">;</span>
worker_processes  <span style="color: #cc66cc;">1</span><span style="color: #339933;">;</span>
<span style="color: #666666; font-style: italic;">#error_log   logs/error.log debug;
</span>
events <span style="color: #009900;">&#123;</span>
  worker_connections  <span style="color: #cc66cc;">1024</span><span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span>
&nbsp;
http <span style="color: #009900;">&#123;</span>
  <span style="color: #b1b100;">include</span>        conf<span style="color: #339933;">/</span>mime<span style="color: #339933;">.</span>types<span style="color: #339933;">;</span>
  default_type   application<span style="color: #339933;">/</span>octet<span style="color: #339933;">-</span>stream<span style="color: #339933;">;</span>
  sendfile        on<span style="color: #339933;">;</span>
  <span style="color: #666666; font-style: italic;">#tcp_nopush     on;
</span>  keepalive_timeout  <span style="color: #cc66cc;">65</span><span style="color: #339933;">;</span>
  tcp_nodelay        on<span style="color: #339933;">;</span>
&nbsp;
  gzip  on<span style="color: #339933;">;</span>
  gzip_min_length  <span style="color: #cc66cc;">1100</span><span style="color: #339933;">;</span>
  gzip_buffers     <span style="color: #cc66cc;">4</span> 8k<span style="color: #339933;">;</span>
  gzip_types       text<span style="color: #339933;">/</span>plain<span style="color: #339933;">;</span>
&nbsp;
  upstream mongrel <span style="color: #009900;">&#123;</span>
    server 127<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>1<span style="color: #339933;">:</span><span style="color: #cc66cc;">3000</span><span style="color: #339933;">;</span>
  <span style="color: #009900;">&#125;</span>
&nbsp;
  server <span style="color: #009900;">&#123;</span>
    listen       <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span>
    server_name  example<span style="color: #339933;">.</span>com<span style="color: #339933;">;</span>
    root         <span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>apps<span style="color: #339933;">/</span>example<span style="color: #339933;">/</span><span style="color: #990000;">current</span><span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">public</span><span style="color: #339933;">;</span>
    index        index<span style="color: #339933;">.</span>html index<span style="color: #339933;">.</span>htm<span style="color: #339933;">;</span>
&nbsp;
    try_files  <span style="color: #000088;">$uri</span><span style="color: #339933;">/</span>index<span style="color: #339933;">.</span>html <span style="color: #000088;">$uri</span><span style="color: #339933;">.</span>html <span style="color: #000088;">$uri</span> <span style="color: #339933;">@</span>mongrel<span style="color: #339933;">;</span>
&nbsp;
    location <span style="color: #339933;">@</span>mongrel <span style="color: #009900;">&#123;</span>
      proxy_set_header  X<span style="color: #339933;">-</span>Real<span style="color: #339933;">-</span>IP        <span style="color: #000088;">$remote_addr</span><span style="color: #339933;">;</span>
      proxy_set_header  X<span style="color: #339933;">-</span>Forwarded<span style="color: #339933;">-</span><span style="color: #b1b100;">For</span>  <span style="color: #000088;">$proxy_add_x</span>
_forwarded_for<span style="color: #339933;">;</span>
      proxy_set_header  Host             <span style="color: #000088;">$http_host</span><span style="color: #339933;">;</span>
      proxy_redirect    off<span style="color: #339933;">;</span>
      proxy_pass        http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//mongrel;</span>
    <span style="color: #009900;">&#125;</span>
    error_page   <span style="color: #cc66cc;">500</span> <span style="color: #cc66cc;">502</span> <span style="color: #cc66cc;">503</span> <span style="color: #cc66cc;">504</span>  <span style="color: #339933;">/</span>50x<span style="color: #339933;">.</span>html<span style="color: #339933;">;</span>
    location <span style="color: #339933;">=</span> <span style="color: #339933;">/</span>50x<span style="color: #339933;">.</span>html <span style="color: #009900;">&#123;</span>
      root   html<span style="color: #339933;">;</span>
    <span style="color: #009900;">&#125;</span>
  <span style="color: #009900;">&#125;</span>
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

<p>Подробнее о конфиге написано на <a rel="nofollow" href="http://wiki.nginx.org/RubyonRailsMongrel" target="_blank">официальной вики-странице Nginx&#8217;а</a>.</p>
<h2>запуск</h2>
<p>Сначала запускаем Mongrel:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">$ cd <span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>apps<span style="color: #339933;">/</span>example<span style="color: #339933;">/</span><span style="color: #990000;">current</span><span style="color: #339933;">/</span>
$ rails s <span style="color: #339933;">-</span>e production
<span style="color: #339933;">=&gt;</span> Booting Mongrel
<span style="color: #339933;">=&gt;</span> Rails 3<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>10 application starting in production
on http<span style="color: #339933;">:</span><span style="color: #666666; font-style: italic;">//0.0.0.0:3000</span>
<span style="color: #339933;">=&gt;</span> Call with <span style="color: #339933;">-</span>d to detach
<span style="color: #339933;">=&gt;</span> Ctrl<span style="color: #339933;">-</span>C to shutdown server</pre></td></tr></table></div>

<p>Запустить Mongrel как демон можно так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">$ rails s <span style="color: #339933;">-</span>e production <span style="color: #339933;">-</span>d</pre></td></tr></table></div>

<p>И теперь запускаем Nginx, у меня, например, это выглядит так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /opt/nginx/sbin/nginx</span></pre></td></tr></table></div>

<p>Типа все, но надо не забыть запретить открытию порта Mogrel&#8217;а (здесь 3000) из внешки.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/10/commie-obama.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/10/31/rails-3-na-nginxmongrel/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>nginx on rails 3</title>
		<link>http://blog.lukmus.ru/2011/10/24/nginx-on-rails-3/</link>
		<comments>http://blog.lukmus.ru/2011/10/24/nginx-on-rails-3/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 03:24:17 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[настройка и установка]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[nginx]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1106</guid>
		<description><![CDATA[Тестов я не проводил, но что-то мне подсказывает, что Nginx будет побыстрее чем Apache. В принципе, настройка Nginx через Passenger под Rails 3 похожа на аналогичную Apache&#8217;а. Но для закрепления, я все равно здесь ее опишу. Прежде всего нужно отметить, что устанавливать Nginx вручную или через YUM не надо, за вас это сделает Passenger, всему [...]]]></description>
			<content:encoded><![CDATA[<p>Тестов я не проводил, но что-то мне подсказывает, что Nginx будет побыстрее чем Apache. В принципе, настройка Nginx через Passenger под Rails 3 похожа на <a href="http://blog.lukmus.ru/?p=942">аналогичную Apache&#8217;а</a>. Но для закрепления, я все равно здесь ее опишу.<br />
<img class="aligncenter size-full wp-image-1107" title="wheels_of_the_jupiter_locomotive_steam_engine_at_xd9-812467" src="http://blog.lukmus.ru/wp-content/uploads/2011/10/wheels_of_the_jupiter_locomotive_steam_engine_at_xd9-812467.jpg" alt="" width="517" height="344" /><span id="more-1106"></span><br />
Прежде всего нужно отметить, что устанавливать Nginx вручную или через YUM не надо, за вас это сделает Passenger, всему свое время.</p>
<h3>установка Passenger</h3>
<p>Сначала нужно установить сам гем Passenger&#8217;а.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># gem install passenger</span></pre></td></tr></table></div>

<p>Далее запускаем скрипт:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># passenger-install-nginx-module</span></pre></td></tr></table></div>

<p>Если вам не хватает некоторых нужных пакетов, скрипт, также как и в случае с апачем, подскажет что и как нужно установить. И после того как все зависимости будут устранены нужно повторно запустить этот скрипт.<br />
В процессе выполнения скрипт спросит, про установку Nginx. На этот вопрос я рекомендую отвечать положительно, т.е. выбрать цифру 1 &#8211; скрипт сам скачает и установит Nginx. Далее будет задан вопрос про место установки, тут поступаем как хотим.</p>
<h3>конфигурация и запуск</h3>
<p>В конце скрипт укажет параметры, которые нужно вставить в конфиг Nginx. В результате чего конфиг (у меня <code>/opt/nginx/conf/nginx.conf</code>) будет выглядеть примерно так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">...</span>
events <span style="color: #009900;">&#123;</span>  worker_connections  <span style="color: #cc66cc;">1024</span><span style="color: #339933;">;</span><span style="color: #009900;">&#125;</span>
http <span style="color: #009900;">&#123;</span>
  passenger_root <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>rvm<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>ruby<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>2<span style="color: #339933;">-</span>p290<span style="color: #339933;">/</span>
    gems<span style="color: #339933;">/</span>passenger<span style="color: #339933;">-</span>3<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>9<span style="color: #339933;">;</span>
  passenger_ruby <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>rvm<span style="color: #339933;">/</span>wrappers<span style="color: #339933;">/</span>
    ruby<span style="color: #339933;">-</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>2<span style="color: #339933;">-</span>p290<span style="color: #339933;">/</span>ruby<span style="color: #339933;">;</span>
&nbsp;
<span style="color: #b1b100;">include</span>       mime<span style="color: #339933;">.</span>types<span style="color: #339933;">;</span>
<span style="color: #339933;">...</span>
   server <span style="color: #009900;">&#123;</span>
      listen <span style="color: #cc66cc;">80</span><span style="color: #339933;">;</span>
      server_name your<span style="color: #339933;">-</span>rails<span style="color: #339933;">-</span>domen<span style="color: #339933;">.</span>ru<span style="color: #339933;">;</span>
      root <span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">var</span><span style="color: #339933;">/</span>www<span style="color: #339933;">/</span>rails<span style="color: #339933;">/</span>rails_app<span style="color: #339933;">/</span><span style="color: #000000; font-weight: bold;">public</span><span style="color: #339933;">;</span>
      passenger_enabled on<span style="color: #339933;">;</span>
   <span style="color: #009900;">&#125;</span>
<span style="color: #339933;">...</span>
<span style="color: #009900;">&#125;</span>
<span style="color: #339933;">...</span></pre></td></tr></table></div>

<p>Насколько я понимаю, Nginx + Passenger всегда работает только под Production.<br />
Запускать Nginx надо так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># /opt/nginx/sbin/nginx</span></pre></td></tr></table></div>

<p>На этом, опять же грубая настройка Nginx под Rails 3 закончена. Но надо отметить, что эта грубая конфигурация Nginx&#8217;а будет производительней <a href="http://blog.lukmus.ru/?p=942">грубой настройки Apache&#8217;а</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/10/24/nginx-on-rails-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
