如何在 rails gem 文件中要求特定的 gem 版本?
How to require a specific gem version in rails 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
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-client
依赖于tzinfo
的0.3.22 版本。我尝试时无法弄清楚语法:
gem 'eventbrite-client', :require => 'tzinfo','0.3.22'
这可能吗?
我不认为你的想法是可行的(如果你想同时有一个工作 rails 4.2
)。正如 bundler 所说- rails 4.2 需要 tzinfo v1.1
因此旧版本的 rails 是不可接受的。不允许在工作应用程序中使用相同 gem 的 2 个不同版本,因为代码将如何影响使用哪个版本?
关于在一个应用程序中同时拥有两个不同版本的 gem 可能是一个有用的答案:Can you have multiple versions of a gem in a Gemfile?
关于 2 gem 的另一个答案具有相互冲突的依赖关系和解决问题的可能性:How to override gem dependency? 但我想这在你的情况下是不可能的。
如果你想让 event-brite 客户端以某种方式工作,那么你可以简单地在 eventbrite gemspec 文件中修改 tzinfo 依赖项的版本。
首先克隆以下存储库
git clone git@github.com:ryanjarvinen/eventbrite-client.rb.git
然后将eventbrite-client.gemspec文件的内容替换成下面的内容。
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
gem build eventbrite-client.gemspec
使用
安装
gem install ./name_of_the_gem.gem
在 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-client
依赖于tzinfo
的0.3.22 版本。我尝试时无法弄清楚语法:
gem 'eventbrite-client', :require => 'tzinfo','0.3.22'
这可能吗?
我不认为你的想法是可行的(如果你想同时有一个工作 rails 4.2
)。正如 bundler 所说- rails 4.2 需要 tzinfo v1.1
因此旧版本的 rails 是不可接受的。不允许在工作应用程序中使用相同 gem 的 2 个不同版本,因为代码将如何影响使用哪个版本?
关于在一个应用程序中同时拥有两个不同版本的 gem 可能是一个有用的答案:Can you have multiple versions of a gem in a Gemfile?
关于 2 gem 的另一个答案具有相互冲突的依赖关系和解决问题的可能性:How to override gem dependency? 但我想这在你的情况下是不可能的。
如果你想让 event-brite 客户端以某种方式工作,那么你可以简单地在 eventbrite gemspec 文件中修改 tzinfo 依赖项的版本。
首先克隆以下存储库
git clone git@github.com:ryanjarvinen/eventbrite-client.rb.git
然后将eventbrite-client.gemspec文件的内容替换成下面的内容。
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
然后你可以用
重建 gemgem build eventbrite-client.gemspec
使用
安装gem install ./name_of_the_gem.gem