使JRuby继承Java代理设置

时间:2011-01-30 17:59:11

标签: ruby http proxy jruby jrubyonrails

我想从JRuby上运行的Rails代码发出HTTP请求。

如何重新使用http.proxyHost,http.proxyPort和http.nonProxyHosts设置,为JVM运行它?

2 个答案:

答案 0 :(得分:3)

要通过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

答案 1 :(得分:1)

我遇到了同样的问题。我发现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不应该有引用,请参阅here

现在我发现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

希望有所帮助。

相关问题