rtd*_*tdp 10 rubygems ruby-on-rails bundler
我想知道我应该为我添加到Gemfile的每个gem指定gem版本.早些时候我的项目很少,我没有为所有宝石指定任何版本,捆绑商负责处理它,这也很好.
但最近我开始研究过去6个月正在开发的项目.在该项目中,许多gem版本仅在Gemfile中指定,并且Gemfile.lock被忽略.最终解决版本冲突和升级少数宝石引起了很大的麻烦.
还要知道从应用程序版本控制中删除Gemfile.lock是不好的做法 - yehuda的好文章 - http://yehudakatz.com/2010/12/16/clarifying-the-roles-of-the-gemspec-and -gemfile /
所以,我的问题是我应该为我在Gemfile中指定的每个gem指定版本,还是只指定name和bundler将处理版本?处理这个问题的最佳做法是什么?
更新 -
更新此问题以正确指定问题,因为Gemfile可以解决许多问题:)
问题1 - 每个开发人员都应该拥有相同版本的宝石.实际上将Gemfile.lock添加到版本控制中解决了这个问题.开发人员只需要注意他们运行'bundle install'/'bundle'而不是'bundle update',因为这也会更新版本.
问题2 - 一些宝石版本,如果改变,刹车应用程序代码.实际上,对于omniauth,存在这种类型的问题,因为API从一个版本更改为另一个版本.是的,为了保持应用程序的正常运行,需要为这个宝石指定版本.
我的问题. - 所以,在我的gemfile中,由于严格指定了A和B的版本,并且因为它们都依赖于不同版本的Z,这是依赖性,我甚至无法运行bundle install或bundle update.唯一的解决方案是删除版本并让bundler接听电话.这就是我有问题的原因 - Gemfile.version_specification_mandatory?#=> true/false
我认为最好不要在Gemfile中指定gem版本.在极少数情况下,可能需要指定版本 - 例如,当较新的版本破坏您的应用程序时.但是为所有宝石指定版本通常是矫枉过正.Gemfile.lock文件(您不进行编辑,但检查版本控制)将使您的应用程序中使用较新版本的gem,直到您明确升级到它们.
如果您将 gem 用于仅在特定版本中可用的内容,则需要指定版本。
Bundler 安装最新版本,如果未指定版本,则使用系统上的可用版本。这对开发人员有用,因为最新版本具有她需要的功能。但是,如果该功能在同一 gem 的未来版本中丢失,并且 Gemfile 中未指定该版本,则所有后续为不同的人或不同的机器安装该 gem 都会产生不良效果。
我曾经遇到过这些问题,特别是在 will paginate 3 的候选版本中。
| 归档时间: |
|
| 查看次数: |
1926 次 |
| 最近记录: |