我需要在我的Rails 3.2应用程序中要求这两个宝石:
gem 'google-adwords-api'
gem 'netsuite'
然而,它们与savon gem的版本冲突。 Bundler吐出这个:
Bundler could not find compatible versions for gem "savon":
In Gemfile:
google-adwords-api (>= 0) ruby depends on
google-ads-common (~> 0.2.0) ruby depends on
savon (~> 0.9.1) ruby
netsuite (= 0.2.6) ruby depends on
savon (2.3.3)
我的项目中绝对需要两个宝石,所以这是我到目前为止所尝试的。我已将google-adwords-api gem移动到一个名为“adx_interface”的自定义Rails引擎中,并将其安装在我的Rails应用程序中。这个引擎有它自己的Gemfile。如果我将此行放在我的Rails应用程序的Gemfile中,那么Bundler错误仍然存在:
gem "adx_interface", "0.0.1", :path => "#{File.expand_path(__FILE__)}/../vendor/adx_interface"
是否有某种方法可以命名此引擎,以便它的依赖项不会与应用程序依赖项发生冲突?我已经尝试从应用程序Gemfile中排除gem "adx_interface"
行,但这意味着我必须手动开始需要gems而不是依赖Bundler。这是可行的解决方案吗?如果是这样,我如何以这样的方式包含google-adwords-api,使其正确命名并且它的savon不会与netsuite的savon冲突?
为了它的价值,我亲自联系了google-adwords-api gem的作者。他说他喜欢savon 0.9.1 gem并且没有计划更新到更新的版本。
答案 0 :(得分:3)
你要做的是完全违背Bundler背后的想法。 Bundler的存在是为了帮助您管理依赖关系并发现冲突。
没有干净的方法来绕过这个限制。我能想到的唯一解决方案是分叉google-adwords-api
gem,破坏依赖关系并让你的Gemfile指向你的自定义fork。