久し振りに Kudu の Wiki を眺めていると、XDT のサンプルに環境変数を弄るものがありました。
Xdt transform samples · projectkudu/kudu Wiki · GitHub
system.webServer/runtime 要素で環境変数の追加、変更が可能になっています。XML スキーマが分からないので、他にどのような設定があるのか分かりませんが、今のところ環境変数のみのようです。
面白いことに、これまではバッチファイルなどを使わないと弄れなかった PATH が変更可能になっています。
<?xml version="1.0"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.webServer> <runtime xdt:Transform="InsertIfMissing"> <environmentVariables xdt:Transform="InsertIfMissing"> <add name="PATH" value="%PATH%;%HOME%\site\lib" xdt:Locator="Match(name)" xdt:Transform="InsertIfMissing" /> </environmentVariables> </runtime> </system.webServer> </configuration>
このような XDT を書くと、PATH に D:\home\site\lib を追加することが出来ます。当然ながらプロセス単位の環境変数ですが、ランタイムなどに依存する外部アプリケーションを実行する場合に便利そうです。
PATH の操作を行いたいシチュエーション No.1 は、Strawberry Perl を Web Apps で使う時かなと思ったので、実際に Perl をインストールして試してみました。デフォルトでは PATH を変更できないので、MySQL のドライバの読み込みに失敗していました。
ちょっと前に Perl アプリケーションを Web Apps にデプロイする方法が、Kudu の Wiki に追加されました。
Azure Web Appsでperl使いたい人どうぞ https://t.co/wEhqPn48DJ #jazug #azurejp
— 帝国兵 (@superriver) 2015年9月18日
折角なので、書いてある通りの手順を実行してみます。実行する Perl スクリプトは以下のような感じです。
print "Content-type: text/html\n\n"; print "Hello from Perl on Windows!\n"; print "<br />"; print $ENV{PATH}; print "<br />"; print "OK";
PATH を表示するだけの、何の変哲もない単純なスクリプトです。
ちなみに Kudu の Wiki に書いてある方法は FastCGI として動かす方法になります。
FastCGI として動かした場合
Wiki に書いてある通りに FastCGI として実行した場合の結果が以下になります。
何故か PATH が取れませんでした。理由が分からないので Kudu の Process Explorer から環境変数を確認してみたところ、CGI で使われる環境変数に全て置き換わっていました。
ちなみに同じ FastCGI で動く PHP 5.6 の場合は、問題なく PATH が設定されていました。
よくわからない挙動ですが、Perl の FastCGI モジュール固有のようです。
CGI として動かした場合
FastCGI がよくわからない挙動だったので、何となく CGI として実行してみると、今度は PATH の値は取れていますが XDT で設定したはずの値は設定されていませんでした。
これは CgiModule と Kudu のカスタムモジュールの実行順序かなという気がします。同じように XDT でモジュールの実行順序を入れ替えれば動くかもしれません。
Web Apps でお手軽に Movable Type を動かすには、なかなかに険しい道のようです。