本日でようやく前期の担当授業が終了し、一息つきました。今回の授業では、Ruby on Railsで独自開発しているLMSを用いました。残念ながら、授業用e-Learning教材とLMSを共に開発しながらの自転車操業だったので、研究成果になるほどの結果は得られなかったのですが、サーバ運用についてはある程度のノウハウが得られたので、簡単にメモしておきます。
Railsサーバとしては、当初、CenOSサーバでapache+passenger構成を利用していました。passengerは、ローカルで開発したrailsファイル一式をリモートサイトに置くだけで稼働でき、非常に運用が楽なのですが、httpアクセスに対する応答時間がかかることや、spawn timeが数秒程度かかるなどの反応遅延が気になってました。なお、passengerについては、この記事などを参考にチューニングした後は、多少反応が良くなりました。
その後、twitterで使われていることでも評判のunicornと、unicornと一緒に使われることの多いwebサーバのnginxの構成に変更しました。それらの設定の際は、以下の記事を参考にしました。
上記3つめの参考ページに記載されているように、”Rails 2.3.x isn’t compatible with Rack 1.1.0″のようで、これには結構はまりました。
なお、この構成にしただけで、チューニング後のpassengerとapacheの構成と比べても、約30%反応速度が速くなりました。very nice!
この速度チェックは、dojoライブラリを用いている、運用中のLMSサービスに対して行っています。dojoライブラリは多数のjavascriptファイルを読みこむため、このように読み込みファイル数が多い場合は、nginx+unicorn構成が有効になるように感じています。
Flex + Railsの構成でwebアプリケーションを作ることを考えているので、購入したFlex on Rails: Building Rich Internet Applications with Adobe Flex 3 and Rails 2 (Developer’s Library)を参考に機能チェックをしています。
FlexとRails間のデータの橋渡しには、同書でも取り上げているRubyAMFを使おうと考えているため、早速”Chapter5 Passing Data with AMF”を読み進めるも、クラスマッピングに関する記述でつまづいたのでその覚え書きをメモしておきます。
利用している環境は以下の通りで、これは”Flex on Rails”の環境より新しいものとなります。
- Ruby: 1.8.7
- Rails: 2.3.5
- RubyAMF: 1.6.5
- Flex SDK: 3.5
まず、Flexから、rubyamf_scaffoldで生成したcontoller上のfind_allを呼び出すことはうまくいきました。
次に、Flex上のVOで以下のようにRemoteClassに対するaliasを設定し、
package flexonrails.examples.vo {
[RemoteClass(alias="Contact")]
[Bindable]
public class Contact {
...
}
}
rubyamf_config.rbで”ClassMappings.assume_types = true”の指定をした後に、この型のデータをFlexからRailsのcontoller上のsaveに渡そうとすると、以下のようなエラーが表示され正常に動作しません。
You have a nil object when you didn't expect it!
You might have expected an instance of ActiveRecord::Base.
The error occurred while evaluating nil.[]
ここやここを見ると、Rails2.3系では解決していない問題のようですね。
取り急ぎ、rubyamf_config.rbで”ClassMappings.assume_types = false”にした上で、
ClassMappings.register(:actionscript => 'Contact', :ruby => 'Contact', :type => 'active_record')
のように手動でマッピングすると、Rails2.3.5でも問題なくsaveが呼び出せました。
Tony Hillerson Daniel Wanja
Addison-Wesley Professional
売り上げランキング: 26867
おすすめ度の平均:

