ruby的gem默認不會使用系統(tǒng)的代理谓晌,使用代理每次都需要添加參數(shù)--http-proxy
吸重,感覺很麻煩霞篡,搜索了一下也沒找到什么好的辦法。后來找到了gem的代碼萧锉,是使用ruby寫的珊随,簡單修改一下就可以永久設(shè)置好gem的代理,不用每次都加上代理的參數(shù)了。
gem的代理
- 首先找到gem文件的位置叶洞,一般都在ruby的安裝目錄下鲫凶,如C:\RailsInstaller\Ruby2.3.0\bin,如果找不到可以在命令行使用指令找衩辟,win下是
where gem
螟炫,linux下是which gem
。 - 然后打開gem的文件艺晴,win是
gem.cmd
昼钻,linux是gem
。然后在文件最后面找到如下代碼
begin
Gem::GemRunner.new.run args
rescue Gem::SystemExitException => e
exit e.exit_code
end
在begin語句的下面添加一行args += ['--http-proxy','http://x.x.x.x:port']
,把里面的ip和端口換成自己的封寞。gem文件修改后如下:
begin
args += ['--http-proxy','http://x.x.x.x:port']
Gem::GemRunner.new.run args
rescue Gem::SystemExitException => e
exit e.exit_code
end
保存后再使用gem安裝時就不用每次都輸入代理的參數(shù)了然评。
bundle的代理
使用rails新建工程后會自動執(zhí)行bundle install
,可能會由于代理問題無法訪問https://rubygems.org
而導(dǎo)致失敗狈究,提示Retrying fetcher due to error (4/4): Bundler::HTTPError Could not fetch specs from https://rubygems.org/
碗淌,可能是https://rubygems.org
無法訪問(可以用瀏覽器打開試試),也可能是系統(tǒng)代理的問題(如果需要通過代理上網(wǎng)多半是這個原因)抖锥。
第一種的解決辦法是配置淘寶的source贯莺,找到工程所在的目錄下的Gemfile
和Gemfile.lock
兩個文件,將其中的source修改為http://ruby.taobao.org/
宁改。
第二種的解決辦法是在系統(tǒng)環(huán)境變量中添加http_proxy
缕探,值為http://x.x.x.x:port
。win的環(huán)境變量在控制面板->系統(tǒng)和安全->系統(tǒng)->高級系統(tǒng)設(shè)置->環(huán)境變量中还蹲,在下方的系統(tǒng)環(huán)境變量處新建即可爹耗。linux是直接修改/etc/environment,添加一行http_proxy="http://x.x.x.x:port"
谜喊,保存后執(zhí)行一下source /etc/environment
即可潭兽。