Windows で Rails + Comet (Juggernaut)
Comet を使ったアプリケーションを作りたくて Juggernaut を使ってみた。
Juggernaut 0.5.1 のインストール
Juggernaut はいろいろな gems に依存するためそれらもインストール。
Rails は 2.0.2 以降、EventMachine も 0.10 以降、json も 1.1.2 以降を要求するなど
Juggernaut はかなりグルメなので gems 本体もアップデートすることになった。
$ gem update --system $ gem install rails --include-dependencies $ gem install json $ gem install eventmachine --version 0.10 $ gem install juggernaut
この EventMachine が曲者で、コンパイルするタイプだったのでハマった。
EventMachine は今注目の Thin なんかでも使うようなので解決策を記しておく。
ポイントは以下の二つ
環境変数 PATH/LIB/INCLUDE などを正確に指定する
コンパイルに Visual Studio .NET 2003 (cl.exe)を使うため
環境変数を正しく指定する必要がある。
でも面倒くさいので以下の bat ファイルを使うと簡単。
C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\Tools\vsvars32.bat
C:\usr\ruby\lib\ruby\1.8\i386-mswin32\config.h の修正
C:\usr\ruby\lib\ruby\1.8\i386-mswin32\config.h
の冒頭で cl.exe のバージョンをチェックしている。
#if _MSC_VER != 1200 #error MSC version unmatch #endif
しかし、Visual Studio .NET 2003 の _MSC_VER は 1310 のため
コンパイルに失敗する。適当に以下のように修正。
#if _MSC_VER < 1200 #error MSC version unmatch #endif
参考:Thin – A fast and simple web server | Marc-André Cournoyer's blog
サンプルアプリケーション
普通はチャットアプリなんかを作ってみるところだけど
インストールでハマってしまったので動作確認をするだけにする。
$ rails comet $ cd comet $ ruby script/plugin install http://juggernaut.rubyforge.org/svn/trunk/juggernaut $ ruby script/generate controller chat
app/controllers/chat_controller.rb
class ChatController < ApplicationController def index end def say Juggernaut.send_to_all("alert('hi from juggernaut')") end end
app/views/chat/index.rhtml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Chat</title> <%= stylesheet_link_tag 'default' %> <%= javascript_include_tag :defaults %> <%= javascript_include_tag 'prototype', :juggernaut %> </head> <body> <%= juggernaut %> </body> </html>
Comet サーバの設定と起動
$ juggernaut -g config\juggernaut.yml $ juggernaut -c config\juggernaut.yml
Rail アプリ用サーバの起動
$ ruby script/server
二種類のブラウザで以下の URL にアクセス。
http://localhost:3000/chat/
どちらかのブラウザで新しくタブを開き以下のアクセス。
http://localhost:3000/chat/say
すると上の URL を開いてブラウザすべてでアラートが表示される。