RubyAMFについて内容が貧弱でちょっとがっかり
Ruby on Railsの調査のため、同フレームワークのアプリケーションを公開するサーバをレンタルしたので、その覚え書きを以下に記載します。
現在、このblogなどの公開のため、hetemlのホスティングサービスを利用していますが、このサービスではRailsを利用できず、また自前のサーバを用意するのも手間だったので、VPSをレンタルすることにしました。
Rails利用者によるVPSの情報は、ネット上で多く出回っているので、それらを参考にslicehostの256sliceプランを契約。pingの応答時間を見ると、海外のサーバだけに、日本からの応答はhetemlの十倍程度かかっているのが気にはなったのですが、コストパフォーマンスと高い評判を考慮して申し込みました。webページからクレジットカード情報などを入力して申し込むと、すぐ利用できるようになりました。なお、申込時に「Slice Name」と言うものを入力するのですが、これは複数のプランを申し込んだ際にそれらを区別するときなどに使うもので、契約後も変更できるようです。
また、同VPSではOSを選択できるのですが、今回は、今後自前サーバのOSとして使う予定のCentOS 5.4を選択しました。後はsshでログインして、以下のソフトウェアなどをインストール。いくつかのソフトウェアは、CentOSのデフォルトのリポジトリにはなかったので、リポジトリを追加したり手動でダウンロードしインストールしました。
- ruby
- ruby-devel
- rubygems
- rails
- httpd
- php
- mysql
- passenger
なお、Railsを公開する方法はいくつかあるようですが、今回は、Apache上でRailsを動作させるPassenger(mod_rails for Apache)を利用することにしました。
slicehostは評判通りドキュメントが充実していたため、特にhttpdやpassengerの設定をする際に助かりました。ただ、何カ所かドキュメントの情報が古いためか、CentOS 5.4に対応していない箇所もありました。

e-Learningについての研究報告をする国際会議はいくつかありますが、その中でもIASTEDが主催しているものに“Web-based Education”があります。2006年に同会議がメキシコで開催された時には私も参加し、初めての国際会議発表をしたので、私にとって親しみのある会議です。
この“Web-based Education”の次回会議は、2009年3月16-18日にプーケットで開催される予定であり、同会議出席のため昨年末に投稿していた論文が受理されたとの連絡がありました。今後、最終論文の投稿、学内での審議をクリアし、同会議に出席したいと思っています。
“Development of Learning Management SNS”と言うタイトルで投稿した論文には、これまでに開発・試験運用してきた、学習支援機能を持つSNS“Social Learning Life”のことを報告しています。内容的には、これまでに国内で発表してきた内容を整理し、いくつかの最新機能を報告しています。また、3人の論文査読者からの意見は、今後、研究開発を続ける上で大変参考になりました。
なお、開催国であるタイにはこれまでに2度訪問したことがありますが、プーケットに行くのは初めてなので、これも楽しみにしています。
気になるのは発表スケジュールとタイの政情です。会議最終日である3月18日は、所属先大学の卒業式にあたるため、現在、会議事務局にスケジュール確認をしています。また、昨年末よりタイの政情不安を伝えるニュースが続いていますが、今後、安定化に向かって欲しいと思っています。

私のゼミの学生が、卒業制作としてFlashの横スクロールゲームを開発しているため、そのPSP対応を検討してみました。タイミング的には、この秋にPSP-3000が発売され、ファームウェアのバージョンアップもあり、これまで以上にPSP用Flashでの開発がしやすくなっていました。このためPSPを自費購入し、現時点での最新ファームウェアにアップデートした後に、学生が作成したゲームを私の方でチューニングしてみました。
キー入力に関しては、上下左右キーはそのまま押下のイベント取得が可能で、○ボタンについても、ステージ全体にボタンを設定することにより、マウスクリックイベントとして取得可能です。swfファイルに埋め込んだMP3音源も問題なく再生することができました。
ただし、PC用のswfファイルではフレームレートを30fpsに設定していましたが、これを10fpsまで落としても、再生がカクカクし、ゲームとして楽しむことができません。これは背景のマップチップを予め画面外まで配置し、そのムービークリップを移動させることにより、横スクロールを実現していることが大きな原因でしょう。なお、配置するマップチップに“cacheAsBitmap”を設定しても、体感できる効果はありませんでした。
ゲーム開発以外でPSPでの利用を検討していた、FlashPlayer8用に私が開発しているSNS”Social Learning Life”も、PSPでは全く再生されませんでした。
もう少し「おしい」ところまでゲームが再現できたら、更にPSP用にチューニングする気にもなったのですが、状況が厳しすぎると判断して、今回はここであきらめることにしました。今回の経験で、PSPでのFlash利用は、アニメーション再生やキー押下への反応速度が重要ではないアドベンチャーゲームに限られるのでは、という印象を持ちました。
プライベートではゲームをしないので、早速、1ヶ月前に1万9千円で購入したPSPを、ソフマップにて1万4千円で売ってきました。