Ruby:如何在不更新现有宝石的情况下捆绑安装一些新宝石

时间:2013-02-23 17:31:49

标签: ruby-on-rails-3 bundler

我正在开发一个传统的Rails应用程序。并需要安装一些新的宝石。我们设置使用捆绑工具。但是我被警告说我们不能进行简单的捆绑安装,因为对现有gem的任何更新都会使系统进入无效状态。

那么如何使用bundle添加一些新的gem而不触及任何现有的gems呢?

1 个答案:

答案 0 :(得分:4)

如果您执行bundle install,Bundler只会关注您在Gemfile中明确指定的新宝石或新版本。它还会移除您从Gemfile.lock删除的Gemfile中的所有宝石。

如果您执行bundle update,那么您最终会遇到问题中描述的问题。它会更新现有的宝石,特别是如果没有为每个宝石指定特定的版本。

以下是更深入的解释:http://viget.com/extend/bundler-best-practices。有一个“INSTALL VS. UPDATE”部分,您可能想要阅读。

<强>更新

为了确保您完全掌控宝石版本,我建议您在Gemfile中引用特定版本。您可以通过指定特定修订版对Git引用执行相同的操作。

基于this post,我最近必须做的事情才能让sunspot_cell在我的环境中工作:

# The ability to do full document indexing has some "special needs" right now
gem "sunspot", git: "git://github.com/sunspot/sunspot.git", ref: "f5a6b54e8c12a500acf37cfa3b4091bc57b75db0"
gem "sunspot_solr", git: "git://github.com/sunspot/sunspot.git", ref: "f5a6b54e8c12a500acf37cfa3b4091bc57b75db0"
gem "sunspot_rails", git: "git://github.com/sunspot/sunspot.git", ref: "f5a6b54e8c12a500acf37cfa3b4091bc57b75db0", require: "sunspot_rails"
gem "sunspot_cell", git: 'git://github.com/zheileman/sunspot_cell.git', ref: "0c0b7f980b8c46bd272fe0a5a31d2c259bebe36e"
gem "sunspot_cell_jars", "0.4"
gem "progress_bar", "0.4.0"

正如您所看到的,我希望sunspot gem使用github.com/sunspot/sunspot,并使用特定的f5a6b54e8c12a500acf37cfa3b4091bc57b75db0版本。

对于sunspot_cell_jars,我想使用0.4的版本sunspot_cell_jars

这使bundle install不会弄乱任何内容,并且您可以完全控制版本。