Apache+mod_wsgiでPySVNを使ったらうまくいかないでござるの巻
あるいは 「"DLL not found" を解決するにはどうしたら…」
今さら python + Django でウェブアプリなんか作っている thalion です。作ろうとしているのは:
- リポジトリのURLとリビジョンを入れるフォームがあって
- それを入れて「実行」ってやると
- そのリビジョンに該当するファイル群に対して変換プログラムを実行してのコードを生成し、
- そいつをzipに固めてダウンロードする
という仕事をするもの。それほど複雑でもなさそうなので、Djangoの勉強をかねて作ってみることに。ちなみに空いているマシンがなかったので、俺のデスクトップPCを使うことに。Windows XP SP3 + Python 2.6.2 + Django 1.1。
SVNリポジトリへのアクセス
SVN リポジトリからファイルを取り出す処理は、PySVN というとても素晴らしいパッケージがあるので、そっちを利用したら30分程度でできた。いつも思うんだけど、python ってこういう楽できる環境が素晴らしい。
- ダウンロードはこちら pysvn: downloads
- ドキュメントはこちら pysvn documentation
Windowsの別プロセスをpythonから使う
変換プログラムは、実は Java で書かれているんで困ったんだけど、python の subprocess を使うと意外と簡単にできる上に、戻り値まで拾えることが分かった。ありがたい。
開発サーバー(manage.py runserver) でやってみる
…問題なく動く。おし。
暗礁
…あれ、上手くいかない。"DLL load failed: The specified module could not be found." pysvn の DLL がロードできないっていって、mod_wsgi で起動してる python スクリプトがコケるよ?
別のプロジェクトを作って "Hello world" してみたら、そっちはまともに表示できるので、デプロイ自体ではなく、どうも apache で起動されているプロセスで、DLL の検索パスが宜しくない感じ。
早速環境変数 "PATH" の最後に"C:\Python26\Lib\site-packages\pysvn"を追加して、念のためリブートしてやってみる。
…やっぱダメだ。どうやらこの環境変数をいじっても、apache が起動しているプロセスのDLL検索パスに反映されないっぽい。