[前][次][番号順一覧][スレッド一覧]

rails:3566

From: arton <arton@e...>
Date: Mon, 02 May 2011 23:45:30 +0900
Subject: [rails:3566] [ANN]NougakuDo - Windows x64 用Rails環境パッケージのリリース

artonです。

64ビットWindows用のRails環境NougakuDo(能楽堂)を作ったのでリリースしま
す。私が配布しているASRやRuby-1.9.2でRailsを利用するのであれば、こちらを
利用した方が、あらゆる点(インストールの簡便さ、実行速度、利用可能なメモ
リ量=スレッド数)でお得です。特に、Windowsの特徴であるHttp.sysの機能を
相当引き出しているつもりなので、Windows用実行環境としては、マルチプロセ
スでの実行の簡単さや、速度面では最も優れていると思います。

特徴:

Ruby 1.9.3 (開発バージョン)をVisual Studio 2010 X64 でビルド。
あらかじめ、Rails 3.0.7 を同梱。
libyaml, gzip などは64ビットライブラリを同梱
ruby-sqlite3 はX64用にビルドしたsqlite3と静的にリンク (testスクリプト 
の実行しか確認していません)
超高速なWebサーバ Ennou(https://github.com/arton/ennou)を同梱(後述)
マルチプロセスサーバを簡単に起動するためのローンチャ(NougakuDo)を同梱
ライセンスは、Ennouを除きRubyに合わせてBSDとします。
つまり、WindowsでのRailsの開発、実行を1つのパッケージでまかなうことを目
的とした簡単導入ツールです。

サポートプラットフォーム:
条件は、X64版であることと、HTTP API 2.0をサポートしていることです。
Windows 7 (X64): テストは、この環境(SP1)で、行っています。
Windows Server 2008 R2:理屈の上では稼働可能です。

Ennou(演能)https://github.com/arton/ennou
Ennouは、WindowsのHTTP.SYSを利用することで、複数のプロセスに同一HTTPポー
トを割り当てることと、HTTPのプロトコルをサービスに実行させることで、複数
プロセスへのリクエスト割り当てによる並行性の向上と、プロトコル解析のオー
バーヘッドの低減を狙ったWebサーバ(HTTP.SYSラッパー)です。
本プログラムは、LGPLなので、再配布などは完全に自由ですが、ソースを修正し
た場合は公開してください。
どのくらい高速かというと、1プロセスでWEBrickの20倍以上、3プロセスで50倍
程度です。単なるindex.htmlの応答であればRailsを通しても秒あたり1プロセス
で600リクエスト程度は処理しました(このへんはネットワークの太さやマシン
スペックに依存するので目安ということで)。ただし、各プロセス、最初のリク
エストはRailsの初期化が走るからだと思いますが、普通に時間がかかります。

インストール方法:
インストールは、http://www.artonx.org/data/nougakudo/ から、NougakuDo
1.0.0  のリンクを利用してダウンロード、実行してください。

インストール先:
ユーザのRoamingディレクトリへインストールします。
ファイルの追加(Gemのインストールなど)は、これによって簡単にできるはず
です。
ただし、うかつにファイルを削除するとMSIの監視機能により再インストールが
走るので注意してください。

使い方:
インストールすると、スタートメニューに、以下の3つのアイコンが登録されま
す。
・Comand Prompt − RubyへPATHを通して、Roamingディレクトリを開きます。
希望としては、このディレクトリで、Railsコマンドを実行してアプリケーショ
ンを作ってください(rails new APP)。 
・irb − irbです。
・NougakuDo − このアイコンを実行すると、最初に管理者権限への昇格を求め
られます。
これは、HTTP.SYSを利用するのに管理者権限が必要だからです(※)。

※)管理者権限ということで、何をしているか気になるようでしたら、
roaming\nougakudo\binのnougakudo.htaを読んでください。HTML+Rubyの小さな
プログラムなので実行内容は明解だと思います。

次に、HTMLアプリケーションが動き出します。上のほうのinput type="file" に
対して、RailsアプリケーションのRack設定ファイル(通常、config.ru)を指定
してください。
内容を読み取ってリスト表示します。
オプションやプロセス数などを設定して、Launchボタンをクリックすると、指定
された内容でRailsを実行します。
なお、アプリケーションのURIは、
        http://ホスト名:80/アプリケーション名/ 
となります。仮想ホストではなく、トップディレクトリでアプリケーションを分
ける仕様です。アプリケーションは、Railsコマンドで作成したアプリケーショ
ンと同じです。これは、Config.ruのrunコマンドから読み取って設定します。
1プロセスの場合も、複数プロセスの場合も、黒いコマンドプロンプトは1個のみ
利用します。終了時は、Ctrl-Cを打ち込んでください。
なお、同時に同一アプリケーションを複数起動することはできません。HTTP.SYS
によってURI競合としてエラーとなります。
異なるアプリケーションを起動することは可能ですが、現在はバグがあるので、
おそらく動きません(HTTP.SYSのキュー名の変更処理が抜けている)

能楽堂を利用しない実行
rackupを使ってください。演能を利用する場合は、
 rackup -s Ennou   # シングルプロセス
 rackup -s Ennoumu # マルチプロセス
です。マルチプロセスの場合は、プロセス数をconfig.ruで指定してください。
指定方法は、
Rack::Handler::Ennoumu.config :nprocs => 4 # 既定は2 。この例では4
です。runの行の直前に入れてください。

問題点(あるいは制限事項):
現在の実装では、HTTP.SYSの呼び出しは、ポールです。このため、極めて短い間
隔でIOコンプリーションチェックのためのループを行います。
これによって、CPUは常に利用されている状態となります(大体1プロセスでアイ
ドル時でも5%くらい)。つまり、環境には優しくありません。
また、ポールの都度スレッド切り替えを行いますが、GVLを解除せずに同期的に
外部リソース(RDBなど)を呼び出すとそのプロセスは止まります。
このような外部リソースを利用するアプリケーションはプロセス数を増やして実
行してください。気が向いたら、GVLを解除しながら実行するOLEDBプロバイダ呼
び出しライブラリを作るかも知れません。

その他:
Ennouに関する質問や要望、バグ報告については https://github.com/arton/ennou 
のIssuesを利用してください。
その他のことについては、当MLが良いと思います。能楽堂に対する質問のつもり
でも、実際はRailsについての質問という可能性があるからです。

#これ、ruby-listにマルチポストしても良いかな?

-- 
arton


--
ML: rails@r...
使い方: http://QuickML.com/

[前][次][番号順一覧][スレッド一覧]