<?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>bluegold &#187; rails</title>
	<atom:link href="http://blog.bluegold.me/tag/rails/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bluegold.me</link>
	<description>OpenSolaris と MacBook で自宅ネットワークを構築するメモ</description>
	<lastBuildDate>Sat, 06 Aug 2011 16:10:12 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Redmine を監視して再起動する</title>
		<link>http://blog.bluegold.me/2010/04/monitor-and-restart-redmine-when-error-500/</link>
		<comments>http://blog.bluegold.me/2010/04/monitor-and-restart-redmine-when-error-500/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 16:35:50 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[OpenSolaris]]></category>
		<category><![CDATA[opensolaris]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[redmine]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=444</guid>
		<description><![CDATA[Redmine の頻繁に 500 Internal Error を返すようになったので、監視して再起動させるスクリプトを作りました。]]></description>
			<content:encoded><![CDATA[<div>
<p>正確には Redmine が原因なのかどうかは判明していませんが、OpenSolaris 上に構築した Redmine が起動後何時間かすると<b>500 Internal Error</b>を返すようになってしまいました。</p>
<p>Redmine は以下のような環境で動かしています。</p>
<ul>
<li>Redmine 0.9.3</li>
<li>OpenSolaris 2009.06</li>
<li>Ruby 1.8.7-p249</li>
<li>Rails 2.3.5</li>
<li>Unicorn 0.97.0</li>
<li>nginx 0.7.65</li>
</ul>
<p>Ruby は /opt/sunstudio12.1/bin/cc(Sun Studio Express 12)でビルドしています。</p>
</div>
<div>
<p>OpenSolaris に付属の /usr/bin/ruby を使っていた時には問題なく動作していたんですが、Redmine 0.9.3 にバージョナップした所、致命的な問題が発生したため、Ruby を自分でビルドするように変更していました。</p>
<p>落ちているの気がついたら手動で再起動をしていたのですが、さすがにメンドウになってきたのでスクリプトを書きました。</p>
<p><span id="more-444"></span></p>
<pre class="brush: bash;">
#!/bin/sh

while `/bin/true`
do
    http_code=`curl --insecure -w &quot;%{http_code}&quot; -s -o /dev/null https://redmine/login`
    ts=`date +&quot;%Y/%m/%d %H:%M:%S&quot;`

    if [ $http_code -eq 200 ]; then
        echo $ts OK
        sleep 300
        continue
    fi

    cd /var/www/redmine
    pid=`cat tmp/pids/unicorn.pid`

    kill -USR2 $pid
    sleep 5
    kill $pid

    echo $ts unicorn $pid reloaded.
done

exit 0
</pre>
<p>手順としては、5分おきに curl で HTTP のステータスコードのみを受け取り、<b>200 OK</b>が帰ってこない場合は再起動、という流れです。</p>
<p>Unicorn は SIGUSR2 を送ると自分自身を fork() してから終了するはずなのですが、終了せずに残るので子プロセスの起動を待ってから SIGTERM を送っています。</p>
</div>
<div>
<p>とりあえずは、これで気にはならなくなりましたが。。。</p>
<p>そのうち、God あたりに切り替えよう。</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2010/04/monitor-and-restart-redmine-when-error-500/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 2.3 のタイムゾーン</title>
		<link>http://blog.bluegold.me/2009/09/rails-2-3-active_record-timezone/</link>
		<comments>http://blog.bluegold.me/2009/09/rails-2-3-active_record-timezone/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 11:08:34 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=278</guid>
		<description><![CDATA[Rails 2.3 にて ActiveRecord のフィールドの参照のしかたによって、タイムゾーンが変わってしまう問題。]]></description>
			<content:encoded><![CDATA[<p>2006年頃に Rails 1.2 で作成したアプリケーションを Rails 2.3 にアップグレードしています。</p>
<p>プログラムの移行自体は1週間ほどで完了したのですが、テストをしていてタイムゾーン関連の問題に遭遇しました。</p>
<p>データベースに有効期限を表すフィールドがあるのですが、1時間前から1時間後まで有効なレコードを作成して、現在が有効期間内かどうかを調べるテストが失敗したので問題に気がつきました。
</p>
<p>Rails 2.x ではタイムゾーンが導入されたのは知っていたので、下のように設定を行っていました。</p>
<pre class="brush: ruby;">
config.time_zone = 'Tokyo'
config.active_record.default_timezone = 'Tokyo'
</pre>
<p>しかし、ログを見ていると JST と UTC とタイムゾーンが混ざっているようだったので、単純なアプリを作成して調べてみました。すると、以下のような結果に</p>
<pre class="brush: ruby;">
c = Sample.find(:first)
&gt;&gt; c[:created_at]
=&gt; Mon, 24 Aug 2009 17:09:49 +0000
&gt;&gt; c.created_at
=&gt; Tue, 25 Aug 2009 02:09:49 JST +09:00
&gt;&gt; c[:created_at].class
=&gt; DateTime
&gt;&gt; c.created_at.class
=&gt; ActiveSupport::TimeWithZone
</pre>
<p>同じフィールドでも [] メソッドでデータを取得するのと、フィールド名を指定して取得するので、クラスもタイムゾーンも異なるんですね。ちょっとビックリしました。
</p>
<p>どこかにタイムゾーンを意識しないコードがあって、この２つを混同してしまってるんだろうな。<br />
調べるのはメンドクサイな。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2009/09/rails-2-3-active_record-timezone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rails 1.2.6 と gem 1.3.0 を一緒に使う</title>
		<link>http://blog.bluegold.me/2008/12/rails-126-and-gem-130/</link>
		<comments>http://blog.bluegold.me/2008/12/rails-126-and-gem-130/#comments</comments>
		<pubDate>Wed, 17 Dec 2008 16:18:53 +0000</pubDate>
		<dc:creator>bg</dc:creator>
				<category><![CDATA[技術]]></category>
		<category><![CDATA[gem]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[ruby]]></category>

		<guid isPermaLink="false">http://blog.bluegold.me/?p=132</guid>
		<description><![CDATA[Rails 1.2.6 と rubygems 1.3.0 を一緒に使った時に表示される deprecated メッセージが表示されないようにするには]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://merbivore.com/" title="Merb">Merb</a>が最近はやっているようなので、インストールして使ってみようと思いました。Merb には Rubygems 1.3.0 以上が必要なのでアップデートしたところ、仕事で開発している Rails 1.2.6 で作られたアプリケーションに gem の deprecated メッセージが出てくるようになってしまいました。
</p>
<p>たとえば script/console を実行すると以下のようなメッセージが出てきます。</p>
<pre class="brush: ruby;">
$ script/console
Gem::SourceIndex#search support for String patterns is deprecated
./script/../config/boot.rb:20 is outdated
Loading development environment.
Gem::SourceIndex#search support for String patterns is deprecated
./script/../config/../config/boot.rb:20 is outdated
&gt;&gt;
</pre>
<p><span id="more-132"></span>
<p>このアプリは Rails を使っているのでとうぜんWeb用のアプリなのですが、管理用に独自のコマンドラインシェルを用意しています。こちらのコマンドの実行時にも同様のメッセージが出てきてしまっています。「Rails 2.2 系に上げるいい時期かな」とも思わないでもないのですが、製品として提供している物なので、今期末にいくつか控えている納品を終えるまではバージョンを上げるわけにもいきません。
</p>
<p>仕方がないのでクイックハック<br />
script/console の最初で stderr を /dev/null に捨てるようにしました。</p>
<pre class="brush: ruby;">
#!/usr/bin/env ruby
$stderr.reopen('/dev/null')
require File.dirname(__FILE__) + '/../config/boot'
require 'commands/console'
</pre>
<p>deprecated なメッセージを簡単に抑制する設定とかもあるんだろうか。。。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.bluegold.me/2008/12/rails-126-and-gem-130/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

