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/