トップ «前日 最新 翌日» 編集
RSS feed

ただのにっき


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済みだったりする)。

Tags: tDiary ruby
本日のツッコミ(全2件) [ツッコミを入れる]
yoosee (2007-02-08(木) 18:32)

open-uri のソース見ると opt_proxy が String の時はそれを使うっぽいので
  open(uri, :proxy => @opt['proxy'])
で proxy の指定が出来る感じがしますが、それじゃ駄目なんでしょうか。

ただただし (2007-02-08(木) 19:14)

現在の実装がそうなっているんです。それを環境変数に頼ることで不要にし、proxyの存在を気にかけない実装者がいても問題にならないようにしようとして失敗したというわけ。


トップ «前日 最新 翌日» 編集
RSS feed