<?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>Rails 2.0 &#187; プラグイン</title>
	<atom:link href="http://rails20.jp/category/%e3%83%97%e3%83%a9%e3%82%b0%e3%82%a4%e3%83%b3/feed/" rel="self" type="application/rss+xml" />
	<link>http://rails20.jp</link>
	<description>Rails開発のTips、ソフトウェア、ライブラリに関する情報をお届けします。Railsの開発受託も行っています。</description>
	<lastBuildDate>Thu, 08 Oct 2009 04:14:44 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Amazon EC2でmod_rails環境を構築するサンプル</title>
		<link>http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/</link>
		<comments>http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/#comments</comments>
		<pubDate>Mon, 14 Apr 2008 06:47:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/</guid>
		<description><![CDATA[Amazon EC2でmod_railsを使ってサーバ構築を行う記事をOpenServiceにて記述しました。mod_railsに興味のある方はぜひご覧ください。
元々はCentOSを使おうと思ったのですが、Rubyが1.8.5であったため+色々あったので断念しました。そこでUbuntuを使って構築を行っています。所用時間は待つ時間を入れても20〜30分あれば完了できます。ごく手軽です。
mod_railsを使った場合、HTMLやJavaScript、CSSファイルなどの静的ファイルにはApacheからレスポンスを返してくれます。この点がごく気軽に使えていいですね。レスポンスもそこそこです。
　
Open Service » Blog Archive » Amazon EC2を使ってWebサービスを公開する「インスタンス編」
　http://openservice.jp/2008/04/using_amazon_ec2_2/
]]></description>
			<content:encoded><![CDATA[<p>Amazon EC2でmod_railsを使ってサーバ構築を行う記事をOpenServiceにて記述しました。mod_railsに興味のある方はぜひご覧ください。</p>
<p>元々はCentOSを使おうと思ったのですが、Rubyが1.8.5であったため+色々あったので断念しました。そこでUbuntuを使って構築を行っています。所用時間は待つ時間を入れても20〜30分あれば完了できます。ごく手軽です。</p>
<p>mod_railsを使った場合、HTMLやJavaScript、CSSファイルなどの静的ファイルにはApacheからレスポンスを返してくれます。この点がごく気軽に使えていいですね。レスポンスもそこそこです。</p>
<p>　</p>
<p><strong>Open Service » Blog Archive » Amazon EC2を使ってWebサービスを公開する「インスタンス編」</strong><br />
　<a href="http://openservice.jp/2008/04/using_amazon_ec2_2/">http://openservice.jp/2008/04/using_amazon_ec2_2/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/using_mod_rails_on_amazon_ec2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ホスティングサービスでもRailsが利用できるようになるかも、な「Passenger」</title>
		<link>http://rails20.jp/2008/04/passenger/</link>
		<comments>http://rails20.jp/2008/04/passenger/#comments</comments>
		<pubDate>Sat, 12 Apr 2008 02:38:06 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/passenger/</guid>
		<description><![CDATA[MOONGIFTでも紹介したmod_railsと呼ばれるPassenger。Creative Commonsによるオープンソース・ソフトウェアです。
今回はその導入方法を書きたいと思います。インストールは簡単で、gemを使って行えます。
$ sudo gem install passenger
Password:
Bulk updating Gem source index for: http://gems.rubyforge.org
Building native extensions. This could take a while...
Successfully installed passenger-1.0.1
Installing ri documentation for passenger-1.0.1...
Installing RDoc documentation for passenger-1.0.1...
次に、Apacheに組み込むためのコマンドを実行します。詳細は以下にて。

インストールを開始する前に、別途必要なモジュールを入れておきます。筆者の場合、fastthreadがなかったのでインストールします。これもGemからインストールできます。
$ sudo gem install fastthread
Select which gem to install for your platform (i686-darwin9.1.2)
1. fastthread 1.0.1 (ruby)
2. fastthread 1.0.1 (mswin32)
3. fastthread 1.0 (ruby)
4. fastthread 1.0 (mswin32)
5. Skip this [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.moongift.jp/2008/04/passenger/">MOONGIFT</a>でも紹介したmod_railsと呼ばれるPassenger。Creative Commonsによるオープンソース・ソフトウェアです。</p>
<p>今回はその導入方法を書きたいと思います。インストールは簡単で、gemを使って行えます。</p>
<p><code>$ sudo gem install passenger<br />
Password:<br />
Bulk updating Gem source index for: http://gems.rubyforge.org<br />
Building native extensions. This could take a while...<br />
Successfully installed passenger-1.0.1<br />
Installing ri documentation for passenger-1.0.1...<br />
Installing RDoc documentation for passenger-1.0.1...<br /></code></p>
<p>次に、Apacheに組み込むためのコマンドを実行します。詳細は以下にて。</p>
<p><span id="more-35"></span></p>
<p>インストールを開始する前に、別途必要なモジュールを入れておきます。筆者の場合、fastthreadがなかったのでインストールします。これもGemからインストールできます。</p>
<p><code>$ sudo gem install fastthread<br />
Select which gem to install for your platform (i686-darwin9.1.2)<br />
1. fastthread 1.0.1 (ruby)<br />
2. fastthread 1.0.1 (mswin32)<br />
3. fastthread 1.0 (ruby)<br />
4. fastthread 1.0 (mswin32)<br />
5. Skip this gem<br />
6. Cancel installation<br />
&gt; 1<br />
Building native extensions. This could take a while...<br />
Successfully installed fastthread-1.0.1<br />
Installing ri documentation for fastthread-1.0.1...<br />
No definition for dummy_dump<br />
No definition for dummy_dump<br />
No definition for rb_queue_marshal_load<br />
No definition for rb_queue_marshal_dump<br />
Installing RDoc documentation for fastthread-1.0.1...<br />
No definition for dummy_dump<br />
No definition for dummy_dump<br />
No definition for rb_queue_marshal_load<br />
No definition for rb_queue_marshal_dump</code></p>
<p>ではインストールを開始します。</p>
<p><code>$ sudo passenger-install-apache2-module<br />
/opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-install-apache2-module:25: warning: Insecure world writable dir /opt/local/var/db/postgresql82 in PATH, mode 040777<br />
Welcome to the Passenger Apache 2 module installer.<br />
This installer will guide you through the entire installation process. It<br />
shouldn't take more than 3 minutes in total.<br />
Here's what you can expect from the installation process:<br />
1. The Apache 2 module will be installed for you.<br />
2. You'll learn how to configure Apache.<br />
3. You'll learn how to deploy a Ruby on Rails application.<br />
Don't worry if anything goes wrong. This installer will advise you on how to<br />
solve any problems.<br />
Press Enter to continue, or Ctrl-C to abort.<br /></code></p>
<p>このように表示されるので、1を入力してエンターを押します。</p>
<p><code>Checking for required software...<br />
（中略） --------------------------------------------<br />
The Apache 2 module was successfully installed.<br />
Please edit your Apache configuration file, and add these lines:<br />
LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so<br />
RailsSpawnServer /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server<br />
RailsRuby /opt/local/bin/ruby<br />
After you restart Apache, you are ready to deploy any number of Ruby on Rails<br />
applications on Apache, without any further Ruby on Rails-specific<br />
configuration!<br />
Press ENTER to continue.<br />
--------------------------------------------<br />
Deploying a Ruby on Rails application: an example<br />
Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host<br />
to your Apache configuration file, and set its DocumentRoot to<br />
/somewhere/public, like this:<br />
&lt;VirtualHost *:80&gt;<br />
ServerName www.yourhost.com<br />
DocumentRoot /somewhere/public<br />
&lt;/VirtualHost&gt;<br />
And that's it! You may also want to check the Users Guide for security and<br />
optimization tips and other useful information:<br />
/opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/doc/Users guide.html<br />
Enjoy Passenger, a product of Phusion (www.phusion.nl) <img src='http://rails20.jp/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> <br />
http://www.modrails.com/</code></p>
<p>これでインストール完了です。次にhttpd.confを修正します。上のコマンド結果に出ているものをそのまま使えば良いだけです。</p>
<p><code>LoadModule passenger_module /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/ext/apache2/mod_passenger.so<br />
RailsSpawnServer /opt/local/lib/ruby/gems/1.8/gems/passenger-1.0.1/bin/passenger-spawn-server<br />
RailsRuby /opt/local/bin/ruby<br />
RailsEnv development</code></p>
<p>RailsEnvはデフォルトがproductionになっていますので、必要に応じて変更してください。後はVirtualHostを使う場合は、コマンド結果と同じように設定します。</p>
<p><code>&lt;VirtualHost *:80&gt;<br />
ServerName local.example.com<br />
DocumentRoot /path_to_rails_root/public/<br />
ErrorLog logs/j-error_log # 必要に応じて<br />
CustomLog logs/j-access_log combined # 必要に応じて<br />
&lt;/VirtualHost&gt;</code></p>
<p>これで設定は完了ですが、Apache2.2系の場合以下の設定を修正する必要があるようです。またはディレクトリ設定の追加を行う必要があります。</p>
<p><code>&lt;Directory /&gt;<br />
Options FollowSymLinks<br />
AllowOverride All<br />
Order deny,allow<br />
Deny from all ← これをコメントアウト<br />
&lt;/Directory&gt;</code></p>
<p>他の環境（Apache 2.0系など）は確認していませんので各自お願いします。ではApacheを再起動して確認してみます。</p>
<p>
<a href="http://rails20.jp/wp-content/uploads/61.jpg"><img src="http://rails20.jp/wp-content/uploads/6-tm1.jpg" width="440" height="288" alt="ピクチャ 6.png" /></a><br />
<strong>mod_rails経由での起動</strong></p>
<p>　</p>
<p>見事、Railsのページが表示されれば完了です。キャッシュも含めて特に動作は問題ないように思えます。レスポンスも悪くありません。Ajaxの部分も動作します。なお、設定によるのかも知れませんが、静的なファイルについてはApacheから送信されているようなので、これはレスポンス向上にも役立ちますね。</p>
<p>次回はレスポンスの実際の計測を行ってみたいと思います。とりあえず公式サイトに掲載されているレスポンス比較は以下の通りです。</p>
<p>
<a href="http://rails20.jp/wp-content/uploads/passenger-mongrel-thin-benchmark.jpg"><img src="http://rails20.jp/wp-content/uploads/passenger-mongrel-thin-benchmark-tm.jpg" width="440" height="273" alt="passenger_mongrel_thin_benchmark.png" /></a></p>
<p>via <a href="http://www.modrails.com/documentation.html">Documentation — Phusion Passenger (a.k.a. mod_rails)</a></p>
<p>　</p>
<p>ということで、Typoであればトップ、PetstoreではThinに劣るくらい、EldoradoではMongrel/Thinと似たり寄ったりといった所のようです。レスポンス性能も高いようですし、何より設置の手軽さが良いですね。</p>
<p>　</p>
<p><strong>Overview — Phusion Passenger (a.k.a. mod_rails)</strong><br />
　<a href="http://www.modrails.com/">http://www.modrails.com/</a></p>
<p><strong>MOONGIFT: » チェック必須！Rails新時代の到来か？「Passenger（mod_rails for Apache）」:オープンソースを毎日紹介</strong><br />
　<a href="http://www.moongift.jp/2008/04/passenger/">http://www.moongift.jp/2008/04/passenger/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/passenger/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Atom.builderもキャッシュするxmlcacheプラグイン</title>
		<link>http://rails20.jp/2008/04/xmlcache_plugin/</link>
		<comments>http://rails20.jp/2008/04/xmlcache_plugin/#comments</comments>
		<pubDate>Thu, 10 Apr 2008 08:05:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>

		<guid isPermaLink="false">http://rails20.jp/2008/04/xmlcache_plugin/</guid>
		<description><![CDATA[

xmlcacheプラグインのプロジェクトページ
　
RailsでRSSやAtomを出力する際に利用するAtomFeedHelperがあると思いますが、これは通常のキャッシュが使えません。普通にcacheを使うと、
undefined local variable or method `_erbout' for #&#60;ActionView::Base:0x24dde68&#62;
というエラーが出てしまいます。
そこで利用するのがxmlcacheプラグインです。インストールは、
ruby script/plugin install http://xmlcache.googlecode.com/svn/trunk/xmlcache
と行います。これをインストールした状態で、
cache_xml "cache name" do
　hogehoge
end
とすれば、通常のキャッシュ（フラグメントキャッシュ）同様の処理が可能になります。これでフィード生成が高速化されるようになりますね。ちなみにcaches_pageはアクションごとの設定なので、フォーマットによってキャッシュする、しないといった設定ができない模様…。これはこれで面倒だ。
]]></description>
			<content:encoded><![CDATA[<p>
<a href="http://rails20.jp/wp-content/uploads/11.jpg"><img src="http://rails20.jp/wp-content/uploads/11-tm.jpg" width="440" height="303" alt="ピクチャ 11.png" /></a><br />
<strong>xmlcacheプラグインのプロジェクトページ</strong></p>
<p>　</p>
<p>RailsでRSSやAtomを出力する際に利用するAtomFeedHelperがあると思いますが、これは通常のキャッシュが使えません。普通にcacheを使うと、</p>
<p><code>undefined local variable or method `_erbout' for #&lt;ActionView::Base:0x24dde68&gt;</code></p>
<p>というエラーが出てしまいます。</p>
<p>そこで利用するのがxmlcacheプラグインです。インストールは、</p>
<p><code>ruby script/plugin install http://xmlcache.googlecode.com/svn/trunk/xmlcache</code></p>
<p>と行います。これをインストールした状態で、</p>
<p><code>cache_xml "<span style="font-style: italic;">cache name</span>" do<br />
　hogehoge<br />
end</code></p>
<p>とすれば、通常のキャッシュ（フラグメントキャッシュ）同様の処理が可能になります。これでフィード生成が高速化されるようになりますね。ちなみにcaches_pageはアクションごとの設定なので、フォーマットによってキャッシュする、しないといった設定ができない模様…。これはこれで面倒だ。</p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/04/xmlcache_plugin/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ローカルでAmazon S3を使った開発をParkPlaceを利用して行う</title>
		<link>http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/</link>
		<comments>http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/#comments</comments>
		<pubDate>Wed, 26 Mar 2008 06:46:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Amazon]]></category>
		<category><![CDATA[Web API]]></category>
		<category><![CDATA[プラグイン]]></category>
		<category><![CDATA[開発]]></category>
<category></category>
		<guid isPermaLink="false">http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/</guid>
		<description><![CDATA[
Amazon S3のトップページ。ここから申し込み可能。
Amazon S3はAmazonによるストレージサービスです。1バイト〜5GBまでのオブジェクトを自由に作成し、取り出し、更新、削除することができます。データベースに保存しないような、画像やファイルなどを保存するのに最適なソリューションです。
Amazon S3を使う場合、RubyにはAWS::S3という便利なライブラリがあります。これを使うとごく簡単にAmazon S3を利用することができます。Ruby on Railsでの開発の際にももちろん利用します。

AWS::S3のトップページ。使い方も書かれています。
問題はローカル環境で開発している時です。ネットワーク接続が必須なのは非常に面倒ですし、何よりAmazon S3は有料のWeb APIなので、開発しているだけで課金されてしまうのは問題です。
そこで使うのがAmazon S3クローンであるParkPlaceです。このソフトウェアはクローンとは言っても置き換えを目指すのではなく、Amazon S3を利用したソフトウェア開発を便利にするために提供されているソフトウェアになります。ここではこのParkPlaceを使った開発方法を書きたいと思います。

ParkPlaceのトップページ

必要なファイルは殆どgemで手に入ります。注意点としてはMongrelは1.0.1固定にしておく必要があるということです。1.0.2でも良いかもしれませんが、試していません。1.0.5ではエラーがありました。

sudo gem install camping --include-dependencies
sudo mongrel --include-dependencies -v 1.0.1
gem install sendfile # Windowsでない場合必要らしい

また、Amazon S3向けのライブラリもインストールします。

sudo gem install aws-s3
これで準備完了です。後はParkPlace本体をダウンロードします。これはSubversionでcheckoutするだけです。

svn co http://code.whytheluckystiff.net/svn/parkplace/trunk parkplace
そして必要に応じてbin/parkplaceを修正します。

gem 'mongrel', '&#60; 1.1'
↓
gem 'mongrel', '= 1.0.1'
これで準備は完了です。


AIR:parkplace nakatsugawa$ bin/parkplace -v
-- No RubyTorrent found, torrent support disbled.
** Please login in with `admin' and password `pass@word1'
** You should [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://rails20.jp/wp-content/uploads/8.jpg"><img src="http://rails20.jp/wp-content/uploads/8-tm.jpg" alt="ピクチャ 8.png" height="275" width="440" /></a><br />
Amazon S3のトップページ。ここから申し込み可能。</p>
<p><a href="http://www.amazon.com/gp/browse.html?node=16427261">Amazon S3</a>はAmazonによるストレージサービスです。1バイト〜5GBまでのオブジェクトを自由に作成し、取り出し、更新、削除することができます。データベースに保存しないような、画像やファイルなどを保存するのに最適なソリューションです。</p>
<p>Amazon S3を使う場合、Rubyには<a href="http://amazon.rubyforge.org/">AWS::S3</a>という便利なライブラリがあります。これを使うとごく簡単にAmazon S3を利用することができます。Ruby on Railsでの開発の際にももちろん利用します。</p>
<p><a href="http://rails20.jp/wp-content/uploads/7.jpg"><img src="http://rails20.jp/wp-content/uploads/7-tm.jpg" alt="ピクチャ 7.png" height="275" width="440" /></a><br />
AWS::S3のトップページ。使い方も書かれています。</p>
<p>問題はローカル環境で開発している時です。ネットワーク接続が必須なのは非常に面倒ですし、何よりAmazon S3は有料のWeb APIなので、開発しているだけで課金されてしまうのは問題です。</p>
<p>そこで使うのがAmazon S3クローンである<a href="http://code.whytheluckystiff.net/parkplace">ParkPlace</a>です。このソフトウェアはクローンとは言っても置き換えを目指すのではなく、Amazon S3を利用したソフトウェア開発を便利にするために提供されているソフトウェアになります。ここではこのParkPlaceを使った開発方法を書きたいと思います。</p>
<p><a href="http://rails20.jp/wp-content/uploads/4.jpg"><img src="http://rails20.jp/wp-content/uploads/4-tm.jpg" alt="ピクチャ 4.png" height="275" width="440" /></a><br />
ParkPlaceのトップページ</p>
<p><span id="more-21"></span></p>
<p>必要なファイルは殆どgemで手に入ります。注意点としてはMongrelは1.0.1固定にしておく必要があるということです。1.0.2でも良いかもしれませんが、試していません。1.0.5ではエラーがありました。</p>
<pre>
<code>sudo gem install camping --include-dependencies
sudo mongrel --include-dependencies -v 1.0.1
gem install sendfile # Windowsでない場合必要らしい
</code></pre>
<p>また、Amazon S3向けのライブラリもインストールします。</p>
<pre>
<code>sudo gem install aws-s3</code></pre>
<p>これで準備完了です。後はParkPlace本体をダウンロードします。これはSubversionでcheckoutするだけです。</p>
<pre>
<code>svn co http://code.whytheluckystiff.net/svn/parkplace/trunk parkplace</code></pre>
<p>そして必要に応じてbin/parkplaceを修正します。</p>
<pre>
<code>gem 'mongrel', '&lt; 1.1'
↓
gem 'mongrel', '= 1.0.1'</code></pre>
<p>これで準備は完了です。</p>
<pre>
<code>
AIR:parkplace nakatsugawa$ bin/parkplace -v
-- No RubyTorrent found, torrent support disbled.
** Please login in with `admin' and password `pass@word1'
** You should change the default password for the admin at soonest chance!
** ParkPlace example is running at http://127.0.0.1:3002/
** Visit http://127.0.0.1:3002/control/ for the control center.
</code></pre>
<p>で起動します。起動はmongrelを使って行い、http://localhost:3002/controlがメイン画面になります。上記に表示されているID/PWでログインできます。ここではBucketの管理やファイル一覧、アップロード/削除が可能です。</p>
<p><a href="http://rails20.jp/wp-content/uploads/6.jpg"><img src="http://rails20.jp/wp-content/uploads/6-tm.jpg" alt="ピクチャ 6.png" height="275" width="440" /></a><br />
ParkPlaceの管理画面</p>
<p>管理画面の立ち上げが確認できたら、irbベースで利用してみます。</p>
<pre>
<code>
$ irb
>> require 'rubygems'
=> false
>> require 'aws/s3'
=> true
>> AWS::S3::Base.establish_connection!(
?>                                     :access_key_id     => '44CF9590006BF252F707',
?>                                     :secret_access_key => 'OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV',
?>                                     :use_ssl => nil,
?>                                     :server  => 'localhost',
?>                                     :port => 3002
>>                                     )
=> #<aws ::S3::Connection:0x65c4d0 @secret_access_key="OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV", @options={:secret_access_key=>"OtxrzxIsfpFjA7SwPzILwy8Bw21TLhquhboDYROV", :persistent=>true, :server=>"localhost", :use_ssl=>nil, :port=>3002, :access_key_id=>"44CF9590006BF252F707"}, @access_key_id="44CF9590006BF252F707", @http=#<net ::HTTP localhost:3002 open=false>>
>> music_bucket = AWS::S3::Bucket.find('moongift')
=> #<aws ::S3::Bucket:0x6029f8 @object_cache=[#<aws::S3::S3Object:0x1873060 '/moongift/Users/nakatsugawa/Downloads/parkplace/s3.rb'>, #</aws><aws ::S3::S3Object:0x1873000 '/moongift/file'>, #</aws><aws ::S3::S3Object:0x1872930 '/moongift/file2'>, #</aws><aws ::S3::S3Object:0x1872920 '/moongift/file3'>], @attributes={"name"=>"moongift", "is_truncated"=>false, "xmlns"=>"http://s3.amazonaws.com/doc/2006-03-01/"}>
>> music_bucket.objects[2].about
=> {"last-modified"=>"Wed, 26 Mar 2008 05:58:10 GMT", "connection"=>"close", "content-type"=>"binary/octet-stream", "etag"=>"ca12cb05b0da7680fd49d7fb4a516f18", "date"=>"Wed, 26 Mar 2008 06:07:34 GMT", "content-disposition"=>"", "server"=>"ParkPlace", "content-length"=>"0"}
>> music_bucket.objects[2].value
=> "require …"
>> ^C
>>
</aws></net></aws></code></pre>
<p>このようにして、通常のAmazon S3同様に利用できるようになります。アクセス権限さえ付与すれば、HTTPベースでアクセスできるのもAmazon S3同様です。AWS::S3自体の利用法については公式サイトのドキュメントを参考にしてください。</p>
<p>以上がParkPlaceの利用法になります。予想以上にAmazon S3に近く、使い勝手が良さそうです。後は接続先情報をconfig/environments/development.rbなどに記述して環境に応じて使い分けるようにすれば良さそうです。</p>
<p>参考URL</p>
<p><strong>Park Place – Trac</strong><br />
<a href="http://code.whytheluckystiff.net/parkplace/">http://code.whytheluckystiff.net/parkplace/</a></p>
<p><strong>AWS::S3 &#8211; Ruby Library for Amazon Simple Storage Service (S3)</strong><br />
<a href="http://amazon.rubyforge.org/">http://amazon.rubyforge.org/</a></p>
<p><strong>Amazon.com: Amazon S3, Amazon Simple Storage Service, Unlimited Online Storage: Amazon Web Services</strong><br />
<a href="http://www.amazon.com/gp/browse.html?node=16427261">http://www.amazon.com/gp/browse.html?node=16427261</a></p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/03/amazon_s3_development_use_parkplace/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>will_paginateとaction_web_servicesを組み合わせた際のmethod_missingエラーについて</title>
		<link>http://rails20.jp/2008/03/will_paginate_and_action_web_services/</link>
		<comments>http://rails20.jp/2008/03/will_paginate_and_action_web_services/#comments</comments>
		<pubDate>Thu, 06 Mar 2008 13:54:12 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[プラグイン]]></category>
<category></category>
		<guid isPermaLink="false">http://rails20.jp/2008/03/will_paginate%e3%81%a8action_web_services%e3%82%92%e7%b5%84%e3%81%bf%e5%90%88%e3%82%8f%e3%81%9b%e3%81%9f%e9%9a%9b%e3%81%aemethod_missing%e3%82%a8%e3%83%a9%e3%83%bc%e3%81%ab%e3%81%a4%e3%81%84%e3%81%a6/</guid>
		<description><![CDATA[Rails2.0になった際に、ページネーションとAction Web Serviceがそれぞれプラグインで提供されるようになりました。Action Web Serviceは
script/plugin install http://biorails.org/svn/biorails/plugins/action_web_services
にてインストールできます。で、この二つを組み合わせた場合に、なぜかモデル内に定義した関数が使えなくなりました。
NoMethodError (undefined method `authenticate' for #&#60;Class:0x2360a04&#62;):
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1532:in `method_missing_without_paginate'
/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:101:in `method_missing'

このような感じです。なぜかClassに関数がないといってきます。実際に処理を呼び出しているのはUserモデルのUser. authenticateで、
@user=User.authenticate(h[:username], h[:password])
のように呼び出しています。が、メソッドがないと言われます。実際、コンソールでやっても失敗します。
原因は不明なのですが、
vendor/plugins/will_paginate/lib/will_paginate/finder.rb
def method_missing_with_paginate(method, *args, &#38;block)
# did somebody tried to paginate? if not, let them be
unless method.to_s.index('paginate') == 0
return method_missing_without_paginate(method, *args, &#38;block)
end
ここに処理が飛んで、当然paginateを使っていないのでmethod_missing_without_paginateに飛ばされ、
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb
def method_missing(method_id, *arguments)
内の
send(method_id, *arguments)
else
super
end
にてsuperが呼び出されてエラーになっているようです。回避策としては、
def authenticate(name, passwd) （処理内容） end
↓
def self.authenticate(name, passwd) （処理内容） end
のようにself.を付けるとエラーが出なくなります。
]]></description>
			<content:encoded><![CDATA[<p>Rails2.0になった際に、ページネーションとAction Web Serviceがそれぞれプラグインで提供されるようになりました。Action Web Serviceは</p>
<p><code>script/plugin install http://biorails.org/svn/biorails/plugins/action_web_services</code></p>
<p>にてインストールできます。で、この二つを組み合わせた場合に、なぜかモデル内に定義した関数が使えなくなりました。</p>
<p><code>NoMethodError (undefined method `authenticate' for #&lt;Class:0x2360a04&gt;):<br />
/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb:1532:in `method_missing_without_paginate'<br />
/vendor/plugins/will_paginate/lib/will_paginate/finder.rb:101:in `method_missing'<br />
</code></p>
<p>このような感じです。なぜかClassに関数がないといってきます。実際に処理を呼び出しているのはUserモデルのUser. authenticateで、</p>
<p><code>@user=User.authenticate(h[:username], h[:password])</code></p>
<p>のように呼び出しています。が、メソッドがないと言われます。実際、コンソールでやっても失敗します。<br />
原因は不明なのですが、<br />
vendor/plugins/will_paginate/lib/will_paginate/finder.rb</p>
<p><code>def method_missing_with_paginate(method, *args, &amp;block)<br />
# did somebody tried to paginate? if not, let them be<br />
unless method.to_s.index('paginate') == 0<br />
return method_missing_without_paginate(method, *args, &amp;block)<br />
end</code></p>
<p>ここに処理が飛んで、当然paginateを使っていないのでmethod_missing_without_paginateに飛ばされ、</p>
<p><code>/opt/local/lib/ruby/gems/1.8/gems/activerecord-2.0.2/lib/active_record/base.rb</code></p>
<p>def method_missing(method_id, *arguments)</p>
<p>内の</p>
<p><code>send(method_id, *arguments)<br />
else<br />
super<br />
end</code></p>
<p>にてsuperが呼び出されてエラーになっているようです。回避策としては、</p>
<p><code>def authenticate(name, passwd) （処理内容） end<br />
↓<br />
def self.authenticate(name, passwd) （処理内容） end</code></p>
<p>のようにself.を付けるとエラーが出なくなります。</p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/03/will_paginate_and_action_web_services/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>will_paginate + acts_as_searchableで全文検索＋ページネーション</title>
		<link>http://rails20.jp/2008/03/will_paginate-acts_as_searchable/</link>
		<comments>http://rails20.jp/2008/03/will_paginate-acts_as_searchable/#comments</comments>
		<pubDate>Tue, 04 Mar 2008 05:46:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Tips]]></category>
		<category><![CDATA[プラグイン]]></category>
<category></category>
		<guid isPermaLink="false">http://rails20.jp/2008/03/will_paginate-acts_as_searchable%e3%81%a7%e5%85%a8%e6%96%87%e6%a4%9c%e7%b4%a2%ef%bc%8b%e3%83%9a%e3%83%bc%e3%82%b8%e3%83%8d%e3%83%bc%e3%82%b7%e3%83%a7%e3%83%b3/</guid>
		<description><![CDATA[Rails2.0からページネーションがプラグインベースになりました。普通のページネーションであれば、
@memos = @user.memos.paginate(:page =&#62; params[:page], :per_page =&#62; 10,  rder=&#62;&#8221;memos.id DESC&#8221;)
だけで使えるようになって便利ですが、任意の情報に対してページネーションする方法がいまいち分かっていませんでした。そして、acts_as_searchableを使って、HyperEstraierで全文検索を行う際に、ページネーションをどのように行えば良いのか調べつつ分かったところを書いてみたいと思います。
実際にページネーション処理を行っているのは、
vendor/plugins/will_paginate/lib/will_paginate/finder.rb
になります。ここの


def paginate_by_sql(sql, options)
  WillPaginate::Collection.create(*wp_parse_options!(options)) do &#124;pager&#124;
    query = sanitize_sql(sql)
    options.update  ffset =&#62; pager.offset, :limit =&#62; pager.per_page

    original_query = query.dup
    add_limit! query, options
    # perfom the find
   [...]]]></description>
			<content:encoded><![CDATA[<p>Rails2.0からページネーションがプラグインベースになりました。普通のページネーションであれば、</p>
<blockquote><p>@memos = @user.memos.paginate(:page =&gt; params[:page], :per_page =&gt; 10, <img src='http://rails20.jp/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> rder=&gt;&#8221;memos.id DESC&#8221;)</p></blockquote>
<p>だけで使えるようになって便利ですが、任意の情報に対してページネーションする方法がいまいち分かっていませんでした。そして、acts_as_searchableを使って、HyperEstraierで全文検索を行う際に、ページネーションをどのように行えば良いのか調べつつ分かったところを書いてみたいと思います。</p>
<p>実際にページネーション処理を行っているのは、</p>
<p><strong>vendor/plugins/will_paginate/lib/will_paginate/finder.rb</strong></p>
<p>になります。ここの</p>
<blockquote>
<pre>
def paginate_by_sql(sql, options)
  WillPaginate::Collection.create(*wp_parse_options!(options)) do |pager|
    query = sanitize_sql(sql)
    options.update <img src='http://rails20.jp/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ffset =&gt; pager.offset, :limit =&gt; pager.per_page

    original_query = query.dup
    add_limit! query, options
    # perfom the find
    pager.replace find_by_sql(query)

    unless pager.total_entries
      count_query = original_query.sub /bORDERs+BYs+[w`,s]+$/mi, ''
      count_query = "SELECT COUNT(*) FROM (#{count_query}) AS count_table"
      # perform the count query
      pager.total_entries = count_by_sql(count_query)
    end
  end
end</pre>
</blockquote>
<p>が参考になります。</p>
<p>pager.replaceに、リストを入れて、pager.total_entriesに行数を入れればOKのようです。この処理をまねて、</p>
<p><strong>app/controllers/application.rb</strong></p>
<p>に次のように定義します。</p>
<blockquote>
<pre>
module WillPaginate
  module Finder
    module ClassMethods
      def paginate_by_fulltext_search(query, options)
        WillPaginate::Collection.create(*wp_parse_options!(options)) do |pager|
          pager.replace fulltext_search(query, options)

          count_options = Hash.new
          count_options[:count] = true
          count_options[:attributes] = options[:attributes] if options[:attributes]
          pager.total_entries = fulltext_search(query, count_options)
        end
      end
    end
  end
end</pre>
</blockquote>
<p>です。そして、呼び出し側では次のようにします。</p>
<blockquote><p>@memos = Memo.paginate_by_fulltext_search(params[:q], :attributes =&gt; &#8220;user_id NUMEQ %d&#8221; % @user.id, :limit =&gt; perpage, <img src='http://rails20.jp/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> ffset =&gt; offset, :page =&gt; params[:page], :per_page =&gt; perpage)</p></blockquote>
<p>ここで、:limitはacts_as_searchable用、:per_pageはwill_paginate用になります。:pageや:offsetは共通で利用できるようです。:attributesはあれば設定します。これさえ設定しておけば、ビュー側は</p>
<blockquote><p>&lt;%= will_paginate @memos, :prev_label=&gt; _(&#8217;« Prev&#8217;), :next_label=&gt; _(&#8217;Next »&#8217;) %&gt;</p></blockquote>
<p>が利用できて便利です。ちなみにpaginate_by_sqlではoptionsがアップデートされるので、デフォルトの30件になってしまうようですね。これはなぜなんだろう…。</p>
]]></content:encoded>
			<wfw:commentRss>http://rails20.jp/2008/03/will_paginate-acts_as_searchable/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
