ただのにっき
2007-02-07(水) [長年日記]
■ tDiary: 環境変数とproxyでハマる
最近はWebサービスを使うプラグインが増えてきて、必然的にtDiaryの動いているWebサーバからHTTPリクエストを出すことになるんだが、企業内で運用されてたりするとproxyを経由しなくてはいけない。この手のプラグインのさきがけであるamazon.rbが@options['amazon.proxy']というオプションを持っていたため、これを使いまわすプラグインがあり、「あんまりだ」という話になった。
そこで解決策として、新たに@options['proxy']というオプションを設け、これを共有することにした。HTTP以外のproxyなんて考慮しない大胆な設計。これを「HTTP脳」と名付けよう(余談)。
そうなるとさらに楽をしたくなるもので、GETリクエストしか使わない簡便なWebサービスの場合、open-uriを使ってproxy対応も「お任せ」にしたい。open-uriは環境変数を見てくれるので、@options['proxy']の値を環境変数に設定したらいいのではないか、ということで実装してみた。
まずはENV['HTTP_PROXY']に代入してみたところ、この値を見てくれない。調べてみたらruby-dev:22013という大昔の投稿を発見する。なるほど、たしかに危険だ。
じゃあ、ということでENV['CGI_HTTP_PROXY']を設定したら、proxyへのコネクションを開くところでこんどはInsecure operationなる例外が。これも調べてみると、ENVへのプログラム内部からの代入はすべて「汚染済み」扱いされてしまって、おまけにfronzen状態なのでuntaintもできない、と。そりゃそうか。今日は新発見が多いなぁ。何年Rubyやってんだ、おれ。
というわけで、@options['proxy']は採用するけど、それ以上の楽はできない、ということになりました。とほほ。巻き戻さないと(←ENV['HTTP_PROXY']代入版をcommit済みだったりする)。