【发布时间】:2012-11-02 01:25:18
【问题描述】:
我制作了一个新的 rails 3.2.8 应用并添加了:
gem "rmre", "~> 0.0.4"
到这个新的 gemfile:
source 'https://rubygems.org'
gem 'rails', '3.2.8'
# Bundle edge Rails instead:
# gem 'rails', :git => 'git://github.com/rails/rails.git'
gem 'mysql2'
# Gems used only for assets and not required
# in production environments by default.
group :assets do
gem 'sass-rails', '~> 3.2.3'
gem 'coffee-rails', '~> 3.2.1'
# See https://github.com/sstephenson/execjs#readme for more supported runtimes
# gem 'therubyracer', :platforms => :ruby
gem 'uglifier', '>= 1.0.3'
end
gem 'jquery-rails'
gem "rmre", "~> 0.0.4"
# To use ActiveModel has_secure_password
# gem 'bcrypt-ruby', '~> 3.0.0'
# To use Jbuilder templates for JSON
# gem 'jbuilder'
# Use unicorn as the app server
# gem 'unicorn'
# Deploy with Capistrano
# gem 'capistrano'
# To use debugger
# gem 'debugger'
运行捆绑安装产生:
Bundler could not find compatible versions for gem "erubis":
In Gemfile:
rmre (~> 0.0.4) ruby depends on
erubis (~> 2.6.6) ruby
rails (= 3.2.8) ruby depends on
erubis (2.7.0)
我尝试注释掉版本号,甚至删除与资产管理相关的 gem。不过,我似乎无法得出在这里工作的 gem 版本的组合。这是我第一次遇到这种情况,我不确定我还能做些什么来尝试使用至少 3 点左右的 rails 版本的 rmre gem。
这里有没有一种聪明的方法来寻找可行的依赖解决方案?如果没有满足推荐依赖的gem版本配置,有没有最差的方法去追求?
非常感谢!
【问题讨论】:
-
您可以尝试联系
rmregem 的作者,看看他们是否愿意放宽依赖限制,以免它与如此狭窄的erubis版本绑定。如果 gem 作者希望他们的 gem 继续使用最新版本的 rails,前向兼容性是他们需要维护的一部分。 -
谢谢。完毕。在这里发帖:github.com/bosko/rmre/issues/10
-
有没有办法让 bundler '不管怎样都用它' 或者这是错误的想法?
-
我对 gem 开发不是很擅长,但我不认为它是这样工作的。我认为这是双重的原因:(1) gem 声明的模块和类在 gem 的各个版本之间可能具有相同的名称。尝试加载同一个 gem 的多个版本(每个版本满足
rmre和railsgem 的依赖需求)会产生命名冲突。 (2) 你需要一种方法来告诉 bundler 要加载哪个版本的 gem,然后覆盖另一个 gem 的依赖声明。 -
您可以通过更改安装在您机器上的 gem 来完成 #2,但这会带来多个问题。其中包括必须在开发、暂存和生产服务器中进行相同的更改,并且不知道这样做是否会解决问题或在其他地方创建一个微妙的错误。一方面,您必须相信 gem 作者正确地选择了他们的依赖版本,另一方面,您必须打开案例以在依赖关系次优时获得持续的支持。我真的认为最好的办法是尝试更新 gem。
标签: ruby-on-rails rubygems bundler dependency-management