JRuby 上で実行されている Rails コードから HTTP リクエストを作成したいと考えています。
それを実行しているJVMに与えられたhttp.proxyHost、http.proxyPort、およびhttp.nonProxyHosts設定を再利用するにはどうすればよいですか?
JRuby 上で実行されている Rails コードから HTTP リクエストを作成したいと考えています。
それを実行しているJVMに与えられたhttp.proxyHost、http.proxyPort、およびhttp.nonProxyHosts設定を再利用するにはどうすればよいですか?
JRuby を介して JVM フラグを渡すには、-J...
. この場合:
jruby -J-Dhttp.proxyHost=foo -J-Dhttp.proxyPort=1234 -J-Dhttp.nonProxyHosts="*.bar.com" ...
これは、JRuby のヘルプ テキストで説明されています。
-J[java option] pass an option on to the JVM (e.g. -J-Xmx512m)
use --properties to list JRuby properties
run 'java -help' for a list of other Java options
私は同じ問題を抱えています。java または net::http が nonProxyHosts オプションに従わないことがわかりました。これを回避する最善の方法は、これを考慮して ENV_JAVA 設定を変更することです。
nonProxyHosts が使用されていることを確認するために行った手順は次のとおりです。
1) JAVA_OPTS="-Dhttp.proxyHost=192*** -Dhttp.proxyPort=1234 -Dhttp.nonProxyHosts=local|127.0.0.1"
OR
1) JRUBY_OPTS="-J-Dhttp.proxyHost=192*** -J-Dhttp.proxyPort=1234 -J-Dhttp.nonProxyHosts=local|127.0.0.1"
少なくとも java1.7 では、nonProxyHosts に引用符を付けないでください。ここを参照してください。
今、net::http または Java 自体が実際には nonProxyHosts オプションを尊重していないことがわかりました。
ただし、JRuby で次の手順を実行することで、これを回避できます。
a = URI("http://someurl")
Net::HTTP.new(a).proxy?.should == true
regex = /$#{ENV_JAVA["http.nonProxyHosts"]}/ #dollar needed to behave as expected
if a.hostname.match(regex)
ENV_JAVA["http.proxyHost"]=nil
end
Net::HTTP.new(a).proxy?.should == false
それが役立つことを願っています。