« ThinkFree | Main | OpenLDAPのインストール »

2007.05.15

redMine&Apache(SCGI)

 redMineをApache+FastCGI環境で稼働させると、非常に頻繁にRuby.exeがエラーを発生。WEBrickを使用しても頻繁にエラーが発生するのでRubyForApacheでインストールされたモジュールのうち、Rubyフォルダ内にインストールされたどれかのファイルが原因だろうと推測し、試しにC:\ruby\lib\ruby\site_ruby\1.8\i386-msvcrtフォルダからmysql.soファイルを取り除いてみると、WEBrickでは問題なく動作するようになりました。Apache+FastCGIの環境でもかなり安定して稼働するようにはなったのですが・・・

(OS 109)パイプは終了しました。 : FastCGI: comm with server "C:/Tools/redmine-0.5.0/public/dispatch.fcgi" aborted: GetOverlappedResult() failed, referer: http://testsvr:8080/redmine/projects/show/2

FastCGI: incomplete headers (0 bytes) received from server "C:/Tools/redmine-0.5.0/public/dispatch.fcgi", referer: http://testsvr:8080/redmine/projects/show/2

というエラーが不定期に発生してしまうようです(C:/Tools/redmine-0.5.0/tmp/sessions/フォルダ内を空にしても改善されず)。どうも、このエラーはmod_fastcgiを使用していると結構頻繁に(?)遭遇する現象のようで。ちなみに、このときの呼出パラメータは以下のような感じ。
FastCgiConfig -appConnTimeout 30 -startDelay 30 -maxClassProcesses 1 -maxProcesses 5 -minProcesses 5 -processSlack 1 -idle-timeout 180 -initial-env RAILS_ENV=production -initial-env PATH -initial-env ARP_ICONV_PATH

 FastCGIの実装として、mod_fastcgiの他にmod_fcgidというのがあるようですが・・・どうも上手く動作させることができない状態(Ruby側のモジュールの構築方法がわからない・・・)。

 ってことで、Ruby on Railsアプリケーションを動作させる場合、他にどんな方法があるかを調べてみると、rails-asyncwebというJRubyで実装されたhttpサーバや、MongrelLighttpdを使用した方法があるようです。ただ、いずれもそれ自体がhttpサーバとして動作するため、Apacheをフロントエンドとする場合はリバースプロキシの方法となるかと(Subversion等も含めて全てLighttpd上で動作するのであれば、それはそれでありかもしれませんが)。

 もっと調べてみると、Linux環境ではApache+SCGI(http://www.thinkit.co.jp/free/article/0605/2/7/より)という組み合わせもあるようで。SCGIのwin32版モジュールが存在すれば、Windows上でもApache+SCGI環境を構築できるはず・・・ってことで挑戦。SCGIはSCGI Ruby on Rails Runnerで公開されているようです。

■前準備
 Getting Started With SCGIによると、cmdparse 2.0.0 or greaterhighline 1.0.1 or greaterが必要となるようなので、

gem install cmdparse highline

でインストールしておきます。僕の環境では以下のような感じでインストールされました。
Successfully installed cmdparse-2.0.2
Installing ri documentation for cmdparse-2.0.2...
Installing RDoc documentation for cmdparse-2.0.2...
Successfully installed highline-1.2.7
Installing ri documentation for highline-1.2.7...
While generating documentation for highline-1.2.7
... MESSAGE: Unhandled special: Special: type=33, text="A"
... RDOC args: --ri --op c:/ruby/lib/ruby/gems/1.8/doc/highline-1.2.7/ri --title
HighLine Documentation --main README --quiet lib README INSTALL TODO CHANGELOG
LICENSE
(continuing with the rest of the installation)
Installing RDoc documentation for highline-1.2.7...

■モジュールのダウンロード&インストール
 Win32 Supportのページからapache2-mod_scgi.zipをダウンロード。併せて、ダウンロードページからscgi_rails-0.4.3.gemをダウンロード(apache2-mod_scgi.zipも実はここからのダウンロードだったりしますが)。
 apache2-mod_scgi.zip内に含まれているmod_scgi.soファイルはApache2のmodulesフォルダ内にコピー。scgi_railsに関しては、gemファイルのあるフォルダで

gem install scgi_rails

でインストール。こんな感じでサクッとインストール完了しました。
Successfully installed scgi_rails, version 0.4.3
Installing ri documentation for scgi_rails-0.4.3...
Installing RDoc documentation for scgi_rails-0.4.3...

■SCGIの設定
 コマンドプロンプトでカレントフォルダをc:\tools\redmine-0.5.0にして、

scgi_ctrl config -e production -S

を実行(FAQによると、Windows環境では-Sオプションが重要だそうです)。What password do you want?と聞いてくるので、任意のパスワードを入力。ここで入力したパスワードは、scgi_ctrlでアプリケーションを制御(停止等)したりする際に必要となるものです。
 設定が無事に完了するとconfigフォルダにscgi.yamlファイルが生成されます。SCGIのサービスは、このyamlファイルの内容を元に動作するようです(ログファイルの出力先やポート番号等の情報が出力されています)。

■httpd.confの設定
 普通にモジュールの読込を行い、

LoadModule scgi_module modules/mod_scgi.so

以下のような感じで設定を行います。
SCGIMount /redmine/ 127.0.0.1:9999
Alias /redmine/images /Tools/redmine-0.5.0/public/images
Alias /redmine/javascripts /Tools/redmine-0.5.0/public/javascripts
Alias /redmine/manual /Tools/redmine-0.5.0/public/manual
Alias /redmine/stylesheets /Tools/redmine-0.5.0/public/stylesheets
<LocationMatch "\/(stylesheets|images|manual|javascripts)\/.+\..+$">
  SCGIHandler Off
</LocationMatch>

 Aliasの設定を忘れると、JavaScript等のロードに失敗します。基本としては、publicフォルダ内の全てのフォルダに対してAliasを割り当てるような感じでしょうか(ルートから割り当てることができると楽なのですが・・・)。

■実行
 コマンドプロンプトでカレントフォルダをc:\tools\redmine-0.5.0にして、

scgi_service

で、SCGIサービスを起動。config/scgi.yamlファイルで設定されたポート番号(デフォルトだと9999)でRuby.exeが待機します(カレントフォルダを基準にscgi.yamlファイルを読み込みに行くのでカレントフォルダの場所が重要となります)。
 あとは、Apacheを起動し、普通にブラウザからhttp://testsvr:8080/redmine/のような感じでアクセスすればOKです。
 サービスを停止する場合は、別のコマンドプロンプトを開いて、やはりカレントフォルダをc:\tools\redmine-0.5.0にして
scgi_ctrl stop

を実行します(設定時に登録したパスワードの入力が必要となります)。

#mod_fastcgiの際に変更した設定等を全てコメントアウトしておかなければ予期せぬ動きをしてしまうかもしれません。

|

« ThinkFree | Main | OpenLDAPのインストール »

Subversion・Trac・etc.」カテゴリの記事

Comments

Post a comment



(Not displayed with comment.)


Comments are moderated, and will not appear on this weblog until the author has approved them.



TrackBack


Listed below are links to weblogs that reference redMine&Apache(SCGI):

» Ruby(ルビー) Rubyニュース [Ruby(ルビー) Rubyニュース]
RubyRuby(ルビー)は、まつもとゆきひろ(通称Matz)により開発されたオブジェクト指向スクリプト言語であり、従来Perlなどのスクリプト言語が用いられてきた領域でのオブジェクト指向プログラミングを実現する。Rubyは当初1993年2月24日に生まれ、1995年12月にfj上で発表された。名称のRubyは、プログラミング言語Perlが6月の誕生石であるPearl(真珠)とほぼ同じ発音をすることから、まつもと氏の同僚の誕生石(7月)のルビーを取って名付... [Read More]

Tracked on 2007.05.16 10:25

« ThinkFree | Main | OpenLDAPのインストール »