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つで複数のポートを提供できるかな。
コメント