Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/52.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何在rails gemfile中要求特定的gem版本?_Ruby On Rails_Ruby On Rails 4_Bundler_Gemfile - Fatal编程技术网

Ruby on rails 如何在rails gemfile中要求特定的gem版本?

Ruby on rails 如何在rails gemfile中要求特定的gem版本?,ruby-on-rails,ruby-on-rails-4,bundler,gemfile,Ruby On Rails,Ruby On Rails 4,Bundler,Gemfile,在rails 4中通过bundle install安装gem时,我遇到以下错误: Bundler could not find compatible versions for gem "tzinfo": In Gemfile: rails (= 4.2.0) ruby depends on actionmailer (= 4.2.0) ruby depends on actionpack (= 4.2.0) ruby depends on

在rails 4中通过
bundle install
安装gem时,我遇到以下错误:

Bundler could not find compatible versions for gem "tzinfo":

  In Gemfile:
    rails (= 4.2.0) ruby depends on
      actionmailer (= 4.2.0) ruby depends on
        actionpack (= 4.2.0) ruby depends on
          activesupport (= 4.2.0) ruby depends on
            tzinfo (~> 1.1) ruby

    eventbrite-client (>= 0) ruby depends on
      tzinfo (~> 0.3.22) ruby
我曾试图通过
bundle update
解决这个问题,但这解决了同一个问题

现在的问题是,如何使gem
eventbrite客户端依赖于
tzinfo
的0.3.22版本。我在尝试时无法理解语法:

gem 'eventbrite-client', :require => 'tzinfo','0.3.22'

这可能吗?

我认为你的想法不可能实现(如果你想同时拥有一个运行的
rails 4.2
)。正如bundler所说,rails 4.2需要
tzinfo v1.1
,因此旧版本的rails将无法接受。不允许在工作应用程序中使用同一个gem的两个不同版本,因为代码如何区分使用哪个版本

关于在一个应用程序中同时使用两个不同版本的gems,可能是一个有用的答案:


另一个答案是关于两个gem具有冲突的依赖关系和解决问题的可能性:但我猜这在您的情况下是不可能的。

如果您想让event-brite客户端以某种方式工作,那么您可以简单地在event-brite-gempec文件中修改tzinfo依赖关系的版本

首先克隆以下存储库

git clone git@github.com:ryanjarvinen/eventbrite-client.rb.git
然后将eventbrite-client.gempec文件的内容替换为以下内容

Gem::Specification.new do |s|
  s.name = %q{eventbrite-client}
  s.version = "0.1.3"

  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
  s.authors = ["Ryan Jarvinen"]
  s.date = %q{2011-08-28}
  s.description = %q{A tiny EventBrite API client. (http://developer.eventbrite.com)}
  s.email = %q{ryan.jarvinen@gmail.com}
  s.extra_rdoc_files = [
    "LICENSE",
    "README.md"
  ]
  s.files = [
    ".document",
    "LICENSE",
    "README.md",
    "Rakefile",
    "VERSION",
    "eventbrite-client.gemspec",
    "lib/eventbrite-client.rb",
  ]
  s.homepage = %q{http://github.com/ryanjarvinen/eventbrite-client.rb}
  s.require_paths = ["lib"]
  s.rubygems_version = %q{1.6.2}
  s.summary = %q{A tiny EventBrite API client}

  if s.respond_to? :specification_version then
    s.specification_version = 3

    if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
      s.add_development_dependency(%q<rspec>, ["~> 1.3.0"])
      s.add_runtime_dependency(%q<httparty>, ["~> 0.8.0"])
      s.add_runtime_dependency(%q<tzinfo>, ["~> 1.1"])
    else
      s.add_dependency(%q<rspec>, ["~> 1.3.0"])
      s.add_dependency(%q<httparty>, ["~> 0.8.0"])
      s.add_dependency(%q<tzinfo>, ["~> 1.1"])
    end
  else
    s.add_dependency(%q<rspec>, ["~> 1.3.0"])
    s.add_dependency(%q<httparty>, ["~> 0.8.0"])
    s.add_dependency(%q<tzinfo>, ["~> 1.1"])
  end
end
使用

gem install ./name_of_the_gem.gem

如果我理解正确,那么rails 4.2的依赖链部分依赖于
tzinfo
v1.1。因此,我认为不可能像v0.3.22那样使用它的旧版本(我不知道在一个应用程序中有两个相同的gem版本)。因此,我想在这种情况下,您必须选择对您更重要的版本-让rails 4.2工作或eventbrite客户端:)删除Gemfile.lock并通过在Gemfile中添加特定版本来再次运行bundle安装…尝试一下如果您只是覆盖依赖项gem版本,那么更新版本的gem可能永远不支持旧版本gem拥有的所有功能。因此它可能会刹车。此外,如果你对dependency gem的repo代码进行了更改,并且没有再次将其推高(假设更新的dependency gem版本确实没有阻止某项操作),那么从repo中拉取你的应用程序的其他人将不会获得相同的更改后的dependency gem版本,因此他们的应用程序仍然损坏。这样做了,并且似乎启动了。将检查功能是否正常工作。如果有,也将提交更改。ty@AndresEhrenpreis是的,您所说的是正确的,但是大多数情况下,在构建gem时,开发人员会添加可用的最新版本作为依赖项,如果gem可以简单地升级gem依赖项,您可以尝试使用上述方法。如果它工作,他可以叉它,并推动这些变化,并将Git路径添加到GEM文件中,这样其他拉他的应用程序的人就可以使用它。当你遇到这样的问题时,你可能会考虑PR,并注意到GEM的依赖性被定义为窄。
gem install ./name_of_the_gem.gem