从公司防火墙后面安装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,但其他操作系统可以使用相同的技术,只需适应一些事情。 成功
- 查看Internet Explorer代理设置以查找代理服务器的名称。
-
在gem命令的-p选项中使用代理服务器的名称。
gem update rails -p http://mylocalproxy.mycompany.com
如果这不起作用,您可以随时在互联网上设置自己的代理服务器。
我不是Ruby的专家。 尽管如此,我可能会给出以下“通用”建议(对于安装程序的许多情况都很有用):
-
检查运行的安装协议。 一些安装程序从镜像而不是主站点下载包,并且一些镜像可能使用FTP或其他东西而不是HTTP。 因此,您可能需要相应地更新设置,并与管理员确认公司代理能够从FTP站点检索数据。
-
检查安装程序正在运行的用户(某些安装程序必须将权限升级为“root”。因此,inheritance了另一个已定义的HTTP_PROXY的环境)。
-
检查安装程序用于下载软件包的内容(许多分发软件包管理器依赖于curl / libcurl,它将代理参数存储在rc文件中)。 与homedir应包含rc文件的用户相同的警告2。
-
透明代理:可以将最初针对Web的即时HTTP / FTP请求传输到代理。 公司代理(如果它可以使用这样的安装)或一些迷你本地代理,然后级联到公司代理。
-
在您的计算机和公司内允许查看Web的特殊计算机之间通过SSH(请参阅SSH的手册页)设置快速VPN(请参阅SSH的手册页),然后更新路由表以通过VPN路由流量。
-
您还可以使用开瓶器通过SSH连接(因此能够通过SSH安装VPN,如5),使用外部机器,在公司防火墙的另一侧,就像您在家中一样。 (这使用代理的HTTPS“CONNECT”模式来访问外部的SSH)。 只需确保管理员是 – 或者至少有一个负责人 – 保持循环并且不要惊慌。
-
绝望的措施:在运行每个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
**