2009-12-14 58 views
7

我懷疑企業防火牆阻止安裝gem。我已經HTTP_PROXY定義,我可以通過下面的命令來查看遠程寶石:從企業防火牆後面安裝gems

jruby -S gem list -r 

但是當我去安裝一個寶石,我收到了404:

jruby -S gem install rails 

是否有一個良好解決這個問題的辦法,而不是維護一個內部的寶石資料庫?

+0

剛剛找到更具體的信息,我的問題並在此處記錄它以防有人遇到此問題。問題中的防火牆阻止任何gemcutter用來存儲gems的Amazon S3中的任何內容。 – digitalsanctum 2009-12-15 21:01:28

+0

這是一個瘋狂的防火牆策略。你甚至無法使用IE或Firefox瀏覽這些文件? – MattMcKnight 2009-12-23 16:06:19

+0

我同意。這是一個瘋狂的防火牆策略。歡迎來到我的世界:) – digitalsanctum 2009-12-23 17:05:40

回答

0

自從gemcutter.org人們將模式轉到亞馬遜的Cloudfront並能夠通過我的僱主的防火牆再次下載寶石後,我對此進行了重新測試。

2

我不是Ruby的專家。儘管如此,我可能給下面的「通用」建議(對於很多情況與安裝有用):

  1. 檢查該協議是運行在安裝過程。一些安裝程序從鏡像而不是主站點下載軟件包,一些鏡像可能使用FTP或其他代替HTTP的其他軟件。因此,您可能需要相應地更新設置,並與您的管理員確認企業代理能夠從FTP站點檢索數據。

  2. 檢查安裝程序正在運行的用戶(某些安裝程序必須將特權提升爲「root」,因此會繼承與定義的另一個HTTP_PROXY不同的環境)。

  3. 檢查安裝程序使用什麼來下載軟件包(許多分發軟件包管理器依靠curl/libcurl將其代理參數存儲在rc文件中)。對於homedir應包含rc文件的用戶,警告與2相同。

  4. 透明代理:可以將初始定位到Web的即時HTTP/FTP請求傳輸到代理。企業代理(如果它可以使用這種安裝)或者一些小型本地代理,然後再級聯到企業代理。

  5. 通過SSH(請參閱SSH的手冊頁)在您的機器和公司內的一臺允許查看網絡的特殊機器之間建立一個快速VPN(隧道其他PPP),然後更新路由表以通過路由VPN。

  6. 您也可以使用corkscrew通過SSH連接(因此能夠通過SSH安裝一個類似於5的VPN),並且可以在企業防火牆的另一側使用機器,就像您在家中一樣。 (這使用代理的HTTPS「CONNECT」模式訪問外部的SSH)。只要確保管理員 - 或者至少有一個負責人 - 保持循環,不要恐慌。

  7. 絕望的措施:在兩臺運行着每臺機器的機器之間創建一個隧道,通過一個只允許HTTP請求的代理服務器運行,每臺機器上運行着每個機器上的http tunnel。然後使用隧道建立SSH VPN。

這些解決方案不是特定於Ruby,但可以幫助你通過任何絕望的解決方案背後的過度限制防火牆。

1至4應該在大多數情況下工作。如果遇到一些奇怪的和/或偏執的防火牆,你將不得不求助於5到7。雖然有時會帶來災難性的表現,但它總是起作用。

+0

代理和/或隧道真的不是這裏的選擇。企業防火牆是有原因的,我不想冒險繞過它的工作。 – digitalsanctum 2009-12-14 23:44:29

+0

如果公司代理髮生與軟件不兼容的情況,您仍然可以在兩階段實施中將代理* *代入公司代理。 (中間代理用於在兩個不兼容的軟件之間傳遞請求)。 此外,通過使用正確的身份驗證方案和遠程計算機,可以使基於SSH的隧道(SSH-VPN或SSH-PPP)真正安全。此外,隧道僅在SSH運行時才存在。因此可以作爲更新腳本的一部分打開和關閉。 「冒着工作的危險」:我沒有提到讓管理員或人員知道嗎? – DrYak 2009-12-15 19:10:09

2

