August 2008

August 20, 2008

Railsのビジネスロジックはどこに書くの?

このエントリで、
たとえば、RailsではビジネスロジックをModelではなくControllerに記述します。
とか言ってしまいましたが、思い込みだったようです。一応参考にさせていただいたURLを載せておきます。
その1. まつもと直伝 プログラミングのオキテ 第20回 MVCとRuby on Rails
その2. Strutsの知識を基に、Ruby on Railsを学ぶ方法
上記を読んで、「RailsではビジネスロジックをModelではなくControllerに記述する」とか思い込んでしまったのですが、別にそういう決まりとか、風潮があるわけではないのですね。
例えば、「RailsによるアジャイルWebアプリケーション開発 第2版」では、ビジネスロジックはModelクラス(ActiveRecord::Baseの継承クラス)に記述されており、Controllerオブジェクトは、Modelクラスのメソッドの呼び出しと、実行結果にしたがって処理を振り分ける役割に徹しています。
また、railsのメーリングリストを見ても、ビジネスロジックはModelに記述すべき、という意見が優勢のようです。
http://lists.rubyonrails.org/pipermail/rails/2006-May/039438.html
http://readlist.com/lists/lists.rubyonrails.org/rails/7/38534.html



matssaku at 01:51|PermalinkComments(0)TrackBack(0)clip!Ruby on Rails 

[AWS] EC2の仮想マシンイメージを作った

Amazon EC2は、Amazonのインフラ上で、仮想マシンを好きな数だけ起動できるサービスです。
料金は各マシンの起動時間の合計に比例するため、例えば大量のマシンを短時間起動して並列処理、など色々な使い方ができるようです。

使用できる仮想マシンはAmazonから提供されているのですが、自分でイメージファイルを作成してアップロードすることもできます。

作成手順は、Amazon Elastic Compute Cloud Developer Guideの「Creating an AMI through a Loopback File」が参考になります。
EC2のバックエンドもXenなので、Xenのイメージファイルの作成手順とほとんど同じです。

手順を参考にCentOS5のイメージを作成したのですが、いくつかつまずいたところがあったので、メモしておきます。

■gsg-keypairでログインできない
EC2には、ec2-add-keypairコマンドでopensshキーを発行し、公開鍵をAmazon側に登録しておく仕組みがあるのですが、自作した仮想マシンイメージでは、登録したキーでのログインができません。
検索したところ、仮想マシン側で公開鍵を取得して.ssh/authorized_keyなどに登録する処理はスクリプトで追加する必要があるようです。
参考URL:http://developer.amazonwebservices.com/connect/message.jspa?messageID=76910
上記のURLを参考にget-credentials.shを作成し、/etc/rc.localで実行するようにしたところ、登録したキーでのログインができるようになりました。

■ec2-bundle-volが実行できない
EC2では、仮想マシン上でのファイルの変更は、インスタンスを停止した際に消えてしまうため、バックアップの方法を考える必要があります。Amazonから提供されている手段として、ec2-bundle-volコマンドで現在の実行環境をイメージファイルに書き出し、ec2-upload-bundleコマンドで、S3に保存する方法が提供されています。が、自作した仮想マシンイメージではec2-bundle-volコマンドが
mount: Could not find any loop device. Maybe this kernel does not know
about the loop device? (If so, recompile or `modprobe loop'.)
execution failed: "mount -o loop /mnt/image /mnt/img-mnt"
ec2-bundle-vol failed.
とエラーが出て、実行することができませんでした。
エラーメッセージにしたがって
# modprobe loop
を実行しても、
FATAL: Could not load /lib/modules/2.6.16-xenU/modules.dep: No such file or directory
でこれもエラーになってしまいます。どうも、2.6.16-xenUに対応したモジュールが必要なようです。これも検索したところ、http://s3.amazonaws.com/ec2-downloads/modules-2.6.16-ec2.tgzからモジュールをダウンロードして解凍した後、
depmod -a
modules.depを生成すればよいことがわかりました。
参考URL:http://developer.amazonwebservices.com/connect/entry.jspa?externalID=798



matssaku at 00:26|PermalinkComments(0)TrackBack(0)clip!Xen | AWS