<?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>func09</title>
	<atom:link href="http://www.func09.com/wordpress/feed" rel="self" type="application/rss+xml" />
	<link>http://www.func09.com/wordpress</link>
	<description>Just another WordPress weblog</description>
	<lastBuildDate>Wed, 03 Feb 2010 03:50:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>「ナゼナゼくん」というサービスが面白い</title>
		<link>http://www.func09.com/wordpress/archives/733</link>
		<comments>http://www.func09.com/wordpress/archives/733#comments</comments>
		<pubDate>Wed, 03 Feb 2010 03:50:40 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[Webサービス]]></category>
		<category><![CDATA[WEB]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=733</guid>
		<description><![CDATA[前田製作所さんの作った「ナゼナゼくん」というサービスがおもしろい。

自分の問題だと思っている事柄を入力すると、「なんで××なのですか？」としつこく質問されつづけているうちに、自分と向き合わざるを得なくなるツールです。
 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://maedaseisaku.com/">前田製作所</a>さんの作った「<a href="http://maedaseisaku.com/labs/nazenaze/">ナゼナゼくん</a>」というサービスがおもしろい。</p>

<p>自分の問題だと思っている事柄を入力すると、「なんで××なのですか？」としつこく質問されつづけているうちに、自分と向き合わざるを得なくなるツールです。</p>

<p><a href="http://www.func09.com/wordpress/wp-content/uploads/9f24719ae51e10438bcdd0a464f23645.jpg"><img src="http://www.func09.com/wordpress/wp-content/uploads/9f24719ae51e10438bcdd0a464f23645.jpg" alt="" title="ナゼナゼくん" width="550" height="513" class="alignnone size-full wp-image-732" /></a></p>

<p><a href="http://www.func09.com/wordpress/wp-content/uploads/6b46eb8e7a3afa24e7eab266c9f46fce.jpg"><img src="http://www.func09.com/wordpress/wp-content/uploads/6b46eb8e7a3afa24e7eab266c9f46fce.jpg" alt="" title="ナゼナゼくん-1" width="550" height="487" class="alignnone size-full wp-image-731" /></a></p>

<p>まぁ、どんな不満も結局は自分に問題があるという結果になってしまうというか、そうでない方が問題なのだけど、いくらWebサービスとは言え、質問攻めにされるのはいい気分じゃないです。</p>

<p>結構むかむかして、心がささくれだってくるんですが、訳のわからんキャラのせいでどーでもよくなります。</p>

<p><a href="http://www.func09.com/wordpress/wp-content/uploads/05c6bbde9548ed4e88775fbc0d56ab25.jpg"><img src="http://www.func09.com/wordpress/wp-content/uploads/05c6bbde9548ed4e88775fbc0d56ab25.jpg" alt="" title="ナゼナゼくん-2" width="186" height="164" class="alignnone size-full wp-image-736" /></a></p>

<p>つーか何、残像してんだよ。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/733/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[rails]delayed_jobの再試行ロジックについてメモ</title>
		<link>http://www.func09.com/wordpress/archives/726</link>
		<comments>http://www.func09.com/wordpress/archives/726#comments</comments>
		<pubDate>Tue, 15 Dec 2009 11:28:52 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[日記]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=726</guid>
		<description><![CDATA[Railsで非同期処理？

railsで非同期処理をやる場合、最近はdelayed_jobがメジャーらしいですね。

以前はbackgrounDRbが定番だったようだけど、EngineYardが「友達にBackgroun [...]]]></description>
			<content:encoded><![CDATA[<h2>Railsで非同期処理？</h2>

<p>railsで非同期処理をやる場合、最近は<a href="http://github.com/collectiveidea/delayed_job">delayed_job</a>が<a href="http://ruby-toolbox.com/categories/queueing.html">メジャーらしい</a>ですね。</p>

<p>以前はbackgrounDRbが定番だったようだけど、EngineYardが「<a href="http://www.engineyard.com/blog/2009/5-tips-for-deploying-background-jobs/">友達にBackgrounDRbを使わせるな</a>」とまで書いているので、そこまで言われると使う気になりませんでした。実際リソース食いだったし。</p>

<h2>使い方参考ページ</h2>

<p>使い方はそんなに難しくないので、ここで説明することは放棄します。</p>

<p><a href="http://github.com/collectiveidea/delayed_job/blob/master/README.textile">README</a>と<a href="http://railscasts.com/episodes/171-delayed-job">Railscastsのエピソード171</a>でなんとかなると思います。</p>

<h2>再試行のロジック</h2>

<p>いろいろとすっとばして本題、キューの再試行のロジックが変だなぁと思ったのでメモです。</p>

<h3>Delayed::Job::max_attempts</h3>

<p>delayed_jobには試行回数上限があって、この上限値を超えるまでリトライしつづけます。
デフォルトは25回で、Delayed::Job::max_attempts という定数に設定されています。</p>

<h3>Delayed::Worker::sleep_delay</h3>

<p>ワーカーが起動するインターバルです。デフォルトは5秒。</p>

<p>例えば絶対に失敗するキューがあった時、<br /></p>

<div class="syntax_hilite"><div id="code-2">
<div class="code">キュー失敗、５秒待機、キュー失敗、５秒待機、（以下<span style="color:#800000;">25</span>回失敗するまで繰り返し）</div>
</div></div>

<p><br />
という流れを勝手にイメージしていたのですが、そうではないみたいです。<br /></p>

<h3>キューが失敗した時の再スケジューリング</h3>

<p>キューが失敗すると、次に実行する予定時刻を決めます。そのロジックが</p>

<blockquote>On failure, the job is scheduled again in 5 seconds + N ** 4, where N is the number of retries.</blockquote>

<p>となっています。</p>

<p>「トライした回数の4乗に5秒足した時間」後にリトライをするよう再スケジューリングするので、失敗すればするほどインターバルが開いていきます。</p>

<p>1回失敗したら次回のリトライは6秒後 <br />
2回失敗したら次回のリトライは21秒後 <br />
3回失敗したら次回のリトライは86秒後 <br />
4回失敗したら次回のリトライは261秒後 <br />
5回失敗したら次回のリトライは630秒後 <br />
6回失敗したら次回のリトライは1301秒後 <br />
7回失敗したら次回のリトライは2406秒後 <br />
8回失敗したら次回のリトライは4101秒後 <br />
9回失敗したら次回のリトライは6566秒後 <br />
10回失敗したら次回のリトライは10005秒後 <br /></p>

<p>最初の方は１分以内にリトライさせますが、10回目ともなるとリトライは２時間後。<br />
何度も失敗していると、もうこいつアカンわ・・と見捨てられていく感じを良く表現したロジックですねー。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/726/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mixiアプリでの外部通信のあれこれを調べた</title>
		<link>http://www.func09.com/wordpress/archives/721</link>
		<comments>http://www.func09.com/wordpress/archives/721#comments</comments>
		<pubDate>Thu, 19 Nov 2009 07:14:25 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[actionscript3.0]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[mixi]]></category>
		<category><![CDATA[OpenSocial]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=721</guid>
		<description><![CDATA[久しぶりにmixiアプリの事を調査したよ。

多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど
ぐぐってもわからなかったので。。

iframeで外部ページを埋め込めるか？

mixiアプリ [...]]]></description>
			<content:encoded><![CDATA[<p>久しぶりにmixiアプリの事を調査したよ。</p>

<p>多分日頃からOpenSocial開発をしてる人には当たり前のことなんだろうけど<br />
ぐぐってもわからなかったので。。</p>

<h2>iframeで外部ページを埋め込めるか？</h2>

<p>mixiアプリはそもそもiframe内にgadget.xmlをキャッシュされた状態で起動する。</p>

<p>つまり、mixi.jp内のページにmixi-platform.comにキャッシュされたコンテンツを表示していて<br />
さらにその中で別ドメインなコンテンツを表示できるのか？</p>

<p>結論としてはできる。
ただ外部ページからではOpenSocialAPIに接触しようがないから、不便は不便。</p>

<p>iframeの中にfacebookアプリを埋め込んだりもできたよ。<br />
でもmixiアプリ上で認証させるのは多分規約違反。</p>

<p>iframeで外部コンテンツを表示するっていう作法も、外部サイトへの遷移の規約に従ってない気がするのでアウトかな？</p>

<p>どうでしょう？</p>

<h2>Flashから外部コンテンツとの通信</h2>

<p>OpenSocialのFlash埋め込みAPIを使って、配置したSWFから<br />
URLLoaderなんかを使って普通にクロスドメインな通信ができるかチェック。</p>

<p>これもできる。相手のサーバから拒否されてなければ。</p>

<p>JavaScriptはXHRを使えないから（ひょっとして使える？）、makeRequestするわけだけど<br />
Flashは普通に通信できるなら、mixiアプリは開発しやすさで言えばFlashで作るに限るってことかなぁ。</p>

<p>makeRequestはoAuthの署名リクエストが使えるので、通信にセキュリティを保証したい場合は有効だと思う。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/721/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Railsのソースの中に「らきすた」が出てくる件</title>
		<link>http://www.func09.com/wordpress/archives/716</link>
		<comments>http://www.func09.com/wordpress/archives/716#comments</comments>
		<pubDate>Mon, 02 Nov 2009 10:18:12 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=716</guid>
		<description><![CDATA[なんかto_jsonについて調べてたら

activerecord/lib/active_record/serializers/json_serializer.rb

にらきすたのこなたが出てくるんだけど、これって有名な [...]]]></description>
			<content:encoded><![CDATA[<p>なんかto_jsonについて調べてたら</p>

<p>activerecord/lib/active_record/serializers/json_serializer.rb</p>

<p>にらきすたのこなたが出てくるんだけど、これって有名なんだろうか・・。</p>

<p>あまりにも意外すぎて、なんの作業してたか忘れたよ。いい迷惑だ！</p>

<p><a href="http://github.com/rails/rails/blob/55501b9f6ab46d45db04a81956579402511ad092/activerecord/lib/active_record/serializers/json_serializer.rb#L18-75">http://github.com/rails/rails/blob/55501b9f6ab46d45db04a81956579402511ad092/activerecord/lib/active_record/serializers/json_serializer.rb#L18-75</a></p>

<p>--</p>

<p>追記：</p>

<p>例えばこんな感じ、コメントの中にサンプルコードとして登場します</p>

<div class="syntax_hilite"><div id="code-4">
<div class="code">#&nbsp; &nbsp;konata = User.<span style="">find</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; #&nbsp; &nbsp;ActiveRecord::<span style="">Base</span>.<span style="">include_root_in_json</span> = true<br />
&nbsp; &nbsp; #&nbsp; &nbsp;konata.<span style="">to_json</span><br />
&nbsp; &nbsp; #&nbsp; &nbsp;# =&gt; <span style="color:#006600; font-weight:bold;">&#123;</span> <span style="color:#CC0000;">"user"</span>: <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#CC0000;">"id"</span>: <span style="color:#800000;">1</span>, <span style="color:#CC0000;">"name"</span>: <span style="color:#CC0000;">"Konata Izumi"</span>, <span style="color:#CC0000;">"age"</span>: <span style="color:#800000;">16</span>,<br />
&nbsp; &nbsp; #&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span style="color:#CC0000;">"created_at"</span>: <span style="color:#CC0000;">"2006/08/01"</span>, <span style="color:#CC0000;">"awesome"</span>: true<span style="color:#006600; font-weight:bold;">&#125;</span> <span style="color:#006600; font-weight:bold;">&#125;</span></div>
</div></div>

<p><br /></p>

<p>はてブのコメントによると２年前からコードの中に存在していたらしい。<br />
アニメ好きな外人のコミッターが犯人だったんすね。</p>

<p>http://blog.codefront.net/2007/10/15/konata-izumi-in-edge-rails/</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/716/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Railscastsと同じTextMateのテーマ</title>
		<link>http://www.func09.com/wordpress/archives/712</link>
		<comments>http://www.func09.com/wordpress/archives/712#comments</comments>
		<pubDate>Fri, 30 Oct 2009 08:54:00 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[textmate]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=712</guid>
		<description><![CDATA[

RailsCasts大好きです。


Rails好き
わかりやすい
ネタが早い
声が素敵


などいろいろ良い点がありますね。

さて、最近TextMateを使うようになりまして（メインはNetBeansです）
あこ [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.func09.com/wordpress/wp-content/uploads/2009/10/friendship.rb-—-bdd_sample.jpg" alt="friendship.rb — bdd_sample" title="friendship.rb — bdd_sample" width="550" height="326" class="alignnone size-full wp-image-713" /></p>

<p><a href="http://railscasts.com/">RailsCasts</a>大好きです。</p>

<ul>
<li>Rails好き</li>
<li>わかりやすい</li>
<li>ネタが早い</li>
<li>声が素敵</li>
</ul>

<p>などいろいろ良い点がありますね。</p>

<p>さて、最近TextMateを使うようになりまして（メインはNetBeansです）
あこがれのRailsCastsみたいな色にしたいと奮闘しましたが
本家からダウンロードできるのでした・・</p>

<p><a href="http://railscasts.com/about">http://railscasts.com/about</a></p>

<p>好きな人はぜひ！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/712/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ApplicationHelperのRSpecを書くときメモ</title>
		<link>http://www.func09.com/wordpress/archives/709</link>
		<comments>http://www.func09.com/wordpress/archives/709#comments</comments>
		<pubDate>Mon, 19 Oct 2009 08:12:05 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=709</guid>
		<description><![CDATA[RailsでApplicationHelperのスペックを書くときにハマったのでメモ。

準備

まず普通にスペックを書く場合

spec/helpers/appliction_helper_spec.rbを以下のように [...]]]></description>
			<content:encoded><![CDATA[<p>RailsでApplicationHelperのスペックを書くときにハマったのでメモ。</p>

<h2>準備</h2>

<p>まず普通にスペックを書く場合</p>

<p>spec/helpers/appliction_helper_spec.rbを以下のように準備</p>

<div class="syntax_hilite"><div id="code-7">
<div class="code">require File.<span style="">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span>File.<span style="">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span>__FILE__<span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color:#CC0000;">'/../spec_helper'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
describe ApplicationHelper, :type =&gt; :helper do<br />
<br />
&nbsp; helper_name :application<br />
&nbsp; %w<span style="color:#006600; font-weight:bold;">&#123;</span>hoge<span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">each</span> do |method_name|<br />
&nbsp; &nbsp; it <span style="color:#CC0000;">"##{method_name}メソッドが存在すること"</span> do<br />
&nbsp; &nbsp; &nbsp; helper.<span style="">should</span> be_respond_to<span style="color:#006600; font-weight:bold;">&#40;</span>method_name<span style="color:#006600; font-weight:bold;">&#41;</span><br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
<br />
end</div>
</div></div>

<p><br /></p>

<p>helper_nameでへルーパー名を定義しておくのがポイント。<br />
そしてExampleの中から「helper」を通じて、エクスペクテーションを書いていきます。（言葉の使い方あってる？）</p>

<h2>リクエストを使うスペックを書きたい場合</h2>

<p>ヘルパーメソッドの中でリクエストを参照する場合（そもそもヘルパーがリクエストを参照するのが美しいことなのか疑問を抱きましたが、とりあえず無視）</p>

<p>ApplicationControllerにスタブアクションを作ってあげる、というやり方でなんとかしました。</p>

<div class="syntax_hilite"><div id="code-8">
<div class="code">require File.<span style="">expand_path</span><span style="color:#006600; font-weight:bold;">&#40;</span>File.<span style="">dirname</span><span style="color:#006600; font-weight:bold;">&#40;</span>__FILE__<span style="color:#006600; font-weight:bold;">&#41;</span> + <span style="color:#CC0000;">'/../spec_helper'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
<br />
describe ApplicationHelper, :type =&gt; :helper do<br />
<br />
&nbsp; class ApplicationController<br />
&nbsp; &nbsp; def stub_action<br />
&nbsp; &nbsp; &nbsp; render :text =&gt; self<br />
&nbsp; &nbsp; end<br />
&nbsp; end<br />
<br />
&nbsp; helper_name :application<br />
<br />
&nbsp; it <span style="color:#CC0000;">"ヘルパーの中からリクエストを参照できること"</span> do<br />
&nbsp; &nbsp; get :stub_action<br />
&nbsp; &nbsp; helper.<span style="">mobile_tracking_code</span>.<span style="">should</span> be_xxxx<br />
&nbsp; end<br />
<br />
end</div>
</div></div>

<p><br /></p>

<p>こんな感じで、普通にコントローラースペックを書くときのようにgetとかpostとかヘルパースペックの中からリクエストを使ったテストを一応かけます。</p>

<p>もっと良い方法がある気がする。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/709/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[rails] BackgrounDRbのメモ</title>
		<link>http://www.func09.com/wordpress/archives/688</link>
		<comments>http://www.func09.com/wordpress/archives/688#comments</comments>
		<pubDate>Wed, 30 Sep 2009 08:12:43 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=688</guid>
		<description><![CDATA[個人的メモ

結構リソース食うので次はdelayed_jobにしたい・・

実行してことはあるけど、正常に終了してないキューを取得する


BdrbJobQueue.find&#40;:all, :conditions  [...]]]></description>
			<content:encoded><![CDATA[<p>個人的メモ</p>

<p>結構リソース食うので次はdelayed_jobにしたい・・</p>

<h2>実行してことはあるけど、正常に終了してないキューを取得する</h2>

<div class="syntax_hilite"><div id="code-12">
<div class="code">BdrbJobQueue.<span style="">find</span><span style="color:#006600; font-weight:bold;">&#40;</span>:all, :conditions =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0000;">'finished = ? AND taken = ?'</span>,<span style="color:#800000;">0</span>,<span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span></div>
</div></div>

<p><br /></p>

<h2>キューをもう一回実行させる</h2>

<div class="syntax_hilite"><div id="code-13">
<div class="code">BdrbJobQueue#release_job</div>
</div></div>

<p><br /></p>

<h2>上の合わせ技</h2>

<div class="syntax_hilite"><div id="code-14">
<div class="code">BdrbJobQueue.<span style="">find</span><span style="color:#006600; font-weight:bold;">&#40;</span>:all, :conditions =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0000;">'finished = ? AND taken = ?'</span>,<span style="color:#800000;">0</span>,<span style="color:#800000;">1</span><span style="color:#006600; font-weight:bold;">&#93;</span><span style="color:#006600; font-weight:bold;">&#41;</span>.<span style="">each</span> do |job|<br />
&nbsp; job.<span style="">release_job</span><br />
end</div>
</div></div>

<p><br /></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/688/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[rails] paperclipでAmazon CloudFrontを使う</title>
		<link>http://www.func09.com/wordpress/archives/680</link>
		<comments>http://www.func09.com/wordpress/archives/680#comments</comments>
		<pubDate>Thu, 10 Sep 2009 10:55:11 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[aws]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=680</guid>
		<description><![CDATA[Amazon CloudFrontはAmazon S3上のファイルをキャッシュするソリューションです。

前回paperclipからS3を使う設定はわかったので、今回はさらにCloudFrontを利用するための設定です
 [...]]]></description>
			<content:encoded><![CDATA[<p>Amazon CloudFrontはAmazon S3上のファイルをキャッシュするソリューションです。</p>

<p><a href="http://www.func09.com/wordpress/archives/674">前回paperclipからS3を使う設定</a>はわかったので、今回はさらにCloudFrontを利用するための設定です</p>

<h2>前回のおさらい</h2>

<div class="syntax_hilite"><div id="code-20">
<div class="code">has_attached_file :avatar,<br />
&nbsp; :storage =&gt; :s3,<br />
&nbsp; :s3_credentials =&gt; <span style="color:#CC0000;">"#{RAILS_ROOT}/config/s3.yml"</span>,<br />
&nbsp; :path =&gt; <span style="color:#CC0000;">":attachment/:id/:style.:extension"</span>,<br />
&nbsp; :bucket =&gt; <span style="color:#CC0000;">'mybucket'</span></div>
</div></div>

<p><br /></p>

<p>前回こんな感じでS3の設定をしました。</p>

<p>コンソールから利用してみると</p>

<div class="syntax_hilite"><div id="code-21">
<div class="code">user = User.<span style="">new</span><br />
user.<span style="">avatar</span> = File.<span style="">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'/tmp/myface.jpg'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
user.<span style="">save</span><br />
<br />
puts user.<span style="">avatar</span>.<span style="">url</span> #=&gt; http:<span style="color:#FF9933; font-style:italic;">//mybucket.s3.amazonaws.com/avatar/1/original.jpg </span></div>
</div></div>

<p><br /></p>

<p>こんな感じでS3のURLがとれるようになっているはず。</p>

<h2>s3_host_aliasを効かす</h2>

<p>キャッシュサービスであるCloudFrontを利用する場合は、ホスト名を適宜変えるだけなので
paperclipが勝手にやってくれるといいなぁ〜なんて思いました。</p>

<div class="syntax_hilite"><div id="code-22">
<div class="code">has_attached_file :avatar,<br />
&nbsp; :storage =&gt; :s3,<br />
&nbsp; :s3_credentials =&gt; <span style="color:#CC0000;">"#{RAILS_ROOT}/config/s3.yml"</span>,<br />
&nbsp; :path =&gt; <span style="color:#CC0000;">":attachment/:id/:style.:extension"</span>,<br />
&nbsp; :bucket =&gt; <span style="color:#CC0000;">'mybucket'</span>,<br />
&nbsp; :s3_host_alias =&gt; <span style="color:#CC0000;">"xxxxxxxxxxxx.cloudfront.net"</span>,<br />
&nbsp; :url =&gt; <span style="color:#CC0000;">":s3_alias_url"</span></div>
</div></div>

<p><br /></p>

<p>オプションが２つ増えてます</p>

<ul>
<li>:s3_host_alias は、エイリアスのFQDNを記述しておきます。</li>
<li>:url には「":s3_alias_url"」を記述します。注意なのは、rubyのシンボルじゃなくて、文字列だってところです。ハマりました。</li>
</ul>

<div class="syntax_hilite"><div id="code-23">
<div class="code">user = User.<span style="">new</span><br />
user.<span style="">avatar</span> = File.<span style="">open</span><span style="color:#006600; font-weight:bold;">&#40;</span><span style="color:#CC0000;">'/tmp/myface.jpg'</span><span style="color:#006600; font-weight:bold;">&#41;</span><br />
user.<span style="">save</span><br />
<br />
puts user.<span style="">avatar</span>.<span style="">url</span> #=&gt; http:<span style="color:#FF9933; font-style:italic;">//xxxxxxxxxxxx.cloudfront.net/avatar/1/original.jpg </span></div>
</div></div>

<p><br /></p>

<p>わーーこりゃ幸せだ。</p>

<h2>余談</h2>

<p>さらにサイト全体でアセット関係（public以下）もCloudFrontにしたければ</p>

<p>config/environments/#{RAILS_ENV}.rb 内で</p>

<div class="syntax_hilite"><div id="code-24">
<div class="code">config.<span style="">action_controller</span>.<span style="">asset_host</span> = <span style="color:#CC0000;">"http://xxxxxxxxxxxx.cloudfront.net"</span></div>
</div></div>

<p><br /></p>

<p>こうしとけば、image_path()やらimage_tag()やらjavascript_include_tag()やらを使ったときに、リクエスト先を書き換えてくれてさらに幸せ度アップ</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/680/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[Rails] PaperClipを使って本番の時だけAmazon S3を使う</title>
		<link>http://www.func09.com/wordpress/archives/674</link>
		<comments>http://www.func09.com/wordpress/archives/674#comments</comments>
		<pubDate>Wed, 09 Sep 2009 04:23:30 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rails]]></category>
		<category><![CDATA[s3]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=674</guid>
		<description><![CDATA[PaperClipはとってもシンプルなActiveRecordで添付ファイルを管理するプラグインです。

http://github.com/thoughtbot/paperclip/tree/master

便利すぎて [...]]]></description>
			<content:encoded><![CDATA[<p>PaperClipはとってもシンプルなActiveRecordで添付ファイルを管理するプラグインです。</p>

<p><a href="http://github.com/thoughtbot/paperclip/tree/master">http://github.com/thoughtbot/paperclip/tree/master</a></p>

<p>便利すぎて鼻血がでそうなプラグインです</p>

<h2>使い方のおさらい</h2>

<p>カラムを追加して</p>

<div class="syntax_hilite"><div id="code-30">
<div class="code">class AddAvatarColumnsToUser &lt;ActiveRecord::<span style="">Migration</span><br />
&nbsp; &nbsp; def self.<span style="">up</span><br />
&nbsp; &nbsp; &nbsp; add_column :users, :avatar_file_name,&nbsp; &nbsp; :string<br />
&nbsp; &nbsp; &nbsp; add_column :users, :avatar_content_type, :string<br />
&nbsp; &nbsp; &nbsp; add_column :users, :avatar_file_size,&nbsp; &nbsp; :integer<br />
&nbsp; &nbsp; &nbsp; add_column :users, :avatar_updated_at,&nbsp; &nbsp;:datetime<br />
&nbsp; &nbsp; end<br />
<br />
&nbsp; &nbsp; def self.<span style="">down</span><br />
&nbsp; &nbsp; &nbsp; remove_column :users, :avatar_file_name<br />
&nbsp; &nbsp; &nbsp; remove_column :users, :avatar_content_type<br />
&nbsp; &nbsp; &nbsp; remove_column :users, :avatar_file_size<br />
&nbsp; &nbsp; &nbsp; remove_column :users, :avatar_updated_at<br />
&nbsp; &nbsp; end<br />
&nbsp; end</div>
</div></div>

<p><br /></p>

<p>モデルクラスで定義</p>

<div class="syntax_hilite"><div id="code-31">
<div class="code">class User &lt;ActiveRecord::<span style="">Base</span><br />
&nbsp; &nbsp; has_attached_file :avatar<br />
end</div>
</div></div>

<p><br /></p>

<p>とするだけですね。
詳細は<a href="http://rdoc.info/projects/thoughtbot/paperclip">RDoc</a>をみてください</p>

<h2>Amazon S3を使う</h2>

<p>PaperClipはストレージに<a href="http://rdoc.info/rdoc/thoughtbot/paperclip/blob/d6ebd321c801e88a173dd5f929db36db05373893/Paperclip/Storage/S3.html">S3を使うためのオプション</a>があります</p>

<div class="syntax_hilite"><div id="code-32">
<div class="code">has_attached_file :avatar,<br />
&nbsp; &nbsp; :storage =&gt; :s3,<br />
&nbsp; &nbsp; :s3_credentials =&gt; <span style="color:#CC0000;">"#{RAILS_ROOT}/config/s3.yml"</span>,<br />
&nbsp; &nbsp; :path =&gt; <span style="color:#CC0000;">":attachment/:id/:style.:extension"</span>,<br />
&nbsp; &nbsp; :bucket =&gt; <span style="color:#CC0000;">'mybucket'</span></div>
</div></div>

<p><br /></p>

<p>config/s3.ymlには</p>

<div class="syntax_hilite"><div id="code-33">
<div class="code">access_key_id: <span style="color:#800000;">456</span>...<br />
<span style="">secret_access_key</span>: <span style="color:#800000;">456</span>...</div>
</div></div>

<p><br /></p>

<p>こんな感じのアクセスキーとシークレットキーを置いておきます</p>

<h2>productionでだけS3を使いたい</h2>

<p>開発中はローカルで完結したい場合は</p>

<div class="syntax_hilite"><div id="code-34">
<div class="code">has_attached_file :avatar, Proc.<span style="">new</span> <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; if RAILS_ENV == <span style="color:#CC0000;">'production'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; :storage =&gt; :s3,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :s3_credentials =&gt; <span style="color:#CC0000;">"#{RAILS_ROOT}/config/s3.yml"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :path =&gt; <span style="color:#CC0000;">":attachment/:id/:style.:extension"</span>,<br />
&nbsp; &nbsp; &nbsp; &nbsp; :bucket =&gt; <span style="color:#CC0000;">'mybucket'</span><br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; else<br />
&nbsp; &nbsp; &nbsp; <span style="color:#006600; font-weight:bold;">&#123;</span><span style="color:#006600; font-weight:bold;">&#125;</span><br />
&nbsp; &nbsp; end<br />
&nbsp; <span style="color:#006600; font-weight:bold;">&#125;</span>.<span style="">call</span></div>
</div></div>

<p><br /></p>

<p>こんな感じでいいかな</p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/674/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>[rails] map.resourcesでいらないアクションを外す</title>
		<link>http://www.func09.com/wordpress/archives/671</link>
		<comments>http://www.func09.com/wordpress/archives/671#comments</comments>
		<pubDate>Fri, 04 Sep 2009 08:50:37 +0000</pubDate>
		<dc:creator>haga</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[ruby on rails]]></category>
		<category><![CDATA[rails]]></category>

		<guid isPermaLink="false">http://www.func09.com/wordpress/?p=671</guid>
		<description><![CDATA[こんにちは、久々ですね

Railsでroutes.rbは本当に便利ですよね。


map.resources :users




なんて書くだけで、RESTFulなAPIが用意されます。


index
new
cr [...]]]></description>
			<content:encoded><![CDATA[<p>こんにちは、久々ですね</p>

<p>Railsでroutes.rbは本当に便利ですよね。</p>

<div class="syntax_hilite"><div id="code-37">
<div class="code">map.<span style="">resources</span> :users</div>
</div></div>

<p><br /></p>

<p>なんて書くだけで、RESTFulなAPIが用意されます。</p>

<ul>
<li>index</li>
<li>new</li>
<li>create</li>
<li>show</li>
<li>edit</li>
<li>update</li>
<li>destroy</li>
</ul>

<p>に対応したURLをRailsがよしなにやってくれますよね。</p>

<p>しかし、こんなにたくさんのアクションはいらないー。わしゃcreateとshowだけでいいんじゃーなんて時もあったりします。そんなときは</p>

<div class="syntax_hilite"><div id="code-38">
<div class="code">map.<span style="">resources</span> :users, <img src='http://www.func09.com/wordpress/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> nly =&gt; <span style="color:#006600; font-weight:bold;">&#91;</span><span style="color:#CC0000;">'create'</span>,<span style="color:#CC0000;">'show'</span><span style="color:#006600; font-weight:bold;">&#93;</span></div>
</div></div>

<p><br /></p>

<p>として、必要なアクションだけ列挙しましょう。</p>

<p>また、:exceptなんてオプションもあって、必要ないオプションを列挙します。</p>

<p>このへんに<a href="http://railsapi.com/doc/rails-v2.3.4/classes/ActionController/Resources.html#M005380">かいてありました</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.func09.com/wordpress/archives/671/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