簡單的事情第一:你是否在同一個shell會話,當你同時嘗試列表和安裝?也許你忘了第二次設置env?

嘗試設置http_proxy而不是HTTP_PROXY

確保代理設置是有效的URL(見下文)

你有多個代理的選擇嗎?打開IE並在地址欄中輸入wpad。您可能會看到其他一些可能性。

您的代理是否已通過身份驗證?如果是這樣,你是否有在URL中的憑據。我是這樣的(在窗口上):

set http_proxy=http://myuserid:[email protected]:3128 

你的密碼是否有任何標點符號?只用數字和字母來嘗試,因爲:@(可能還有其他)在URL字符串本身中很重要。

+0

我已經嘗試了所有這些建議,並且未驗證代理。 – digitalsanctum 2009-12-14 23:42:28

+0

您的意思是在「myuserid%3Amypassword」中使用「%3A」還是冒號「:」? – 2011-01-12 11:54:14

+0

是它的冒號,堆棧溢出是由於某種原因對它進行編碼的。 – Rob 2011-01-12 23:22:46

0

另一個愚蠢的問題,但什麼是企業代理軟件?一些基於Windows的軟件傾向於使用奇怪的身份驗證標準(NTLM哈希等),這是所有客戶端都不支持的(例如,wget不支持它),但是受許多瀏覽器支持。

因此,即使您嘗試將用戶名和密碼寫入代理URL,當您嘗試下載並安裝軟件包時,它也不起作用,儘管當您嘗試在FireFox中顯示頁面時它工作得很好。我在某些企業網絡和我的發行版軟件包管理器中遇到過類似的問題。

在這種情況下,您可能會使用類似ntlmaps之類的東西。您將其用作本地代理,然後將請求級聯到公司代理。好的是,ntlmaps將能夠使用公司代理驗證奇怪的NTLM密碼,並且所有應用程序都可以連接到ntlmaps,即使那些不支持NTLM的應用程序也可以。

1

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

寶石不支持代理認證,通過二級代理,以便去(比如說,你的機器),做認證你,讓寶石認爲有沒有認證發生應該讓你的生活更輕鬆。

4
  1. 查看Internet Explorer代理設置以查找代理服務器的名稱。
  2. 在gem命令的-p選項中使用您的代理服務器的名稱。

    寶石更新軌道-p http://mylocalproxy.mycompany.com

如果這不起作用,你總是可以設置自己的代理服務器了在互聯網上的某個地方。

9

紅寶石寶石,將這個我在這gem.bat對我的作品

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

JRuby的寶石這部作品

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

還設置環境變量的運行方式

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

或者您的代理服務器需要身份驗證

set http-proxy=http://user:[email protected]:port) 

編輯:對於有非常嚴格的防火牆或沒有互聯網接入的人(例如在服務器上),您可以執行以下操作:將寶石安裝在可免費訪問互聯網的電腦上,文件夾C:\ Ruby193 \ lib \ ruby​​ \ gems \ 1.9.1 \ cache,然後複製所有寶石,並在您進行安裝後最後一次修改日期。在目標電腦上覆制他們在同一個文件夾,或者如果你在你的bin文件夾清理之後,並開始與

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

gemname-xxxgem是要安裝底座寶石的寶石名安裝有。應該安裝具有所有依賴項的gem。這是用於Windows,但其他操作系統可以使用相同的技術,只適應一些事情。 成功

+0

你在哪裏輸入或添加它? – 2013-02-13 16:19:05

+0

在你的gem.bat文件中,另請參閱我的更新 – peter 2013-02-13 19:57:12

+0

什麼是gem.bat的位置 – 2013-02-14 14:37:56

0

1.GO到您安裝紅寶石的驅動器。 2.您會根據您安裝的版本找到名爲「ruby200-x64」或類似的文件夾。 3.打開文件夾... bin/ 4.找到gem.bat,用任何文本編輯器打開它,你會發現一堆設置。 5.在@「%〜dp0ruby.exe」「%〜dpn0」%*之後放置你的代理服務器地址和端口。 **

@ 「%〜dp0ruby.exe」 「%〜dpn0」 %* --http代理 http://domainname.ccc.com:8080

**

相關問題