<?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; cron</title>
	<atom:link href="http://blog.lukmus.ru/tag/cron/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>задания cron в rails 3 через rake</title>
		<link>http://blog.lukmus.ru/2011/01/30/zadaniya-cron-v-rails-3-cherez-rake/</link>
		<comments>http://blog.lukmus.ru/2011/01/30/zadaniya-cron-v-rails-3-cherez-rake/#comments</comments>
		<pubDate>Sun, 30 Jan 2011 23:34:34 +0000</pubDate>
		<dc:creator>lukmus</dc:creator>
				<category><![CDATA[ruby & ruby on rails]]></category>
		<category><![CDATA[cron]]></category>
		<category><![CDATA[desc]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[rake]]></category>
		<category><![CDATA[ruby on rails 3]]></category>
		<category><![CDATA[task]]></category>

		<guid isPermaLink="false">http://blog.lukmus.ru/?p=915</guid>
		<description><![CDATA[В этой статье, я персонально для себя, опишу метод запуска задания cron в Ruby on Rails 3 через rake. Об этом способе я узнал из  комментария к статье задания cron в ROR 3, который написал Леонид Шевцов, приведя ссылку на railscasts.com. На railscasts есть видео на английском показывающее как запускать Ruby-код, использующий все преймущества Active [...]]]></description>
			<content:encoded><![CDATA[<p>В этой статье, я персонально для себя, опишу метод запуска задания cron в Ruby on Rails 3 через rake. Об этом способе я узнал из  комментария к статье <a href="http://blog.lukmus.ru/?p=894" target="_blank">задания cron в ROR 3</a>, который написал <a rel="nofollow" href="http://leonid.shevtsov.me/" target="_blank">Леонид Шевцов</a>, приведя ссылку на <a rel="nofollow" href="http://railscasts.com/episodes/66-custom-rake-tasks" target="_blank">railscasts.com</a>.<br />
<a href="http://blog.lukmus.ru/wp-content/uploads/2011/01/20100209-for-the-party.png"><img class="aligncenter size-full wp-image-917" title="20100209-for-the-party" src="http://blog.lukmus.ru/wp-content/uploads/2011/01/20100209-for-the-party.png" alt="" width="517" height="337" /></a><span id="more-915"></span><br />
На railscasts есть видео на английском показывающее как запускать Ruby-код, использующий все преймущества Active Records, а точнее работающий в среде вашего rails-приложения. Я же хочу просто резюмировать это видео и привести его в текстовый вид, заодно проверив все это на собственном опыте.</p>
<h3>запись и запуск кода</h3>
<p>Начнем с того, что если вы наберете команду <code>$ rake -T</code>, то сможете увидеть список и описание всех команд rake.<br />
Теперь подробнее. Заходим в <code>rails_app/lib/tasks/</code> и создаем файл, где собственно и будет наш код &#8211; <code>rails_app/lib/tasks/crontask.rake</code>.<br />
Открываем его и пишем для начала так:</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;">task <span style="color:#ff3333; font-weight:bold;">:greet</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Hello world!'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Возвращаемся в консоль:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake greet
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Hello world<span style="color: #000000; font-weight: bold;">!</span></pre></td></tr></table></div>

<p>В это файл можно прописать сколь угодно много таких task&#8217;ов и каждый из них будет запускатся согласно <code>rake &lt;task_name&gt;</code>.</p>
<h3>цепочка заданий</h3>
<p>Усложним пример, добавив в файл еще одна задание &#8211; <code>:ask</code>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">task <span style="color:#ff3333; font-weight:bold;">:greet</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'Hello world!'</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
task <span style="color:#ff3333; font-weight:bold;">:ask</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#ff3333; font-weight:bold;">:greet</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> <span style="color:#996600;">'How are u?!'</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>Теперь по вызову задания <code>ask</code> первоначально будет запускатся цепь: <code>greet-&gt;ask</code>:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake ask
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Hello world<span style="color: #000000; font-weight: bold;">!</span>
How are u?<span style="color: #000000; font-weight: bold;">!</span></pre></td></tr></table></div>

<h3>запуск в среде rails-приложения</h3>
<p>Если попытаться использовать в задании в таком виде какие-нибудь ресурсы среды вашего приложения, а иначе говоря обращаться к БД через Active Records, то ничего не получится.<br />
Например:</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;">task <span style="color:#ff3333; font-weight:bold;">:first_nah</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	product=Product.<span style="color:#9900CC;">first</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake first_nah
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span>  <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
rake aborted<span style="color: #000000; font-weight: bold;">!</span>
uninitialized constant Product</pre></td></tr></table></div>

<p>Чтобы все было четко делаем по логике &#8216;запуска цепочки&#8217; т.е. если нам нужна среда &#8211; запустим среду:</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;">task <span style="color:#ff3333; font-weight:bold;">:nah_first</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>
	product=Product.<span style="color:#9900CC;">first</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</span>
<span style="color:#9966CC; font-weight:bold;">end</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
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">task <span style="color:#ff3333; font-weight:bold;">:nah_first</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>
	product=Product.<span style="color:#9900CC;">first</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</span>
<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
task <span style="color:#ff3333; font-weight:bold;">:nah_last</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>
	product=Product.<span style="color:#9900CC;">last</span>
	<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>В таком случае их можно запихнуть в одну группу, пространство имен.</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="ruby" style="font-family:monospace;">namespace <span style="color:#ff3333; font-weight:bold;">:nah</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	task <span style="color:#ff3333; font-weight:bold;">:first</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>
		product=Product.<span style="color:#9900CC;">first</span>
		<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	task <span style="color:#ff3333; font-weight:bold;">:last</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>
		product=Product.<span style="color:#9900CC;">last</span>
		<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</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>В консоли:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake nah:last
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
Last_product
$ rake nah:first
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
First_product</pre></td></tr></table></div>

<h3>группы заданий</h3>
<p>Если не хотите напрягаться и запускать каждое задание новой командой, можно объединить задания в группу.</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;">namespace <span style="color:#ff3333; font-weight:bold;">:nah</span> <span style="color:#9966CC; font-weight:bold;">do</span>
        <span style="color:#008000; font-style:italic;">#код заданий :first и :last</span>
	task <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:first</span>,:last<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>В консоли:</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ rake nah:all
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
First_product
Last_product</pre></td></tr></table></div>

<h3>методы в rake</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
12
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">namespace <span style="color:#ff3333; font-weight:bold;">:shop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	task <span style="color:#ff3333; font-weight:bold;">:product</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>
		product=Product.<span style="color:#9900CC;">where</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'id &gt; ?'</span>,<span style="color:#006666;">20</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">first</span>
		<span style="color:#CC0066; font-weight:bold;">puts</span> product.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
	task <span style="color:#ff3333; font-weight:bold;">:categor</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>
		cat=Categor.<span style="color:#9900CC;">where</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'id &gt; ?'</span>,<span style="color:#006666;">20</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">first</span>
		<span style="color:#CC0066; font-weight:bold;">puts</span> cat.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	task <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:product</span>,:categor<span style="color:#006600; font-weight:bold;">&#93;</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<p>В таком случае лучше сделать метод, который будет выполнять этот запрос.</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;">namespace <span style="color:#ff3333; font-weight:bold;">:shop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	task <span style="color:#ff3333; font-weight:bold;">:product</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:#CC0066; font-weight:bold;">puts</span> echo<span style="color:#006600; font-weight:bold;">&#40;</span>Product<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
	task <span style="color:#ff3333; font-weight:bold;">:categor</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:#CC0066; font-weight:bold;">puts</span> echo<span style="color:#006600; font-weight:bold;">&#40;</span>Categor<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
	task <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:product</span>,:categor<span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
	<span style="color:#9966CC; font-weight:bold;">def</span> echo <span style="color:#006600; font-weight:bold;">&#40;</span>model_class<span style="color:#006600; font-weight:bold;">&#41;</span>
		model_class.<span style="color:#9900CC;">where</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'id &gt; ?'</span>,<span style="color:#006666;">20</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">first</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
<span style="color:#9966CC; font-weight:bold;">end</span></pre></td></tr></table></div>

<h3>описание заданий</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
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="ruby" style="font-family:monospace;">namespace <span style="color:#ff3333; font-weight:bold;">:shop</span> <span style="color:#9966CC; font-weight:bold;">do</span>
	desc <span style="color:#996600;">'Show first product, which id &gt; 20'</span>
	task <span style="color:#ff3333; font-weight:bold;">:product</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:#CC0066; font-weight:bold;">puts</span> echo<span style="color:#006600; font-weight:bold;">&#40;</span>Product<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
	desc <span style="color:#996600;">'Show first categor, which id &gt; 20'</span>
	task <span style="color:#ff3333; font-weight:bold;">:categor</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:#CC0066; font-weight:bold;">puts</span> echo<span style="color:#006600; font-weight:bold;">&#40;</span>Categor<span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">title</span>
	<span style="color:#9966CC; font-weight:bold;">end</span>
&nbsp;
        desc <span style="color:#996600;">'Show first product and category'</span>
	task <span style="color:#ff3333; font-weight:bold;">:all</span> <span style="color:#006600; font-weight:bold;">=&gt;</span> <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#ff3333; font-weight:bold;">:product</span>,:categor<span style="color:#006600; font-weight:bold;">&#93;</span>
&nbsp;
	<span style="color:#9966CC; font-weight:bold;">def</span> echo <span style="color:#006600; font-weight:bold;">&#40;</span>model_class<span style="color:#006600; font-weight:bold;">&#41;</span>
		model_class.<span style="color:#9900CC;">where</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#996600;">'id &gt; ?'</span>,<span style="color:#006666;">20</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="color:#9900CC;">first</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>Теперь в консоли можно увидеть справку по командам.</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="bash" style="font-family:monospace;">$ rake <span style="color: #660033;">-T</span>
<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000; font-weight: bold;">/</span>home<span style="color: #000000; font-weight: bold;">/</span>myusername<span style="color: #000000; font-weight: bold;">/</span>rails3<span style="color: #000000; font-weight: bold;">/</span>rails_app<span style="color: #7a0874; font-weight: bold;">&#41;</span>
rake about              <span style="color: #666666; font-style: italic;"># List versions of all Rails...</span>
...
rake shop:all           <span style="color: #666666; font-style: italic;"># Show first product and categor</span>
rake shop:categor       <span style="color: #666666; font-style: italic;"># Show first categor, which id &gt; 20</span>
rake shop:product       <span style="color: #666666; font-style: italic;"># Show first product, which id &gt; 20</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://blog.lukmus.ru/2011/01/30/zadaniya-cron-v-rails-3-cherez-rake/feed/</wfw:commentRss>
		<slash:comments>3</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>
