在线安装rails,gem源被墙的解决办法
听说rails不错,想在本地安装个开发环境试试,结果gem install rails老是失败,搜索后才知道官方源被墙了,万恶的gfw阻碍人类进步好在还可以在http://手工下载gem文件手动安装,只是各种包依赖有好几十个,一个一个手工下载再安装好辛苦,遂写以下代码自动代我苦力
程序代码:
#!/usr/bin/env python # -*- coding: UTF-8 -*- import commands import os import re import urllib import urllib2 """ 自动下载安装最新版的rails,如果缺少相关的gem包则递归下载相应的gem包,直到安装成功为止 by BCCN.静夜思 2011.11.11 尊重他人劳动,转载请保留本段注释 使用方法: 新建一空文件夹,把本段代码保存为install_rails.py,如 mkdir newdir cd newdir sudo python install_rails.py """ def getcontent(url): """爬虫函数""" request = urllib2.Request(url) request.add_header('User-Agent', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)') try: content = urllib2.urlopen(request).read() except Exception, e: content = e return content def install(gem): if not re.search("%s[\-\d\.]+gem"%gem, str(os.listdir('.')), re.I|re.S): html = getcontent("http://"%gem) downurl = re.search('<a href="([^\"]+)" id="download">Download</a>', html, re.I|re.S).groups()[0] downurl = "http://" + downurl print "download %s .................."%gem urllib.urlretrieve(downurl, downurl.rsplit('/',1)[1]) gem_file = re.search("%s[\-\d\.]+gem"%gem, str(os.listdir('.')), re.I|re.S).group() status, result = commands.getstatusoutput("sudo gem install %s"%gem_file) if 'ERROR' in result and 'dependencies' in result: for require_gem in re.findall(' ([0-9a-zA-Z\-]+) \([=~>]', result, re.I|re.S): install(require_gem) os.system("sudo gem install %s"%gem_file) if __name__ == "__main__": install("rails")
使用方法:
1、首先确保你的系统装了python(不预装python的linux也不多见),如果确实没装,则
sudo apt-get install python
2、建一个空文件夹,并进入,如mkdir newdir
cd newdir
3、把上面的python代码保存为一个文件,如install_rails.pycd newdir
4、执行
sudo python install_rails.py
此操作可能需要十几至几十分钟5、为安装好的rails加个链接
sudo ln -s /usr/local/ruby/bin/rails /usr/bin/rails
注:
1、此方法会安装ruby on rails最新版,如需安装旧版,需要自己调整代码
2、上面的代码只适合在debian系使用,如ubuntu。如果是redhat、fedora或者windows,根据系统的不同调整下命令即可