This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/70
Juggernautは、Ajaxianとかでも紹介されていましたが、Comet for Rails?なRailsプラグインです。
Flashのxmlsocketを使って、サーバとブラウザ間にコネクションを張り、リアルタイムにページの更新を行ったりする事ができます。
moroさんの記事で紹介されていたRails Chatでも利用されているようです。
まずはインストールしてみましょう。JuggernautはJsonライブラリに依存しているので、無ければ先にインストールします。
# gem install json
さて、続いてJuggernaut
本体のインストールです。
$ ./script/plugin install \
svn://rubyforge.org/var/svn/juggernaut/trunk/juggernaut
$ rake install_juggernaut
$ ./script/plugin install \
svn://rubyforge.org/var/svn/juggernaut/trunk\
/juggernaut/vendor/plugins/juggernaut
これで完了です。毎度の事ながら、Railsのプラグイン機構は本当に便利ですね。
(注: 8月30日現在、インストール方法が上記のように変わっているようです)
さて、続いてrhtmlファイルからJuggernautのjavascriptを呼び出すようにします。
<%= javascript_include_tag "juggernaut_javascript" %>
<%= javascript_include_tag "juggernaut" %>
app/views/
layouts/*.rhtmlあたりに記述しておけば大丈夫でしょう。
さらに、Juggernaut
が使用するFlashもbodyの最後あたりに埋め込みます。
<%= flash_plugin(session[:juggernaut_channels]) %>
最後の仕上げに、Juggernaut
の設定ファイルの雛形がconfig/jug
gernaut_co
nfig.yml
に作成されているので、適宜変更してください。
これでJuggernautを使う準備は整いました。
実際に簡単なChatアプリケーションを作ってみましょう。
$ rails chat
$ cd chat
$ ./script/generate controller chat
ChatContro
llerとViewを記述します。
$ vim app/controllers/chat_controller.rb
class ChatController < ApplicationController
def index
session[:juggernaut_channels] = ["chat_channel"]
end
def send_data
input_data = Juggernaut.html_and_string_escape(params[:chat_input])
data = "new Insertion.Top('chat_data', '<li>#{ input_data }</li>');"
Juggernaut.send(data, session[:juggernaut_channels])
render :nothing => "true"
end
end
続いてView
$ vim 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 "juggernaut_javascript" %>
</head>
<body>
<%= form_remote_tag(
:url => {:action => :send_data},
:complete => "$('chat_input').value = ''") %>
<%= text_field_tag('chat_input', '', {:size => 20, :id => 'chat_input'}) %>
<%= submit_tag "Add" %>
<%= end_form_tag %>
<ul id="chat_data" style="list-style:none">
</ul>
<%= flash_plugin(session[:juggernaut_channels]) %>
</body>
</html>
これで完了です。あとは、pushサーバとWebサーバを起動すればOK。
$ ruby script/push_server &
$ ./script/server
http://loc
alhost:300
0/chat/にアクセスしてみましょう。
リアルタイムに書き込んだ内容が反映されます。
This article was migrated from http://rails.office.drecom.jp/takiuchi/archive/70