首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > Ruby Rails >

RubyGems详解_深入了解(二)

2012-08-28 
RubyGems详解_深入理解(二)?RubyGems详解_深入理解(二)?一。基本知识官方网站:?http://www.rubygems.org/这

RubyGems详解_深入理解(二)

?

RubyGems详解_深入理解(二)

?

一。基本知识

官方网站:?

http://www.rubygems.org/

这里是rubygems的信息大全,提供安装,升级,发布gem的方法

?

下载安装:?

http://rubygems.org/pages/download

?

Gem的Specification Reference:?

http://guides.rubygems.org/specification-reference/

?

rubygems的常用命令:

gem update --system

Update to the latest RubyGems version

gem build foo.gemspec

Build your gem

gem push foo-1.0.0.gem

Deploy your gem instantly

?

gem的命令和解释大全:

http://guides.rubygems.org/command-reference/

?

二 rubygems深入理解

?

rubygems对ruby做了什么

RubyGems modifies your Ruby load path, which controls how your Ruby code is found by the require statement. When you require a gem, really you’re just placing that gem’s lib directory onto your $LOAD_PATH.?

?

简单来说,就是把gem包路径加入了ruby的加载路径中,这样的好处:

1) 存放位置: 这些gem包和文件不必放入ruby包的路径中,保持了分离性;

2)多半本共存: 可以根据指定版本号,使用同一个gem包的不同版本,这样不同版本的gem可以共存;

3)版本依赖: gem包会依赖别的gem,rubygems解决了依赖问题;

需要仔细看前面的文章:http://fantaxy025025.iteye.com/blog/1261435

?

rubygems为了做到上面的功能,做了很多的处理:

1)把gem放在了单独的一个位置,可以用命令来查看

#--对应rvm的

lijg@lijg-pc ~/.rvm/gems/ruby-1.8.7-p352@rails-2.3.5/gems $ gem environment gempath

/home/lijg/.rvm/gems/ruby-1.8.7-p352@rails-2.3.5:/home/lijg/.rvm/gems/ruby-1.8.7-p352@global

#--对于非rvm的,在目录:

/opt/ruby/lib/ruby/gems/1.8/gems

?

2)存的时候,用gem名字和版本号来区分,所以相同的版本号,会被覆盖掉

lijg@lijg-pc /opt/ruby/lib/ruby/gems/1.8/gems $ ll | grep rack

drwxr-xr-x ?7 root root 4096 2012-04-17 12:00 rack-1.0.1/

drwxr-xr-x ?7 root root 4096 2011-05-05 15:28 rack-1.2.2/

drwxr-xr-x ?7 root root 4096 2012-04-16 18:35 rack-1.4.1/

drwxr-xr-x ?3 root root 4096 2011-05-05 15:31 rack-mount-0.6.14/

drwxr-xr-x ?4 root root 4096 2012-02-15 10:31 rack-protection-1.2.0/

drwxr-xr-x ?4 root root 4096 2011-05-05 15:31 rack-test-0.5.7/

?

3)版本依赖会在gem的specification中写上,这样rubygems会去处理

使用参考http://guides.rubygems.org/specification-reference/#add_development_dependency

使用语句:

spec.add_development_dependency 'example', '~> 1.1', '>= 1.1.4'

例如rack1.0.1中的语句:

?

?28 ? ? if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then

?29 ? ? ? s.add_development_dependency(%q<test-spec>, [">= 0"])

?30 ? ? ? s.add_development_dependency(%q<camping>, [">= 0"])

?31 ? ? ? s.add_development_dependency(%q<fcgi>, [">= 0"])

?32 ? ? ? s.add_development_dependency(%q<memcache-client>, [">= 0"])

?33 ? ? ? s.add_development_dependency(%q<mongrel>, [">= 0"])

?34 ? ? ? s.add_development_dependency(%q<ruby-openid>, ["~> 2.0.0"])

?35 ? ? ? s.add_development_dependency(%q<thin>, [">= 0"])

?36 ? ? else

?37 ? ? ? s.add_dependency(%q<test-spec>, [">= 0"])

?38 ? ? ? s.add_dependency(%q<camping>, [">= 0"])

?39 ? ? ? s.add_dependency(%q<fcgi>, [">= 0"])

?40 ? ? ? s.add_dependency(%q<memcache-client>, [">= 0"])

?41 ? ? ? s.add_dependency(%q<mongrel>, [">= 0"])

?42 ? ? ? s.add_dependency(%q<ruby-openid>, ["~> 2.0.0"])

?43 ? ? ? s.add_dependency(%q<thin>, [">= 0"])

?44 ? ? end

?

4)坏处和问题:不同的rubygems会有不同的处理方法(或者严格来说使用规范变了)

? ? 例如rubygems不同版本会去不同的路径下存gem和找gem。

? ? 这样导致用某个版本比如1.3.7升级到1.8.6后原来安装的gem不能用了等等。

? 解决方法:可以用bundle,重新执行就是了

?

好的文章参考:

#爱电的林总结的一篇,真全

http://eshilin.blog.163.com/blog/static/132880330201062642954212/

#淘宝的qa团队http://qa.taobao.com/ 在2009年的总结,总结的比较一般,不过淘宝的实力技术u还是不错

Ruby Gems(1-2-3-4)–简要介绍

http://qa.taobao.com/?p=709

http://8888.pumo.com.tw/gate/gb/qa.taobao.com/?p=719?

http://8888.pumo.com.tw/gate/gb/qa.taobao.com/?p=982

http://8888.pumo.com.tw/gate/gb/qa.taobao.com/?p=992

?

附录:

这个一定要看:深入理解ruby安装,require,load,gem,等等

http://www.skorks.com/?#这个人不错阿,技术人的性格,deep into ruby!

http://www.skorks.com/2009/08/digging-into-a-ruby-installation-require-vs-load/

?

?

http://rubylearning.com/satishtalim/including_other_files_in_ruby.html#一个require和load的解释

?

====完毕====

+

+

+

+

?

?

?

?

热点排行