SOAP4Rのwsdl2ruby.rbが--type serverで生成してくれるスタンドアローンサーバーはデバッグに便利だけど、重いし、本運用には向かない。ので、Apacheの下にFastCGI経由でぶらさげて動かす。
Apacheの設定は普通なので略。
wsdl2ruby.rb --wsdl /path/to/wsdl --cgi_stub
これで、CGI版のスタブコードが生成される。
ServiceNameService.cgi っていう名前の筈。アプリケーションのメインのクラスが ::SOAP::RPC::StandaloneServer
の代わりに ::SOAP::RPC::CGIStub
を継承したものになっているのがポイント。
この CGIStub
クラスはFastCGIにも対応している代物なので、ちょっと触るだけで済む。具体的には、スタブコードの最後の
PortNameApp.new('app', nil).start
これを次のように書き換える。
require 'fcgi' FCGI.each do |fcgi| app = PortNameApp.new('app', nil) app.set_fcgi_request(fcgi) app.start end
残念ながら、wsdl2ruby.rbが生成するスタブコードは複数のポートはサポートしない。だから、ポートごとに同様に作業をして、別々のfcgiファイルにするしかない。
SOAP-Actionヘッダフィールドを見てmod_rewriteしてやったら、エンドポイントのlocationは1つで複数のポートを提供できるかな。