Rails_Gemfile_Bundle_是否需要指定gem的版本_多机器运行环境一致问题_Gems版本保持一致

 Rails_Gemfile_Bundle_是否需要制定gem的版本_多机器运行环境一致问题_Gems版本保持一致

 

Rails目录下有两个文件,Gemfile和Gemfile.lock

Gemfile中,很多gem都指定了版本,但也有些麽有指定版本。

所以问题出来了:

为什么有些指定,有些不指定。

那些没有指定版本的gem包,安装后,到底装的什么版本?

部署多台服务器,这些gems包能保持版本一致么?

 

 

先了解下rubygems的版本规范,可以看这里,或者查找下pessimistic version constraint 或者 semantic_versioning。

这样就知道,Gemfile里面指定了=version的,肯定会用指定的版本。

而使用:gem 'mysql2', '~> 0.3.10'  或者  'rspec-rails', '>= 2.12.2' 版本的,将可能导致版本升级。

bundle在控制版本的时候,有一套复杂机制,毕竟版本冲突总是可能出现的,maven等工具也是有的。

一旦运行完毕,版本基本就确定了,会存入Gemfile.lock

之后除非自己手动修改版本,否则不会更新版本了。

但是一旦运行 bundle update,就会重新计算并对比gem仓库的最新版本。也就是说,若不手动修改版本,并且不手动运行update操作,这些版本就会固定下来。

 

如果不想有任何改变,也担心不小心运行了update操作,可以用bundle lock锁定,除非unlock,否则无忧了。

 

部署多台服务器,这些gems包能保持版本一致么?

这个看下一篇吧。 

 

特例:从github上拿来的gem库

Bundler adds the ability to use gems directly from git repositories. Setting them up is as easy as adding a gem to your Gemfile. 

使用的一个好方式是自己fork一个,便于管理等:Using the very latest version of a gem (or even a fork) is just as easy as using an official release.

但是Bundle并不能很好的管理这种gem:Because Rubygems lacks the ability to handle gems from git, any gems installed from a git repository will not show up in gem list

最要命的是,每次都会检查线上的更新,老提示你install。

 

什么好办法,除了自己fork

Local Git Repos

 

这种时候,可以指定版本,别让他自动升级。

Specify that a git repository should use a particular ref, branch, or tag
:git => 'git://github.com/rails/rails.git', :ref => '4aded' 
:git => 'git://github.com/rails/rails.git', :branch => '2-3-stable' 
:git => 'git://github.com/rails/rails.git', :tag => 'v2.3.5'

 

小结:

bundle还是相当友好的。正确理解基础上,基本不会出问题了。 

 

prefer:

http://stackoverflow.com/questions/9265213/should-i-specify-exact-versions-in-my-gemfile

http://stackoverflow.com/questions/4292905/what-is-the-difference-between-and-when-specifying-rubygem-in-gemfile

http://stackoverflow.com/questions/9265213/should-i-specify-exact-versions-in-my-gemfile

http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and-gemfile/

http://bundler.io/v1.3/git.html

 

 

 

+

+

+

=

+

=

+

 

 

你可能感兴趣的:(Bundle)