WEBrickって on-the-fly転送できるんだろうか?

NicoProxy2を使って面白いことやってるのでメモ。
年越しそばと初詣は絶対に欠かせない: NicoProxy2 と Squid を MacOSX 上で 組み合わせる
WEBrickってon-the-fly転送する方法あるのかな。あったらいいな。ソース読むかな。
最近は仲間内でニコニコ動画のキャッシュサーバ立てて使ってるので転送が大抵一瞬で終わって問題なかったりもする。7時のニュースもある程度観られたり。

Head First JavaScript 頭とからだで覚えるJavaScriptの基本

Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

Head First JavaScript ―頭とからだで覚えるJavaScriptの基本

本屋でパラパラ眺めたら得体の知れない読みやすさだったので発注。
JavaScriptが思い通りに書けないと、思い通りのことが実現できない局面が結構あるんだよなぁ。

テレビの傍らに置く、情報ディスプレー

http://ascii.jp/elem/000/000/161/161331/

描画は60fpsでやっています。アーケードゲームと同じ。そうしないと、FEDの高速応答性という特徴が出てこない。メニューは3D処理していて、透明度なんかも変えています。このあたりは、ゲーム開発と同じノリですね。

http://ascii.jp/elem/000/000/161/161331/index-2.html

これは欲しい。キットでいいから販売しないかなーと期待。

Passenger(mod_rails)環境にCapistranoでデプロイする

Capistranoをmod_rails向けに設定してみます。
mod_railsの導入、Capistranoの導入は以下の記事を参照してください。

Capistranoの設定

今までと同じようにdeploy環境を作って、config/deploy.rb を少し変更すればOKです。
以下をdeploy.rbに追記します。

namespace :deploy do
  desc "Restarting mod_rails with restart.txt"
  task :restart, :roles => :app, :except => {:no_release => true} do
    run "touch #{current_path}/tmp/restart.txt"
  end

  [:start, :stop].each do |t|
    desc "#{t} task is a no-op with mod_rails"
    task t, :roles => :app do ; end
  end
end

restart.txtの生成が肝です。mod_railsはrestart.txtの有無でアプリを更新するべきか判断します。
この状態で、cap deploy すればデプロイが可能です。Apacheの再起動は必要なし。

VirtualHostの設定

DocumentRootにcurrentを入れればOKです。以下のようになります。

<VirtualHost *:80>
  ServerName hogehoge.example.jp
  DocumentRoot /home/railsapp/hogehoge/current/public
</VirtualHost>

Passenger(mod_rails)をインストールしてみる

Rails運用環境として何かと話題のmod_railsを導入します。
http://www.nearch.jp/mongrelからmod_railsに切り替えました。体感的には速くなった気がする。

利点

実際の導入作業の前にmod_rails構成の利点をメモ。

  • mongrel_cluster等に比べて構成がとてもシンプルになる

運用の際にApacheだけ気にしてればいいので楽。

  • Railsアプリの初期設定が簡単

VirtualHost設定すれば動く。

  • mongrel_cluster構成に比べてオーバーヘッドが減る

コンテキストスイッチが減る。
上記くらいの利点があると思う。
あとベンチマークは取ってないけど、mongrel_cluster + Apache構成よりは速い。
また開発が活発なので、これから実行速度、安定性が増していきそう。将来性に期待。

インストール

今回の例はCentOS5環境です。

# gem install passenger

gemから導入。

# passenger-install-apache2-module
Welcome to the Phusion Passenger Apache 2 module installer, v2.0.3.

This installer will guide you through the entire installation process. It
shouldn't take more than 3 minutes in total.

Here's what you can expect from the installation process:

 1. The Apache 2 module will be installed for you.
 2. You'll learn how to configure Apache.
 3. You'll learn how to deploy a Ruby on Rails application.

Don't worry if anything goes wrong. This installer will advise you on how to
solve any problems.

Press Enter to continue, or Ctrl-C to abort.

apacheモジュールをコンパイルして導入します。
ここでエンターを押すと環境チェックが動きます。何か不足している物があれば教えてくれるので、Ctrl-Cして入れてやり直します。
忘れ物がなければ自動でコンパイルが行われます。

--------------------------------------------
The Apache 2 module was successfully installed.

Please edit your Apache configuration file, and add these lines:

   LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so
   PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3
   PassengerRuby /usr/bin/ruby

After you restart Apache, you are ready to deploy any number of Ruby on Rails
applications on Apache, without any further Ruby on Rails-specific
configuration!

Press ENTER to continue.

一通り作業が終わるとApacheの設定が書き出されるのでメモ。

--------------------------------------------
Deploying a Ruby on Rails application: an example

Suppose you have a Ruby on Rails application in /somewhere. Add a virtual host
to your Apache configuration file, and set its DocumentRoot to
/somewhere/public, like this:

   <VirtualHost *:80>
      ServerName www.yourhost.com
      DocumentRoot /somewhere/public
   </VirtualHost>

And that's it! You may also want to check the Users Guide for security and
optimization tips and other useful information:

  /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/doc/Users guide.html

Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-)
http://www.modrails.com/

Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.

次にVirtualHostの設定を教えてくれるのでメモ。

Apacheの設定

/etc/httpd/conf.d/passenger.conf を作成して、先ほどのメモをペースト。

LoadModule passenger_module /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3/ext/apache2/mod_passenger.so
PassengerRoot /usr/lib/ruby/gems/1.8/gems/passenger-2.0.3
PassengerRuby /usr/bin/ruby

Railsアプリを配置

適当なアプリ(hogehoge)を設置してみます。
設置場所はrailsappのユーザディレクトリ配下にします。

# useradd railsapp
# chmod 705 /home/railsapp/
# su - railsapp
% cd /home/railsapp
% rails hogehoge

hogehogeの内容は適当にどうぞ。
パーミッションは、/home/railsappをapacheから読めるように設定しておけばOKです。アプリはconfig/environment.rbの持ち主の権限で動作します。

VirtualHostの設定

/etc/httpd/conf.d/virtualhost.conf を作ります。

NameVirtualHost *:80

<VirtualHost *:80>
  ServerName hogehoge.example.jp
  DocumentRoot /home/railsapp/hogehoge/public
</VirtualHost>

Apache再起動確認

# /etc/init.d/httpd restart

これで http://hogehoge.example.jp で動作してるはず。
Capistranoでのデプロイ方法は後ほど別エントリで書きます。