<?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; ROR 3</title>
	<atom:link href="http://blog.lukmus.ru/tag/ror-3/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>bing-переводчик на ruby</title>
		<link>http://blog.lukmus.ru/2012/10/20/bing-perevodchik-na-ruby/</link>
		<comments>http://blog.lukmus.ru/2012/10/20/bing-perevodchik-na-ruby/#comments</comments>
		<pubDate>Sat, 20 Oct 2012 20:21:52 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[bing]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[translator]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1164</guid>
		<description><![CDATA[Уже давно гугл отказался предоставлять API к своему переводчику бесплатно, а у Яндекса, насколько я знаю, поддерживается еще мало языков и еще нет публичных API. Я знаю только 1 бесплатный аналог переводчику гугла &#8211; Bing Translator. В этой статье показана интеграция переводчика от Microsoft в Rails-приложение. установка Раньше я сам писал интерфейс к бингу, а [...]]]></description>
			<content:encoded><![CDATA[<p>Уже давно гугл отказался предоставлять API к своему переводчику бесплатно, а у <a href="http://translate.yandex.ru" target="_blank" rel='nofollow'>Яндекса</a>, насколько я знаю, поддерживается еще мало языков и еще нет публичных API. Я знаю только 1 бесплатный аналог переводчику гугла &#8211; <a href="http://www.bing.com/translator/" target="_blank" rel='nofollow'>Bing Translator</a>. В этой статье показана интеграция переводчика от Microsoft в Rails-приложение.<br />
<img src="http://blog.lukmus.ru/wp-content/uploads/2012/10/relig.png" alt="" title="relig" width="517" height="300" class="aligncenter size-full wp-image-1569" /><span id="more-1164"></span></p>
<h3>установка</h3>
<p>Раньше я сам писал интерфейс к бингу, а сегодня случайно нашел крутой гем <a href="https://github.com/CodeBlock/bing_translator-gem" target="_blank" rel='nofollow'>Bing Translator</a>. Все что я опишу ниже есть на офстранице гема, но все же.<br />
Установка элементарная, как обычно надо вставить в <code>Gemfile</code></p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">gem <span style="color:#996600;">&quot;bing_translator&quot;</span>, <span style="color:#996600;">&quot;~&gt; 3.0.0&quot;</span></pre></td></tr></table></div>

<p>и забандлить</p>

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

<h3>эксплуатация</h3>
<p>Для начала нужно создать экземпляр класса <code>BingTranslator</code>, от которого потом и надо плясать.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">translator = BingTranslator.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'YOUR_CLIENT_ID'</span>, <span style="color:#996600;">'YOUR_CLIENT_SECRET'</span><span style="color:#006600; font-weight:bold;">&#41;</span></pre></td></tr></table></div>

<p>А вот чтобы получить эти ключи надо пройти на <a href="https://datamarket.azure.com/account" target="_blank" rel='nofollow'>Azure</a> и залогиниться там. <code>Primary Account Key</code> и <code>Customer ID</code> это, соответственно, и будут <code>YOUR_CLIENT_SECRET</code> и <code>YOUR_CLIENT_ID</code>.<br />
Чтобы перевести что-либо, например, с английского на испанский достаточно этого</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">spanish=translator.<span style="color:#9900CC;">translate</span> <span style="color:#996600;">'Hello. This will be translated!'</span>, <span style="color:#ff3333; font-weight:bold;">:from</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'en'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'es'</span></pre></td></tr></table></div>

<p>Язык оригинала можно не указывать, в этом случае он будет определен бингом автоматически.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">spanish=translator.<span style="color:#9900CC;">translate</span> <span style="color:#996600;">'Hello. This will be translated!'</span>, <span style="color:#ff3333; font-weight:bold;">:to</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'es'</span></pre></td></tr></table></div>

<p>В случае если нужно узнать только язык, а переводить не надо, нужно использовать метод <code>detect</code>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">locale = translator.<span style="color:#9900CC;">detect</span> <span style="color:#996600;">'Hello. This will be translated!'</span> <span style="color:#008000; font-style:italic;"># =&gt; :en</span></pre></td></tr></table></div>

<p><em>p.s. Честно говоря, переводчик от бинга бесплатно переводит только 2 млн. символов в месяц, за 4 млн. уже надо платить $40 в месяц.</em><br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2012/10/relig.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/10/20/bing-perevodchik-na-ruby/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>sitemap на Rails 3. rails-sitemap</title>
		<link>http://blog.lukmus.ru/2012/08/08/sitemap-na-rails-3-rails-sitemap/</link>
		<comments>http://blog.lukmus.ru/2012/08/08/sitemap-na-rails-3-rails-sitemap/#comments</comments>
		<pubDate>Wed, 08 Aug 2012 02:41:43 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[rails-sitemap]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[sitemap]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1472</guid>
		<description><![CDATA[Писать rake-файл, который сделает sitemap самому уже давно не модно т.к. существует 2 вагона готовых гемов для этого. Ниже я немного опишу гем rails-sitemap и самое главное покажу как его заставить делать несколько карт, например, для ситуации когда у сайта локация определяется поддоменом (напр.: ru.site.com и en.site.com). установка Как обычно закидываем в Gemfile: gem 'sitemap' [...]]]></description>
			<content:encoded><![CDATA[<p>Писать rake-файл, который сделает sitemap самому уже давно не модно т.к. существует 2 вагона готовых гемов для этого. Ниже я немного опишу гем <a rel="nofollow" href="https://github.com/viseztrance/rails-sitemap/" target="_blank">rails-sitemap</a> и самое главное покажу как его заставить делать несколько карт, например, для ситуации когда у сайта локация определяется поддоменом (напр.: ru.site.com и en.site.com).<br />
<img class="aligncenter size-full wp-image-1473" title="pussies" src="http://blog.lukmus.ru/wp-content/uploads/2012/08/pussies.png" alt="" width="517" height="368" /><span id="more-1472"></span></p>
<h3>установка</h3>
<p>Как обычно закидываем в Gemfile:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'sitemap'</pre></td></tr></table></div>

<p>и бандлим:</p>

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

<p>Далее надо сгенерировать конфигурационный файл:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rails g sitemap:install</pre></td></tr></table></div>

<h3>настройка</h3>
<p>Все настройки хранятся в <code>config/sitemap.rb</code>. На странице гема на гитхабе приведены примеры некоторых настроек, для создания более тонкой конфигурации рекомендуется читать доки, ссылка на которые не указанна и в гугле не числится.<br />
Суть настройки сводится к указанию моделей по которым будет создаваться карта. Приведу пример конфигурационного файла простого сайта, у которого есть 3 модели: страницы (Pages), статьи (Articles) и новости (News). Статьи должны быть одобрены модератором, а новости интересуют только последние 100. Статей очень много.</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">Sitemap.<span style="color:#9900CC;">configure</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>config<span style="color:#006600; font-weight:bold;">|</span>
  config.<span style="color:#9900CC;">max_urls</span> = <span style="color:#006666;">50000</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
Sitemap::<span style="color:#CC00FF; font-weight:bold;">Generator</span>.<span style="color:#9900CC;">instance</span>.<span style="color:#CC0066; font-weight:bold;">load</span> <span style="color:#ff3333; font-weight:bold;">:host</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#996600;">'site.com'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  path <span style="color:#ff3333; font-weight:bold;">:root</span>, <span style="color:#ff3333; font-weight:bold;">:priority</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">1</span>
  resources <span style="color:#ff3333; font-weight:bold;">:pages</span>, <span style="color:#ff3333; font-weight:bold;">:skip_index</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;">:change_frequency</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;monthly&quot;</span>
  resources <span style="color:#ff3333; font-weight:bold;">:articles</span>,
    <span style="color:#ff3333; font-weight:bold;">:objects</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">proc</span> <span style="color:#006600; font-weight:bold;">&#123;</span>Article.<span style="color:#9900CC;">where</span><span style="color:#006600; font-weight:bold;">&#40;</span>moderatable: <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
    <span style="color:#ff3333; font-weight:bold;">:change_frequency</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;weekly&quot;</span>
  resources <span style="color:#ff3333; font-weight:bold;">:news</span>,
    <span style="color:#ff3333; font-weight:bold;">:objects</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">proc</span> <span style="color:#006600; font-weight:bold;">&#123;</span>News.<span style="color:#9900CC;">last</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">100</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
    <span style="color:#ff3333; font-weight:bold;">:change_frequency</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;never&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<h2>несколько карт</h2>
<h3>изменение гема</h3>
<p>Чтобы создать несколько карт для начала нужно сделать несколько rake&#8217;овых заданий в геме, для этого нужно найти файл типа <code>/usr/local/rvm/gems/ruby-1.9.2-p290/gems/sitemap-0.3.2/lib/tasks/sitemap.rake</code>, у меня Fedora 15.1 и Ruby 1.9.2-p290 через RVM, поэтому весьма вероятно, что у вас абсолютный путь до этого файла немного другой.<br />
Далее его нужно открыть и изменить (у него рутовские права, так что либо изменяйте под рутом, либо дайте права).<br />
Ниже приведен его вариант на 2 sitemap&#8217;а для английской версии сайта (en.site.com) и русской (ru.site.com), вообще-то это не принципиально, тут просто выбраны такие названия для удобства.</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">namespace <span style="color:#ff3333; font-weight:bold;">:sitemap</span> <span style="color:#9966CC; font-weight:bold;">do</span>
&nbsp;
  namespace <span style="color:#ff3333; font-weight:bold;">:ru</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> ru_setup
      <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>Rails.<span style="color:#9900CC;">root</span>, <span style="color:#996600;">&quot;config&quot;</span>, <span style="color:#996600;">&quot;rusitemap&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    desc <span style="color:#996600;">&quot;Generates a new sitemap.&quot;</span>
    task <span style="color:#ff3333; font-weight:bold;">:generate</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      ru_setup
      root = Sitemap.<span style="color:#9900CC;">configuration</span>.<span style="color:#9900CC;">save_path</span> <span style="color:#006600; font-weight:bold;">||</span>
        ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;LOCATION&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> Rails.<span style="color:#9900CC;">public_path</span>
      path = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>root, <span style="color:#996600;">&quot;sitemap.xml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      Sitemap::<span style="color:#CC00FF; font-weight:bold;">Generator</span>.<span style="color:#9900CC;">instance</span>.<span style="color:#9900CC;">build</span>!
      Sitemap::<span style="color:#CC00FF; font-weight:bold;">Generator</span>.<span style="color:#9900CC;">instance</span>.<span style="color:#9900CC;">save</span> path
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  namespace <span style="color:#ff3333; font-weight:bold;">:en</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#9966CC; font-weight:bold;">def</span> en_setup
      <span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>Rails.<span style="color:#9900CC;">root</span>, <span style="color:#996600;">&quot;config&quot;</span>, <span style="color:#996600;">&quot;ensitemap&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    desc <span style="color:#996600;">&quot;Generates a new sitemap.&quot;</span>
    task <span style="color:#ff3333; font-weight:bold;">:generate</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span>
      en_setup
      root = Sitemap.<span style="color:#9900CC;">configuration</span>.<span style="color:#9900CC;">save_path</span> <span style="color:#006600; font-weight:bold;">||</span>
        ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;LOCATION&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</span> <span style="color:#006600; font-weight:bold;">||</span> Rails.<span style="color:#9900CC;">public_path</span>
      path = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>root, <span style="color:#996600;">&quot;sitemap.xml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      Sitemap::<span style="color:#CC00FF; font-weight:bold;">Generator</span>.<span style="color:#9900CC;">instance</span>.<span style="color:#9900CC;">build</span>!
      Sitemap::<span style="color:#CC00FF; font-weight:bold;">Generator</span>.<span style="color:#9900CC;">instance</span>.<span style="color:#9900CC;">save</span> path
    <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
  desc <span style="color:#996600;">&quot;Ping engines.&quot;</span>
  task <span style="color:#ff3333; font-weight:bold;">:ping</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:environment</span> <span style="color:#9966CC; font-weight:bold;">do</span>
    <span style="color:#6666ff; font-weight:bold;">Sitemap::Ping</span>.<span style="color:#9900CC;">send_request</span> ENV<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#996600;">&quot;LOCATION&quot;</span><span style="color:#006600; font-weight:bold;">&#93;</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>Тут я просто разбил пространство имен <code>sitemap</code> на 2 подпространства <code>ru</code> и <code>en</code>. Каждое подпространство содержит код идентичный коду исходного <code>sitemap</code>, где изменены названия конфигурационных файлов.<br />
Теперь надо отредактировать генератор <code>/usr/local/rvm/gems/ruby-1.9.2-p290/gems/sitemap-0.3.2/lib/sitemap/generator.rb</code> (абсолютный путь тоже может не совпадать). Тут надо изменить метод <code>save</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> save<span style="color:#006600; font-weight:bold;">&#40;</span>location<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">if</span> fragments.<span style="color:#9900CC;">length</span> == <span style="color:#006666;">1</span>
    <span style="color:#CC00FF; font-weight:bold;">FileUtils</span>.<span style="color:#9900CC;">mv</span><span style="color:#006600; font-weight:bold;">&#40;</span>fragments.<span style="color:#9900CC;">first</span>.<span style="color:#9900CC;">path</span>, location<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#9966CC; font-weight:bold;">else</span>
    remove_saved_files<span style="color:#006600; font-weight:bold;">&#40;</span>location<span style="color:#006600; font-weight:bold;">&#41;</span>
    root = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC00FF; font-weight:bold;">Pathname</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>location<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">dirname</span>, <span style="color:#996600;">&quot;sitemaps&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#CC00FF; font-weight:bold;">Dir</span>.<span style="color:#9900CC;">mkdir</span><span style="color:#006600; font-weight:bold;">&#40;</span>root<span style="color:#006600; font-weight:bold;">&#41;</span> <span style="color:#9966CC; font-weight:bold;">unless</span> <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">directory</span>?<span style="color:#006600; font-weight:bold;">&#40;</span>root<span style="color:#006600; font-weight:bold;">&#41;</span>
    fragments.<span style="color:#9900CC;">each_with_index</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>fragment, i<span style="color:#006600; font-weight:bold;">|</span>
      file_pattern = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>root,<span style="color:#996600;">&quot;sitemap-fragment-#{i + 1}.xml&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#CC00FF; font-weight:bold;">FileUtils</span>.<span style="color:#9900CC;">mv</span><span style="color:#006600; font-weight:bold;">&#40;</span>fragment.<span style="color:#9900CC;">path</span>, file_pattern<span style="color:#006600; font-weight:bold;">&#41;</span>
      <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">chmod</span><span style="color:#006600; font-weight:bold;">&#40;</span>0755, file_pattern<span style="color:#006600; font-weight:bold;">&#41;</span>
    <span style="color:#9966CC; font-weight:bold;">end</span>
    file = <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">new</span><span style="color:#006600; font-weight:bold;">&#40;</span>location, <span style="color:#996600;">&quot;w&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    file.<span style="color:#9900CC;">write</span><span style="color:#006600; font-weight:bold;">&#40;</span>render<span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">&quot;index&quot;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#CC0066; font-weight:bold;">gsub!</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'/sitemaps/'</span>,<span style="color:#996600;">'/'</span><span style="color:#006600; font-weight:bold;">+</span>Sitemap.<span style="color:#9900CC;">configuration</span>.<span style="color:#9900CC;">locale_fragment_path</span><span style="color:#006600; font-weight:bold;">+</span><span style="color:#996600;">'/'</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#41;</span>
    file.<span style="color:#9900CC;">close</span>
  <span style="color:#9966CC; font-weight:bold;">end</span>
  <span style="color:#CC00FF; font-weight:bold;">File</span>.<span style="color:#9900CC;">chmod</span><span style="color:#006600; font-weight:bold;">&#40;</span>0755, location<span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>В этом методе я только заменил <code>file.write(render "index")</code>.</p>
<h3>файлы настроек</h3>
<p>Т.к. теперь будут 2 карты, то и файлов настроек будет 2, их имена должны быть в соответствии с именами из <code>/usr/local/rvm/gems/ruby-1.9.2-p290/gems/sitemap-0.3.2/lib/tasks/sitemap.rake</code> т.е. <code>rusitemap.rb</code> и <code>ensitemap.rb</code>.<br />
Пример конфига <code>config/rusitemap.rb</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">Sitemap.<span style="color:#9900CC;">configure</span> <span style="color:#9966CC; font-weight:bold;">do</span> <span style="color:#006600; font-weight:bold;">|</span>config<span style="color:#006600; font-weight:bold;">|</span>
 config.<span style="color:#9900CC;">max_urls</span> = <span style="color:#006666;">1000</span>
 config.<span style="color:#9900CC;">save_path</span> = <span style="color:#CC00FF; font-weight:bold;">File</span>.
  <span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span>Rails.<span style="color:#9900CC;">root</span>, <span style="color:#996600;">&quot;public&quot;</span>,<span style="color:#996600;">'sitemaps'</span>,<span style="color:#996600;">'ru'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
 config.<span style="color:#9900CC;">locale_fragment_path</span>=<span style="color:#CC00FF; font-weight:bold;">File</span>.
  <span style="color:#9900CC;">join</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'sitemaps'</span>,<span style="color:#996600;">'ru'</span>,<span style="color:#996600;">'sitemaps'</span><span style="color:#006600; font-weight:bold;">&#41;</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
Sitemap::<span style="color:#CC00FF; font-weight:bold;">Generator</span>.<span style="color:#9900CC;">instance</span>.<span style="color:#CC0066; font-weight:bold;">load</span> <span style="color:#ff3333; font-weight:bold;">:host</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#996600;">'ru.site.com'</span> <span style="color:#9966CC; font-weight:bold;">do</span>
  path <span style="color:#ff3333; font-weight:bold;">:root</span>, <span style="color:#ff3333; font-weight:bold;">:priority</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006666;">1</span>
  resources <span style="color:#ff3333; font-weight:bold;">:pages</span>, <span style="color:#ff3333; font-weight:bold;">:skip_index</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;">:change_frequency</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;monthly&quot;</span>
  resources <span style="color:#ff3333; font-weight:bold;">:articles</span>,
    <span style="color:#ff3333; font-weight:bold;">:objects</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">proc</span> <span style="color:#006600; font-weight:bold;">&#123;</span>Article.<span style="color:#9900CC;">where</span><span style="color:#006600; font-weight:bold;">&#40;</span>moderatable: <span style="color:#0000FF; font-weight:bold;">true</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
    <span style="color:#ff3333; font-weight:bold;">:change_frequency</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;weekly&quot;</span>
  resources <span style="color:#ff3333; font-weight:bold;">:news</span>,
    <span style="color:#ff3333; font-weight:bold;">:objects</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#CC0066; font-weight:bold;">proc</span> <span style="color:#006600; font-weight:bold;">&#123;</span>News.<span style="color:#9900CC;">last</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#006666;">100</span><span style="color:#006600; font-weight:bold;">&#41;</span><span style="color:#006600; font-weight:bold;">&#125;</span>,
    <span style="color:#ff3333; font-weight:bold;">:change_frequency</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">&quot;never&quot;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>В файле <code>config/ensitemap.rb</code> все аналогично.</p>
<h3>запуск</h3>
<p>Теперь нужно сделать директории <code>public/sitemaps/en</code> и <code>public/sitemaps/ru</code>. После такого колдовства русская карта генерируется по команде:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rake sitemap:ru:generate</pre></td></tr></table></div>

<p>английская:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rake sitemap:en:generate</pre></td></tr></table></div>

<p>Карты соответственно будут лежать в только что созданных директориях.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2012/08/pussies.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/08/08/sitemap-na-rails-3-rails-sitemap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Яндекс.Фотки+Carrierwave на Rails 3</title>
		<link>http://blog.lukmus.ru/2012/06/14/yandeks-fotkicarrierwave-na-rails-3/</link>
		<comments>http://blog.lukmus.ru/2012/06/14/yandeks-fotkicarrierwave-na-rails-3/#comments</comments>
		<pubDate>Thu, 14 Jun 2012 14:45:49 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[CarrierWave]]></category>
		<category><![CDATA[nokogiri]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[яндекс.фотки]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1311</guid>
		<description><![CDATA[Использовать свой сервер для хранения больших фото порой бывает дорого, а если вы хотите еще и хранить разные версии одного и того же изображения (например: иконка, средний размер и оригинал), то часто проделывание стольких преобразований над каждым файлом требует большого количества процессорного времени. Яндекс.Фотки предоставляет API, которые, конечно не идеальны (в смысле я бы расширил [...]]]></description>
			<content:encoded><![CDATA[<p>Использовать свой сервер для хранения больших фото порой бывает дорого, а если вы хотите еще и хранить разные версии одного и того же изображения (например: иконка, средний размер и оригинал), то часто проделывание стольких преобразований над каждым файлом требует большого количества процессорного времени. Яндекс.Фотки предоставляет API, которые, конечно не идеальны (в смысле я бы расширил их функционал), однако, могут решить вышеуказанные проблемы. Ниже будет описано как интегрировать Яндекс.Фотки в Rails 3 через Carrierwave.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2012/06/decorated_trains_in_japan_17.jpg"><img class="aligncenter size-full wp-image-1312" title="decorated_trains_in_japan_17" src="http://blog.lukmus.ru/wp-content/uploads/2012/06/decorated_trains_in_japan_17.jpg" alt="" width="517" height="386" /></a><span id="more-1311"></span><br />
Для начала нужно зарегистрироваться на Яндексе. И дальше есть 2 способа: самому разобраться в <a rel="nofollow" href="http://api.yandex.ru/fotki/" target="_blank">API</a> или воспользоваться готовым гемом под Carrierwave. Я воспользусь вторым способом.</p>
<h2>gem carrierwave-yandexfotki</h2>
<p><a rel="nofollow" href="https://github.com/nicck/carrierwave-yandexfotki" target="_blank">Гем</a> придумал и написал <a style="text-decoration: none; font-weight: bold;" rel="nofollow" href="http://clubs.ya.ru/api-fotki/replies.xml?item_no=274" target="_blank"><span style="color: red;">n</span><span style="color: #000;">icck</span></a>, за что ему огромное спасибо, уважение и почет. Однако, гем был написан в начале прошлого года, поэтому немного устарел, а точнее стал чуть-чуть не совместим с текущей версией Rails и Ruby.</p>
<h3>установка</h3>
<p>Добавляем в Gemfile:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'carrierwave'
gem 'carrierwave-yandexfotki'</pre></td></tr></table></div>

<p>Причем именно в таком порядке иначе будет ошибка.<br />
Теперь по традиции бандлим:</p>

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

<p>Тут могут возникнуть проблемы с зависимостями для Nokogiri:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">...
Installing curb <span class="br0">&#40;</span>0.8.0<span class="br0">&#41;</span> with native extensions
Installing nokogiri <span class="br0">&#40;</span>1.5.4<span class="br0">&#41;</span> with native extensions
Gem::Installer::ExtensionBuildError: ERROR: Failed to
build gem native extension.
&nbsp;
        /usr/local/rvm/rubies/ruby-1.9.2-p290/bin/ruby
extconf.rb
checking for libxml/parser.h... no
-----
libxml2 is missing.  please visit ... for help with
installing dependencies.
-----
*** extconf.rb failed ***
...</pre></td></tr></table></div>

<p>В таком случае надо пройти по предложенной <a rel="nofollow" href="http://nokogiri.org/tutorials/installing_nokogiri.html" target="_blank">ссылке</a> и устранить зависимости, после чего повторить <code>bundle install</code>.<br />
Для RedHat-линуксов зависимости устраняются так:</p>

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

<h3>carrierwave</h3>
<p>Теперь также как и в <a href="http://blog.lukmus.ru/?p=1165">случае с Uploadify</a> нужно сгенерировать аплодер carrierwave:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rails g uploader image</pre></td></tr></table></div>

<p><em>У меня модель с фотографией называется <code>Picture</code> и у нее есть текстовое поле <code>Image</code>, все дальше описанное будет описываться в этим условием.</em></p>
<p>Теперь надо открыть сгенерированный аплодер (app/uploaders/image_uploader.rb) и привести его к такому же виду как и на странице гема на гитхабе:</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> ImageUploader <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">CarrierWave::Uploader::Base</span>
&nbsp;
  storage <span style="color:#6666ff; font-weight:bold;">CarrierWave::Storage::YandexFotki</span>
&nbsp;
  yandex_login    <span style="color:#996600;">'login'</span>
  yandex_password <span style="color:#996600;">'password'</span>
&nbsp;
  before <span style="color:#ff3333; font-weight:bold;">:cache</span>, <span style="color:#ff3333; font-weight:bold;">:remove_old_file_before_cache</span>
&nbsp;
  <span style="color:#9966CC; font-weight:bold;">def</span> remove_old_file_before_cache<span style="color:#006600; font-weight:bold;">&#40;</span>new_file<span style="color:#006600; font-weight:bold;">&#41;</span>
    remove! <span style="color:#9966CC; font-weight:bold;">unless</span> blank?
  <span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Теперь надо примонтировать аплодер к модели (у меня Picture):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">class</span> Picture <span style="color:#006600; font-weight:bold;">&lt;</span> <span style="color:#6666ff; font-weight:bold;">ActiveRecord::Base</span>
  mount_before_save_uploader <span style="color:#ff3333; font-weight:bold;">:image</span>, ImageUploader
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>И тут вроде бы все, казалось бы уже можно открыть консоль:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ rails c
Loading development environment <span class="br0">&#40;</span>Rails 3.1.1<span class="br0">&#41;</span>
&gt; pic=Picture.new
&gt; pic.remote_image_url='http://kremlin.ru/putin-platit-churovu-za-vybory.jpg'
&gt; picture.save
NameError: uninitialized constant YandexFotki::Connection::Nokogiri
from /usr/local/rvm/gems/ruby-1.9.2-p290/gems/carrierwave-yandexfotki-0.0.1/lib/yandexfotki/connection.rb:<span style="">67</span>:in `block in get_token'
...</pre></td></tr></table></div>

<p>Чтобы устранить этот косяк нужно открыть тот самый файл из ошибки (у меня /usr/local/rvm/gems/ruby-1.9.2-p290/gems/carrierwave-yandexfotki-0.0.1/lib/yandexfotki/connection.rb), найти строчку № 67:</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;">xml <span style="color: #339933;">=</span> Nokogiri<span style="color: #339933;">::</span><span style="color: #004000;">XML</span><span style="color: #009900;">&#40;</span>key_xml<span style="color: #009900;">&#41;</span></pre></td></tr></table></div>

<p>После чего вернуться в начало файла и дописать (выделено <span style="color: #333399;">фиолетовым</span>):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">&quot;yandexfotki/encryptor&quot;</span>
<span style="color:#CC0066; font-weight:bold;">require</span> <span style="color:#996600;">'nokogiri'</span>
&nbsp;
<span style="color:#9966CC; font-weight:bold;">module</span> YandexFotki
...</pre></td></tr></table></div>

<p>После этого у меня все заработало.</p>
<h3>эксплуатация</h3>
<p>В принципе она описана <a rel="nofollow" href="https://github.com/nicck/carrierwave-yandexfotki/blob/master/README.md#usage" target="_blank">здесь</a>, но я ее повторю.<br />
Загрузка файла может осуществляться как и в обычном варианте Carrierwave, я имею ввиду код в контроллере/моделе:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">pic = Picture.<span style="color:#9900CC;">new</span>
pic.<span style="color:#9900CC;">image</span> = params<span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:file</span><span style="color:#006600; font-weight:bold;">&#93;</span>
pic.<span style="color:#9900CC;">save</span>!
pic.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span></pre></td></tr></table></div>

<p>Варианты изображений можно получить так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">pic.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span>       <span style="color:#008000; font-style:italic;"># ссылка на оригинал</span>
pic.<span style="color:#9900CC;">image</span>.<span style="color:#9900CC;">url</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#ff3333; font-weight:bold;">:xl</span><span style="color:#006600; font-weight:bold;">&#41;</span>  <span style="color:#008000; font-style:italic;"># ссылка на 800x800</span></pre></td></tr></table></div>

<p>Таблица соответсвий аргументов к методу url и версии изображения:</p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2012/06/1.png"><img class="aligncenter size-full wp-image-1327" title="1" src="http://blog.lukmus.ru/wp-content/uploads/2012/06/1.png" alt="" width="515" height="216" /></a><br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2012/06/decorated_trains_in_japan_17.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/06/14/yandeks-fotkicarrierwave-na-rails-3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>определение местоположения пользователя через GeoIP на RoR 3</title>
		<link>http://blog.lukmus.ru/2012/04/13/opredelenie-mestopolozheniya-polzova/</link>
		<comments>http://blog.lukmus.ru/2012/04/13/opredelenie-mestopolozheniya-polzova/#comments</comments>
		<pubDate>Fri, 13 Apr 2012 01:14:04 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[geo]]></category>
		<category><![CDATA[geoip]]></category>
		<category><![CDATA[ROR 3]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1286</guid>
		<description><![CDATA[GeoIP позволяет определить по IP его страну и иногда даже город. Вообщем, это полезная штука, которая часто нужна сайту, особенно если он мультиязычный (или мультиязыковой). установка Как обычно, в Gemfile надо добавить gem 'geoip' после чего забандлить: bundle install БД IP Теперь надо скачать базы стран и городов, если надо, еще можно скачать базу ASNum [...]]]></description>
			<content:encoded><![CDATA[<p>GeoIP позволяет определить по IP его страну и иногда даже город. Вообщем, это полезная штука, которая часто нужна сайту, особенно если он мультиязычный (или мультиязыковой).<br />
<img class="aligncenter size-full wp-image-1287" title="natoWarsaw" src="http://blog.lukmus.ru/wp-content/uploads/2012/04/natoWarsaw.png" alt="" width="517" height="200" /><span id="more-1286"></span></p>
<h3>установка</h3>
<p>Как обычно, в <code>Gemfile</code> надо добавить</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'geoip'</pre></td></tr></table></div>

<p>после чего забандлить:</p>

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

<h3>БД IP</h3>
<p>Теперь надо скачать базы <a href="geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz" target="_blank" rel='nofollow'>стран</a> и <a href="http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz" target="_blank" rel='nofollow'>городов</a>, если надо, еще можно <a href="http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz" target="_blank" rel='nofollow'>скачать базу ASNum</a> (что это такое я не знаю). Распакованные базы надо кинуть, например, в <code>lib</code>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">$ cd lib
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
$ wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
$ wget http://geolite.maxmind.com/download/geoip/database/asnum/GeoIPASNum.dat.gz
$ gunzip *.gz
$ ls
assets  GeoIPASNum.dat  GeoIP.dat  GeoLiteCity.dat  tasks</pre></td></tr></table></div>

<h3>эксплуатация</h3>
<p>Глядя из консоли Rails, можно привести такой пример использования:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">&gt; geoip=GeoIP.new<span class="br0">&#40;</span>Rails.root.join<span class="br0">&#40;</span>'lib/GeoLiteCity.dat'<span class="br0">&#41;</span><span class="br0">&#41;</span>
&gt; location=geoip.city<span class="br0">&#40;</span>'google.com'<span class="br0">&#41;</span>
 =&gt; #&lt;struct GeoIP::City request=&quot;google.com&quot;,
ip=&quot;173.194.32.196&quot;, country_code2=&quot;US&quot;,
country_code3=&quot;USA&quot;, country_name=&quot;United States&quot;,
continent_code=&quot;NA&quot;, region_name=&quot;CA&quot;,
city_name=&quot;Mountain View&quot;, postal_code=&quot;<span style="">94043</span>&quot;,
latitude=<span style="">37.41919999999999</span>, longitude=-<span style="">122.0574</span>,
dma_code=<span style="">807</span>, area_code=<span style="">650</span>,
timezone=&quot;America/Los_Angeles&quot;&gt;
&gt; location.city_name
 =&gt; &quot;Mountain View&quot;</pre></td></tr></table></div>

<h3>ссылки</h3>
<p>rubydoc: <a href="http://rubydoc.info/gems/geoip/1.0.0/frames" target="_blank" rel='nofollow'>http://rubydoc.info/gems/geoip/1.0.0/frames</a><br />
github: <a href="https://github.com/cjheath/geoip" target="_blank" rel='nofollow'>https://github.com/cjheath/geoip</a><br />
информация о базах: <a href="http://www.maxmind.com/" target="_blank" rel='nofollow'>http://www.maxmind.com/</a><br />
<meta property="og:image" content="hhttp://blog.lukmus.ru/wp-content/uploads/2012/04/natoWarsaw.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/04/13/opredelenie-mestopolozheniya-polzova/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ROR 3. Devise. Управление пользователями</title>
		<link>http://blog.lukmus.ru/2012/03/23/ror-3-devise-upravlenie-polzovatelyami/</link>
		<comments>http://blog.lukmus.ru/2012/03/23/ror-3-devise-upravlenie-polzovatelyami/#comments</comments>
		<pubDate>Fri, 23 Mar 2012 06:21:06 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[devise]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[user]]></category>
		<category><![CDATA[управление пользователями]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1265</guid>
		<description><![CDATA[Сейчас мало таких сайтов, где не нужны были бы пользователи, точнее модель пользователей. Раньше, я как дурак, писал эту модель вручную, иногда, конечно, иначе и нельзя было поступить. А недавно я открыл для себя гем Devise для Rails, который в большинстве случаев избавляет от необходимости прописывать логику управления пользователями самому. Все, что я опишу дальше [...]]]></description>
			<content:encoded><![CDATA[<p>Сейчас мало таких сайтов, где не нужны были бы пользователи, точнее модель пользователей. Раньше, я как дурак, писал эту модель вручную, иногда, конечно, иначе и нельзя было поступить. А недавно я открыл для себя гем <a rel="nofollow" href="https://github.com/plataformatec/devise" target="_blank">Devise</a> для Rails, который в большинстве случаев избавляет от необходимости прописывать логику управления пользователями самому.<br />
<img class="aligncenter size-full wp-image-1267" title="berlin" src="http://blog.lukmus.ru/wp-content/uploads/2012/03/berlin.png" alt="" width="517" height="323" /><span id="more-1265"></span>Все, что я опишу дальше есть как на офстранице гема, так и в этих видео (русская версия Railscasts):</p>
<ol>
<li><a title="начало работы с devise" href="http://vimeo.com/14698174" target="_blank" rel="nofollow" >введение в devise</a></li>
<li><a href="http://vimeo.com/15056344" target="_blank" rel="nofollow" >настройка devise</a></li>
</ol>
<p>Все нижепроделанное относиться к RoR версии выше 3.0.1.</p>
<h2>установка</h2>
<p>Сначала, как обычно, дописываем в <code>Gemfile</code>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'devise'</pre></td></tr></table></div>

<p>и далее опять же:</p>

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

<p>Теперь надо сгенерировать/интегрировать/спарить/инсталировать/и т.д. rails-приложение и devise:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">rails generate devise:install</pre></td></tr></table></div>

<p>После этого devise напишет мол надо настроить mailer и домашнюю страницу (<code>root_url</code>). Для режима development настроить mailer можно прописав в <code>config/environments/development.rb</code> опцию:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">config.<span style="color:#9900CC;">action_mailer</span>.<span style="color:#9900CC;">default_url_options</span> =<span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#ff3333; font-weight:bold;">:host</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#996600;">'localhost:3000'</span> <span style="color:#006600; font-weight:bold;">&#125;</span></pre></td></tr></table></div>

<p>Далее надо сгенерировать модель пользователей для Devise и выполнить созданные миграции:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">rails generate devise User
rake db:migrate</pre></td></tr></table></div>

<h2>настройка и эксплуатация</h2>
<h3>маршрутизация</h3>
<p>После установки devise пропишет свои особые маршруты. Строка в <code>config/routes.rb</code> вида:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">devise_for <span style="color:#ff3333; font-weight:bold;">:users</span></pre></td></tr></table></div>

<p>мало о чем скажет, поэтому посмотреть маршруты devise можно так:</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
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">rake routes
        new_user_session GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_in<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
            user_session POST   <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_in<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
    destroy_user_session DELETE <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_out<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
           user_password POST   <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
       new_user_password GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #000000; font-weight: bold;">/</span>new<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
      edit_user_password GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #000000; font-weight: bold;">/</span>edit<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
                         PUT    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>password<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
cancel_user_registration GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>cancel<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
       user_registration POST   <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
   new_user_registration GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>sign_up<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
  edit_user_registration GET    <span style="color: #000000; font-weight: bold;">/</span>users<span style="color: #000000; font-weight: bold;">/</span>edit<span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
                         PUT    <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</span>
                         DELETE <span style="color: #000000; font-weight: bold;">/</span><span style="color: #c20cb9; font-weight: bold;">users</span><span style="color: #7a0874; font-weight: bold;">&#40;</span>.:format<span style="color: #7a0874; font-weight: bold;">&#41;</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="rails" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>=<span style="color:#5A0A0A; font-weight:bold;">link_to</span> <span style="color:#996600;">'Регистрация'</span>, new_user_registration_path <span style="color:#006600; font-weight:bold;">%&gt;</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="rails" style="font-family:monospace;"><span style="color:#006600; font-weight:bold;">&lt;%</span>=<span style="color:#5A0A0A; font-weight:bold;">link_to</span> <span style="color:#996600;">'Войти'</span>, new_user_session_path<span style="color:#006600; font-weight:bold;">%&gt;</span></pre></td></tr></table></div>

<p>Стандартные пути можно изменить подкорректировав <code>config/routes.rb</code>, используя опцию <code>path_names</code>, например, для изменения пути регистрации изменения будут выглядеть так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">devise_for <span style="color:#ff3333; font-weight:bold;">:users</span>, <span style="color:#ff3333; font-weight:bold;">:path_names</span><span style="color:#006600; font-weight:bold;">=&gt;</span><span style="color:#006600; font-weight:bold;">&#123;</span>sign_up: <span style="color:#996600;">'register'</span><span style="color:#006600; font-weight:bold;">&#125;</span></pre></td></tr></table></div>

<h3>методы</h3>
<p>Также в первом видео еще рассказали метод, как узнать авторизован ли пользователь:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">user_signed_in?</pre></td></tr></table></div>

<p>и, видимо, экземпляр класса модели User для текущего пользователя <code>current_user</code>, которая работает также как и экземпляр любой другой модели, например, узнать E-mail текущего авторизованного пользователя можно так:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">current_user.<span style="color:#9900CC;">email</span></pre></td></tr></table></div>

<h3>фильтр</h3>
<p>Еще один важный момент в начале второго видео про before_filter. Чтобы узнать недопустить неавторизованного посетителя до экшенов, нужно использовать фильтр:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="ruby" style="font-family:monospace;">before_filter <span style="color:#ff3333; font-weight:bold;">:authenticate_user</span>!</pre></td></tr></table></div>

<p>Он будет перенаправлять на страницу входа.</p>
<h3>настройка представлений</h3>
<p>Для того, чтобы иметь возможность редактировать представления devise их нужно привести к обычному виду файлов представлений:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">rails g devise:views
      create  app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>_links.erb
      invoke  form_for
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>confirmations
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>confirmations<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>passwords
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>passwords<span style="color: #000000; font-weight: bold;">/</span>edit.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>passwords<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>registrations
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>registrations<span style="color: #000000; font-weight: bold;">/</span>edit.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>registrations<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>sessions
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>sessions<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>unlocks
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>unlocks<span style="color: #000000; font-weight: bold;">/</span>new.html.erb
      invoke  erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer<span style="color: #000000; font-weight: bold;">/</span>confirmation_instructions.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer<span style="color: #000000; font-weight: bold;">/</span>reset_password_instructions.html.erb
      create    app<span style="color: #000000; font-weight: bold;">/</span>views<span style="color: #000000; font-weight: bold;">/</span>devise<span style="color: #000000; font-weight: bold;">/</span>mailer<span style="color: #000000; font-weight: bold;">/</span>unlock_instructions.html.erb</pre></td></tr></table></div>

<h3>сообщения об ошибках</h3>
<p>Все сообщения devise храняться в YML-файлах локалей, по умолчанию это <code>config/locales/devise.en.yml</code>. Для добавления своей локали нужно создать файл с аналогичным именем, например, <code>config/locales/devise.ru.yml</code>.<br />
Скачать переведенные на другие языки (в т.ч. русский) локали devise можно тут: <a rel="nofollow" href="https://github.com/plataformatec/devise/wiki/I18n" target="_blank">https://github.com/plataformatec/devise/wiki/I18n</a></p>
<h3>валидация и прочие настройки</h3>
<p>Настройки валидации, как и все остальные для этого гема, находятся в <code>config/initializers/devise.rb</code>. Отключить стандартную валидацию devise можно убрав модуль <code>:validatable</code> из модели, в данном случае <code>User</code>.<br />
А вообще в devise вагон других настроек, например, теже ключи аутентификации, а которых говорят в конце второго видео, настраиваются все в том же <code>config/initializers/devise.rb</code>.<br />
Подробнее о настройках и прочих заморочках этого гема:</p>
<ol>
<li> <a href="https://github.com/plataformatec/devise" target="_blank" rel="nofollow" >офстраница</a></li>
<li> <a href="https://github.com/plataformatec/devise/wiki" target="_blank" rel="nofollow" >вики</a></li>
<li> <a href="http://rubydoc.info/github/plataformatec/devise/master/frames" target="_blank" rel="nofollow" >rubydoc</a></li>
</ol>
<p><meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2012/03/berlin.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2012/03/23/ror-3-devise-upravlenie-polzovatelyami/feed/</wfw:commentRss>
		<slash:comments>11</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>
		<item>
		<title>rails 3. переход с sqlite3 на mysql</title>
		<link>http://blog.lukmus.ru/2011/10/24/rails-3-perehod-s-sqlite3-na-mysql/</link>
		<comments>http://blog.lukmus.ru/2011/10/24/rails-3-perehod-s-sqlite3-na-mysql/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 02:03:45 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[fedora]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[rake]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[sqlite]]></category>
		<category><![CDATA[yaml_db]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=1089</guid>
		<description><![CDATA[Существует гипотеза, что MySQL гораздо быстрее SQLite в многопользовательском приложении. Собственно, гипотеза подтверждается на всех тестах, что я видел, а также на моем собственном опыте. Подобный холивар, о том у кого длинее что быстрее можно слегкостью найти на Хабре. Весь описанный дальше процесс был проделан на Fedora 14.1 x64, однако, даю клык, что все тоже [...]]]></description>
			<content:encoded><![CDATA[<p>Существует гипотеза, что MySQL гораздо быстрее SQLite в многопользовательском приложении. Собственно, гипотеза подтверждается на всех тестах, что я видел, а также на моем собственном опыте. Подобный холивар, о том <span style="text-decoration: line-through;">у кого длинее</span> что быстрее можно слегкостью найти на Хабре. Весь описанный дальше процесс был проделан на Fedora 14.1 x64, однако, даю клык, что все тоже самое будет работать на федоре старше 11.<br />
<img class="aligncenter size-full wp-image-1090" title="post-3714-1248825341" src="http://blog.lukmus.ru/wp-content/uploads/2011/10/post-3714-1248825341.jpg" alt="" width="517" height="555" /><span id="more-1089"></span><br />
Далее я буду описывать все в том порядке, в каком делаю это я. Также я считаю, что именно такой порядок наиболее удобен для миграции с SQLite3 на MySQL.</p>
<h2>экспорт БД с sqlite3</h2>
<p>Прежде всего надо как-то сдампить старую БД на SQLite и хотелось бы это сделать без писания дополнительных скриптов. Для этого делаем нижеизложенное.<br />
Закидываем в Gemfile следующую строку:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'yaml_db'</pre></td></tr></table></div>

<p>И далее установим этот гем через bundle:</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: #7a0874; font-weight: bold;">cd</span> rails_app <span style="color: #000000; font-weight: bold;">&amp;&amp;</span> bundle <span style="color: #c20cb9; font-weight: bold;">install</span></pre></td></tr></table></div>

<p>Этот гем даст некоторые новые rake&#8217;и для работы с БД:</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
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake <span style="color: #660033;">-T</span>
...
rake db:create          <span style="color: #666666; font-style: italic;"># Create the database from ...</span>
rake db:data:dump       <span style="color: #666666; font-style: italic;"># Dump contents of database ...</span>
rake db:data:dump_dir   <span style="color: #666666; font-style: italic;"># Dump contents of database ...</span>
rake db:data:load       <span style="color: #666666; font-style: italic;"># Load contents of db/data...</span>
rake db:data:load_dir   <span style="color: #666666; font-style: italic;"># Load contents of db/data_dir ...</span>
rake db:drop            <span style="color: #666666; font-style: italic;"># Drops the database for the ...</span>
rake db:dump            <span style="color: #666666; font-style: italic;"># Dump schema and data to db/...</span>
rake db:fixtures:load   <span style="color: #666666; font-style: italic;"># Load fixtures into the current...</span>
rake db:load            <span style="color: #666666; font-style: italic;"># Load schema and data from ...</span>
rake db:migrate         <span style="color: #666666; font-style: italic;"># Migrate the database (options:...</span>
rake db:migrate:status  <span style="color: #666666; font-style: italic;"># Display status of migrations</span>
rake db:rollback        <span style="color: #666666; font-style: italic;"># Rolls the schema back to ...</span>
rake db:schema:dump     <span style="color: #666666; font-style: italic;"># Create a db/schema.rb file ...</span>
rake db:schema:load     <span style="color: #666666; font-style: italic;"># Load a schema.rb file into...</span>
rake db:seed            <span style="color: #666666; font-style: italic;"># Load the seed data from...</span>
rake db:setup           <span style="color: #666666; font-style: italic;"># Create the database, load...</span>
rake db:structure:dump  <span style="color: #666666; font-style: italic;"># Dump the database structure...</span>
rake db:version
...</pre></td></tr></table></div>

<p>Далее нижеприведенной командой экспортируем схему и содержание БД в <code>db/data.yml</code>.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;">$ </span>rake db:dump</pre></td></tr></table></div>

<p>Если БД слишком разрослась, можно попробывать вариант с <code>rake db:data:dump_dir</code>.</p>
<h2>поднимаем и настраиваем MySQL</h2>
<h3>MySQL</h3>
<p>Сразу же устанавливаем пакеты:</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> mysql mysql-server mysql-devel ruby-mysql <span style="color: #660033;">-y</span></pre></td></tr></table></div>

<p>Далее прописываем во все тот же <code>Gemfile</code>:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="" style="font-family:monospace;">gem 'mysql2'</pre></td></tr></table></div>

<p>И опять бандлим:</p>

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

<p>Стартуем сервер MySQL.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;"># </span>service mysqld start</pre></td></tr></table></div>

<p>Заходим под рутом в MySQL:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;">mysql <span style="color: #660033;">-uroot</span> <span style="color: #660033;">-p</span></pre></td></tr></table></div>

<p>Если до этого руту был задан пароль, то его надо будет ввести, если это первый заход рута, то пароль пустой.<br />
А теперь создаем базу</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="mysql" style="font-family:monospace;">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">CREATE</span> <span style="color: #990099; font-weight: bold;">DATABASE</span> railsdb CHARACTER <span style="color: #990099; font-weight: bold;">SET</span> utf8 <span style="color: #CC0099; font-weight: bold;">COLLATE</span> utf8_general_ci<span style="color: #000033;">;</span></pre></td></tr></table></div>

<p>и пользователя, попутно назначая ему права на эту БД.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="mysql" style="font-family:monospace;">mysql<span style="color: #CC0099;">&gt;</span> <span style="color: #990099; font-weight: bold;">GRANT</span> <span style="color: #990099; font-weight: bold;">ALL</span> <span style="color: #990099; font-weight: bold;">PRIVILEGES</span> <span style="color: #990099; font-weight: bold;">ON</span> railsdb.<span style="color: #CC0099;">*</span> <span style="color: #990099; font-weight: bold;">TO</span> <span style="color: #008000;">'railsuser'</span>@<span style="color: #008000;">'localhost'</span> IDENTIFIED BY <span style="color: #008000;">'railspass'</span> <span style="color: #990099; font-weight: bold;">WITH</span> <span style="color: #990099; font-weight: bold;">GRANT</span> <span style="color: #990099; font-weight: bold;">OPTION</span><span style="color: #000033;">;</span></pre></td></tr></table></div>

<p>Команда выше дает права пользователю <code>railsuser</code> с паролем <code>railspass</code> на полный доступ к БД <code>railsdb</code> c локального хоста. Подробнее о правах и как их назначить читаем на <a rel="nofollow" href="http://dev.mysql.com/doc/" target="_blank">оффсайте</a>.</p>
<h3>настройка rails-приложения</h3>
<p>Открываем config/database.yml и заменяем настройки БД нужной секции на подобные (в моем случае это development):</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="yml" style="font-family:monospace;">development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: railsdb
  pool: 5
  username: railsuser
  password: railspass
  host: localhost</pre></td></tr></table></div>

<p>Хочу предупредить, что табуляция перед параметрами, видимо, очень важна т.к. без этих табов сервер не стартанул, а с ними запустился на ура.<br />
Теперь импортируем схему и данные в БД.</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="bash" style="font-family:monospace;"><span style="color: #666666;">$ </span>rake db:load</pre></td></tr></table></div>

<p>Стоит помнить, что команда загрузки дампа может быть и немного иной, все зависит от того какую команду экспорта дампа выбирали вы в на первом шаге этого поста. Ну вот и все.<br />
<meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/10/post-3714-1248825341.jpg" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/10/24/rails-3-perehod-s-sqlite3-na-mysql/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>ROR + Passenger + Apache</title>
		<link>http://blog.lukmus.ru/2011/02/12/ror-passenger-apache/</link>
		<comments>http://blog.lukmus.ru/2011/02/12/ror-passenger-apache/#comments</comments>
		<pubDate>Sat, 12 Feb 2011 08:38:21 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[настройка и установка]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[httpd]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[passenger]]></category>
		<category><![CDATA[ROR]]></category>
		<category><![CDATA[ROR 3]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[selinux]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=942</guid>
		<description><![CDATA[После того как рельсовое приложение более-менее готово для его коммерческой эксплуатации необходимо перейти с Webrick&#8217;а на более серьезный сервер. Лично на данный момент выбрал Apache, поэтому и запишу процесс настройки ROR + Apache. Для начала нужно установить сам Apache. В RH-линуксах это делается так: 1 yum install httpd Для полноценности apache&#8217;а можно еще установить PHP: [...]]]></description>
			<content:encoded><![CDATA[<p>После того как рельсовое приложение более-менее готово для его коммерческой эксплуатации необходимо перейти с Webrick&#8217;а на более серьезный сервер. Лично на данный момент выбрал Apache, поэтому и запишу процесс настройки ROR + Apache.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2011/02/aor.png"><img class="aligncenter size-full wp-image-943" title="aor" src="http://blog.lukmus.ru/wp-content/uploads/2011/02/aor.png" alt="" width="517" height="424" /></a><span id="more-942"></span>Для начала нужно установить сам Apache. В RH-линуксах это делается так:</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;">yum install httpd</pre></td></tr></table></div>

<p>Для полноценности apache&#8217;а можно еще установить PHP:</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;">yum install php</pre></td></tr></table></div>

<p>Но я бы этого не делал, на всякий случай, чтобы не один web-shell там не работал т.к. я не видел вебшеллов под unix&#8217;ы кроме как на PHP и CGI Perl.</p>
<h2>установка passenger</h2>
<p>Далее нужно установить такую штуку как Passenger. Этот gem поможет связать Apache с ROR&#8217;ом. Оффициальная инструкция установки Passenger есть тут &#8211; <a rel="nofollow" href="http://" target="_blank">http://wiki.rubyonrails.org/deployment/apache-passenger</a>. В принципе до определенного момента я буду ей следовать.<br />
Устанавливаем сам гем:</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-apache2-module</span></pre></td></tr></table></div>

<p>Здесь скрипт скажет что нужно и что из этого у вас уже установлено. Если что-то не установлено он подскажет как установить, если же все уже есть, то установиться модуль к апачу. В случае если вам придется что-то доустановить, не забудьте после этого опять запустить этот скрипт.</p>
<h2>настройка apache</h2>
<p>Теперь самое сложное &#8211; надо настроить апач. Отворяем <code>/etc/httpd/httpd.conf</code> и колдуем.<br />
В подгружаемые модули дописываем, то что порекомендовал скрипт passenger&#8217;а:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">...</span>bla<span style="color: #339933;">-</span>bla<span style="color: #339933;">-</span>bla<span style="color: #339933;">...</span>
LoadModule disk_cache_module modules<span style="color: #339933;">/</span>mod_disk_cache<span style="color: #339933;">.</span>so
LoadModule cgi_module modules<span style="color: #339933;">/</span>mod_cgi<span style="color: #339933;">.</span>so
&nbsp;
<span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;</span>LoadModule passenger_module <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>ruby<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>1
<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>2<span style="color: #339933;">/</span>ext<span style="color: #339933;">/</span>apache2<span style="color: #339933;">/</span>mod_passenger<span style="color: #339933;">.</span>so
PassengerRoot <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>ruby<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>1<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>2
PassengerRuby <span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>bin<span style="color: #339933;">/</span>ruby
<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #0000ff;&quot;</span><span style="color: #339933;">&gt;</span>PassengerDefaultUser root<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<p>Чтобы наверняка, можно дописать еще строку выделенную темносиним.</p>
<p>Далее надо будет поколдовать с директивой <code>NameVirtualHost</code>. Возможно она и не понадобиться, а быть может и поможет. Раскомментируйте ее:</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;">NameVirtualHost <span style="color: #339933;">*:</span><span style="color: #cc66cc;">80</span></pre></td></tr></table></div>

<h3>настройка виртуального хостинга</h3>
<p>Для каждого сайта(домена) следует дописать в конец конфига что-то типа:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">&lt;</span>VirtualHost <span style="color: #339933;">*:</span><span style="color: #cc66cc;">80</span><span style="color: #339933;">&gt;</span>
    ServerName <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #800080;&quot;</span><span style="color: #339933;">&gt;</span>mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru
<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>    ServerAlias <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #800080;&quot;</span><span style="color: #339933;">&gt;</span>www<span style="color: #339933;">.</span>mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru
<span style="color: #339933;">&lt;/</span>span<span style="color: #339933;">&gt;</span>    DocumentRoot <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;/</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;">&lt;</span>strong<span style="color: #339933;">&gt;/</span>public<span style="color: #339933;">&lt;/</span>strong<span style="color: #339933;">&gt;&lt;/</span>span<span style="color: #339933;">&gt;</span>
    <span style="color: #339933;">&lt;</span>Directory <span style="color: #339933;">&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;/</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;">/&lt;/</span>span<span style="color: #339933;">&gt;&lt;</span>strong<span style="color: #339933;">&gt;&lt;</span>span style<span style="color: #339933;">=</span><span style="color: #0000ff;">&quot;color: #3366ff;&quot;</span><span style="color: #339933;">&gt;</span><span style="color: #000000; font-weight: bold;">public</span><span style="color: #339933;">/&lt;/</span>span<span style="color: #339933;">&gt;&lt;/</span>strong<span style="color: #339933;">&gt;&gt;</span>
        Allow from all
    <span style="color: #339933;">&lt;/</span>Directory<span style="color: #339933;">&gt;</span>
    RailsEnv development
    RailsBaseURI <span style="color: #339933;">/</span>
    ErrorLog logs<span style="color: #339933;">/</span>mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru<span style="color: #339933;">.</span><span style="color: #990000;">log</span>
<span style="color: #339933;">&lt;/</span>VirtualHost<span style="color: #339933;">&gt;</span></pre></td></tr></table></div>

<div id="_mcePaste" style="position: absolute; left: -10000px; top: 1319px; width: 1px; height: 1px; overflow: hidden;">

<div class="wp_syntax"><table><tr><td class="code"><pre class="php" style="font-family:monospace;">mysuperrubyonrailsunderapachesite<span style="color: #339933;">.</span>ru</pre></td></tr></table></div>

</div>
<p>Эта конфа обозначает, что содержимое директории с рельсовым приложением лежит в <code>/var/www/rails</code>, а папка <code>public</code> &#8211; та самая публичная папка рельсов где лежат CSS, JS, картинки и прочее.</p>
<p>Внимательно посмотрите какие права у каталогов. Признаком нехватки прав у апача, помимо логов,  является <code>Apache Test Page</code>.<br />
Помните, что апач по умолчанию работает под ущербным пользователем <code>apache</code>, поэтому следует дать ему права на чтение и исполнение в каталоге <code>/var/www/rails/</code>.<br />
Вторая типовая, по крайне мере моя, ошибка проявляется в том случае если в  <code>/var/www/rails/</code> лежит не само рельсовое приложение а только ссылка на <code>public</code>. Здесь, если сами рельсы лежат допустим в <code>/home/username/rails</code>, даже если вы настроите права ко всем и всякому 0777 в браузере все равно может появиться Test Page. Виновником тому, например в RH-линуксах, может стать SELinux.<br />
Отключить SELinux можно установив значение параметра <code>SELINUX=disabled</code> в файле <code>/etc/selinux/config</code>, после чего надо перезагрузиться.</p>
<p>На этом грубая настройка Apache под Ruby on Rails закончена. Запускайте Apache как умеете, у меня, например, в Fedora это выглядит так:</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;"># service httpd start</span></pre></td></tr></table></div>

<p>Не забудьте настроить iptables, выключить же его можно так:</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;"># service iptables stop</span></pre></td></tr></table></div>

<p><meta property="og:image" content="http://blog.lukmus.ru/wp-content/uploads/2011/02/aor.png" /></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/02/12/ror-passenger-apache/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>задания cron в ROR 3</title>
		<link>http://blog.lukmus.ru/2011/01/27/zadaniya-cron-v-ror-3/</link>
		<comments>http://blog.lukmus.ru/2011/01/27/zadaniya-cron-v-ror-3/#comments</comments>
		<pubDate>Thu, 27 Jan 2011 12:58:37 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[ASCII-8BIT to UTF-8]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[Encoding::UndefinedConversionError]]></category>
		<category><![CDATA[models]]></category>
		<category><![CDATA[ROR 3]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=894</guid>
		<description><![CDATA[Часто возникает необходимость в приложениях на рельсах запускать какие-то скрипты cron&#8217;ом. Однако, желательно не просто запустить скрипт, для этого особого ума не надо, а написать скрипт и запустить его так чтобы он использовал интерфейсы Rails т.е. ROR-методы работы с БД, короче говоря Active Records. Способами как сделать cron-скрипт для Rails 2.x исписан весь интернет. Собственно [...]]]></description>
			<content:encoded><![CDATA[<p>Часто возникает необходимость в приложениях на рельсах запускать какие-то скрипты cron&#8217;ом. Однако, желательно не просто запустить скрипт, для этого особого ума не надо, а написать скрипт и запустить его так чтобы он использовал интерфейсы Rails т.е. ROR-методы работы с БД, короче говоря Active Records.</p>
<p><a href="http://blog.lukmus.ru/wp-content/uploads/2011/01/27_cherepaha_8.jpg"><img class="alignleft size-medium wp-image-895" style="margin-right: 3px;" title="27_cherepaha_8" src="http://blog.lukmus.ru/wp-content/uploads/2011/01/27_cherepaha_8-223x300.jpg" alt="" width="223" height="300" /></a>Способами как сделать cron-скрипт для Rails 2.x исписан весь интернет. Собственно в Rails 3.x все практически также.</p>
<p>Открываем какую-нибудь модель или создаем новую, пусть это будет <code>rails_app/app/models/product.rb</code>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #000000; font-weight: bold;">class</span> Product <span style="color: #339933;">&lt;</span> ActiveRecord<span style="color: #339933;">::</span><span style="color: #004000;">Base</span>
<span style="color: #666666; font-style: italic;">#возможно здесь что-то есть
</span><span style="color: #990000;">end</span></pre></td></tr></table></div>

<p><span id="more-894"></span>И дописываем в класс метод собственно с самим нашим заданием, например:</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;"><span style="color: #000000; font-weight: bold;">class</span> Product <span style="color: #339933;">&lt;</span> ActiveRecord<span style="color: #339933;">::</span><span style="color: #004000;">Base</span>
  def crontask
    fl<span style="color: #339933;">=</span><span style="color: #990000;">File</span><span style="color: #339933;">.</span><span style="color: #000000; font-weight: bold;">new</span><span style="color: #009900;">&#40;</span><span style="color: #0000ff;">'crontask_result'</span><span style="color: #339933;">,</span><span style="color: #0000ff;">'w'</span><span style="color: #009900;">&#41;</span>
    fl<span style="color: #339933;">.</span>puts <span style="color: #990000;">Time</span><span style="color: #339933;">.</span>now
    fl<span style="color: #339933;">.</span>close
  <span style="color: #990000;">end</span>
<span style="color: #990000;">end</span></pre></td></tr></table></div>

<p>А теперь чтобы запустить написанный метод пишем в консоли или cron&#8217;е так:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="php" style="font-family:monospace;">$ RAILS_ENV<span style="color: #339933;">=</span>production ruby
rails_app<span style="color: #339933;">/</span>script<span style="color: #339933;">/</span>rails runner Product<span style="color: #339933;">.</span>crontask</pre></td></tr></table></div>

<p>В результате чего в корне <code>rails_app</code> будет создан файл <code>crontask_result</code> со временем запуска скрипта.</p>
<p>Это все понятно и легко, но порой при запуске методов, написанных под крон вылетает ошибка а-ля:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="php" style="font-family:monospace;"><span style="color: #339933;">/</span>usr<span style="color: #339933;">/</span>local<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>ruby<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>1<span style="color: #339933;">.</span>9<span style="color: #339933;">.</span>1<span style="color: #339933;">/</span>gems<span style="color: #339933;">/</span>railties<span style="color: #339933;">-</span>3<span style="color: #339933;">.</span>0<span style="color: #339933;">.</span>3<span style="color: #339933;">/</span>lib<span style="color: #339933;">/</span>rails
<span style="color: #339933;">/</span>commands<span style="color: #339933;">/</span>runner<span style="color: #339933;">.</span>rb<span style="color: #339933;">:</span><span style="color: #cc66cc;">50</span><span style="color: #339933;">:</span>in `<span style="color: #990000;">eval</span><span style="color: #0000ff;">': &quot;\x8B&quot; from
ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError)</span></pre></td></tr></table></div>

<p>Почитав <a rel="nofollow" href="http://redmine.ruby-lang.org/issues/show/1098" target="_blank">переписку самого Юкихиро Мацумото со многими</a>, я так понил, что этот баг не исправлен. Поэтому решаем эту проблему тупо в лоб, разбиваем метод, на части:</p>
<ul>
<li>где содержатся или обрабатываются не ASCII символы переносим в отдельные скрипты, не связанные с Rails</li>
<li>где все ASCII пишем в метод и через <code>system()</code> вызываем первую категорию скриптов, а также здесь осуществляем необходимую связь первых скриптов с Rails Active Records</li>
</ul>
<p>Как будут передаватся данные из первых скриптов вторым абсолютно все равно, через временные файлы, сокеты, кодом завершения итд.</p>
<p>У кого есть варианты получше пишите в комментариях.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/01/27/zadaniya-cron-v-ror-3/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>
