5

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

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

4

2 回答 2

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
于 2011-01-31T05:08:51.090 回答
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 不应有引用,请参见此处

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

希望有帮助。

于 2014-01-10T11:15:03.370 回答