我正在开发旧版 Rails 应用程序。并且需要安装一些新的 gem。我们设置为使用捆绑工具。但是我被警告说我们不能进行简单的捆绑安装,因为对现有 gem 的任何更新都会使系统进入无效状态。
那么如何使用 bundle 添加一些新的宝石而不触及任何现有的宝石呢?
我正在开发旧版 Rails 应用程序。并且需要安装一些新的 gem。我们设置为使用捆绑工具。但是我被警告说我们不能进行简单的捆绑安装,因为对现有 gem 的任何更新都会使系统进入无效状态。
那么如何使用 bundle 添加一些新的宝石而不触及任何现有的宝石呢?
如果你这样做bundle install
了,Bundler 只关心你在Gemfile
. 它还将删除Gemfile.lock
您从Gemfile
.
如果你这样做bundle update
,那么你最终会遇到你在问题中描述的问题。它将更新现有的 gem,尤其是在没有为每个 gem 指定特定版本的情况下。
这是更深入的解释:http: //viget.com/extend/bundler-best-practices。您可能想阅读“安装与更新”部分。
更新
为确保您完全控制 gem 的版本,我建议您在Gemfile
. 您可以通过指示特定修订来对 Git 引用执行相同的操作。
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
可以避免弄乱任何东西,并且您可以完全控制版本。