<?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; ASCII-8BIT to UTF-8</title>
	<atom:link href="http://blog.lukmus.ru/tag/ascii-8bit-to-utf-8/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 в 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>
