从公司防火墙后面安装gem

我怀疑企业防火墙阻止了gem的安装。 我定义了HTTP_PROXY,我可以通过以下命令查看远程gems:

jruby -S gem list -r 

但是当我去安装gem时,我得到了404:

 jruby -S gem install rails 

除了维护内部gem存储库之外,还有一个很好的解决方法可以解决这个问题吗?

对于rubygem,把它放在我的gem.bat中这对我有用

 @"%~dp0ruby.exe" "%~dpn0" %* --http-proxy http://domainname.ccc.com:8080 

对于jrubygem,这是有效的

 @"%~dp0jruby.exe" "%~dpn0" %* -p http://domainname.ccc.com:8080 

同样设置环境变量就像

 set http-proxy=http://domainname.ccc.com:8080 

或者您的代理服务器需要身份validation

 set http-proxy=http://user:password@host:port) 

编辑:对于拥有非常严格的防火墙或没有互联网访问权限的人(例如在服务器上),您可以执行以下操作:在可以免费访问互联网的PC上安装gem,然后检查文件夹C:\ Ruby193 \ lib \ ruby​​ \ gems \ 1.9.1 \ cache并复制所有gem,其中包含您安装完成后最后修改的日期。 在目标PC上,您将它们复制到同一文件夹中,或者如果您之后在bin文件夹中清理它并在那里开始安装

 c:\ruby193\bin\gem.bat install --local gemname-xxxgem 

gemname-xxxgem是您要安装的基本gem的gem文件名。 应该安装具有所有依赖项的gem。 这适用于Windows,但其他操作系统可以使用相同的技术,只需适应一些事情。 成功

  1. 查看Internet Explorer代理设置以查找代理服务器的名称。
  2. 在gem命令的-p选项中使用代理服务器的名称。

    gem update rails -p http://mylocalproxy.mycompany.com

如果这不起作用,您可以随时在互联网上设置自己的代理服务器。

我不是Ruby的专家。 尽管如此,我可能会给出以下“通用”建议(对于安装程序的许多情况都很有用):

  1. 检查运行的安装协议。 一些安装程序从镜像而不是主站点下载包,并且一些镜像可能使用FTP或其他东西而不是HTTP。 因此,您可能需要相应地更新设置,并与管理员确认公司代理能够从FTP站点检索数据。

  2. 检查安装程序正在运行的用户(某些安装程序必须将权限升级为“root”。因此,inheritance了另一个已定义的HTTP_PROXY的环境)。

  3. 检查安装程序用于下载软件包的内容(许多分发软件包管理器依赖于curl / libcurl,它将代理参数存储在rc文件中)。 与homedir应包含rc文件的用户相同的警告2。

  4. 透明代理:可以将最初针对Web的即时HTTP / FTP请求传输到代理。 公司代理(如果它可以使用这样的安装)或一些迷你本地代理,然后级联到公司代理。

  5. 在您的计算机和公司内允许查看Web的特殊计算机之间通过SSH(请参阅SSH的手册页)设置快速VPN(请参阅SSH的手册页),然后更新路由表以通过VPN路由流量。

  6. 您还可以使用开瓶器通过SSH连接(因此能够通过SSH安装VPN,如5),使用外部机器,在公司防火墙的另一侧,就像您在家中一样。 (这使用代理的HTTPS“CONNECT”模式来访问外部的SSH)。 只需确保管理员是 – 或者至少有一个负责人 – 保持循环并且不要惊慌。

  7. 绝望的措施:在运行每个http隧道的两台机器之间通过仅允许HTTP请求的代理创建隧道。 然后使用隧道建立SSH VPN。

这些解决方案并非特定于Ruby,但可以帮助您完成过度限制防火墙背后的任何绝望解决方案。

1到4应该适用于大多数情况。 如果面对一些奇怪的和/或偏执的防火墙,你将不得不求助于5到7。 7是相当极端但总是有效,尽管有时会带来灾难性的表现。

首先简单一点:当您尝试列表和安装时,您是否在同一个shell会话中? 也许你忘了第二次设置env?

尝试设置http_proxy而不是HTTP_PROXY

确保代理设置是有效的URL(见下文)

你有多个代理选项吗? 打开IE并在地址栏中输入wpad 。 您可能会看到其他一些可能性。

您的代理是否经过身份validation 如果是这样,您是否在URL中拥有凭据。 我是这样的(在Windows上):

 set http_proxy=http://myuserid:mypassword@internetproxy:3128 

您的密码是否有任何标点字符? 尝试使用数字和字母,因为:@ (可能还有其他)在URL字符串本身很重要。

您可以使用此工具: http : //ntlmaps.sourceforge.net/

gem不支持代理身份validation,因此通过辅助代理(例如,您的机器)为您进行身份validation,让gem认为没有身份validation可以让您的生活更轻松。

另一个愚蠢的问题,但什么是企业代理软件? 一些基于Windows的软件倾向于使用所有客户端都不支持的奇怪的身份validation标准(NTLM哈希等)(例如,wget不支持它),但是许多浏览器都支持这些标准。

因此,即使您尝试将用户名和密码写入代理URL,当您尝试下载并安装软件包时,它也无法正常工作,尽管当您尝试在FireFox中显示页面时,它仍能正常工作。 我和一些公司网络以及我的发行版包管理器有类似的问题。

在这种情况下,您可能会使用像ntlmaps这样的东西。 您将它用作本地代理,然后将请求级联到公司代理。 好处是ntlmaps将能够使用公司代理validation奇怪的NTLM密码,并且所有应用程序都能够连接到ntlmaps,甚至是那些不支持NTLM的应用程序。

我已经重新测试了这一点,因为gemcutter.org人员将模式转换为亚马逊的Cloudfront,并且能够通过我的雇主的防火墙再次下载gem。

我描述了一个程序来解决企业防火墙的任何限制:

如何从代理(ISA-NTLM)后面更新Ruby Gems

它基本上使用ssh隧道和程序tsocks。

1.GO到您安装ruby的驱动器。 2.您将根据您安装的版本找到名为“ruby200-x64”的文件夹或与其类似的文件夹。 3.在文件夹打开… bin / 4.找到gem.bat,用任何文本编辑器打开它你会发现一堆设置。 5.在@“%~dp0ruby.exe”“%~dpn0”%*之后放置代理服务器地址和端口。 **

@“%~dp0ruby.exe”“%~dpn0”%* –http-proxy http://domainname.ccc.com:8080

**