一个Rails应用程序中有两个单独的命名空间Js文件?

时间:2014-10-30 20:11:33

标签: ruby-on-rails ruby bundler

我需要在我的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并且没有计划更新到更新的版本。

1 个答案:

答案 0 :(得分:3)

你要做的是完全违背Bundler背后的想法。 Bundler的存在是为了帮助您管理依赖关系并发现冲突。

没有干净的方法来绕过这个限制。我能想到的唯一解决方案是分叉google-adwords-api gem,破坏依赖关系并让你的Gemfile指向你的自定义fork。