gem 规范中的条件 ruby gem 依赖项
Conditional ruby gem dependencies within a gemspec
我正在构建一个在迁移中使用外键的 rails 引擎。
add_foreign_key "theblog_content_nodes",
"theblog_content_statuses", column: :content_status_id
从版本 4.2
rails 开始支持外键本身,但在我们为此使用 foreigner
gem 之前。如果我们尝试将 foreigner
与 rails 4.2
和更新版本一起使用,我们会得到一个错误。
因此,由于我要从 4.0.1 开始支持 rails,因此我必须在我的 gem 规范中使用条件依赖。
我找到了可能的解决方案 here 但我不知道如何检查 gem 规范中的 rails 版本。
# sidekiq-spy.gemspec
if RUBY_VERSION >= '2.1'
spec.add_development_dependency "curses", "~> 1.0"
end
注意:
我有另一个临时解决方案:我只是检查 Foreigner
迁移中的可用性。如果它不可用,我只是不创建外键:
if defined?(Foreigner)
add_foreign_key "theblog_content_nodes",
"theblog_content_statuses", column: :content_status_id
end
但我想为旧 rails 版本添加 foreigner
依赖项。
要访问 rails 版本,我们可以使用如下内容(基于 this answer):
require 'rubygems'
rails_gem = Gem::Specification.select {|z| z.name == "rails"}.max_by {|a| a.version}
p rails_gem.version.version
#=> "4.2.5"
我正在构建一个在迁移中使用外键的 rails 引擎。
add_foreign_key "theblog_content_nodes",
"theblog_content_statuses", column: :content_status_id
从版本 4.2
rails 开始支持外键本身,但在我们为此使用 foreigner
gem 之前。如果我们尝试将 foreigner
与 rails 4.2
和更新版本一起使用,我们会得到一个错误。
因此,由于我要从 4.0.1 开始支持 rails,因此我必须在我的 gem 规范中使用条件依赖。
我找到了可能的解决方案 here 但我不知道如何检查 gem 规范中的 rails 版本。
# sidekiq-spy.gemspec
if RUBY_VERSION >= '2.1'
spec.add_development_dependency "curses", "~> 1.0"
end
注意:
我有另一个临时解决方案:我只是检查 Foreigner
迁移中的可用性。如果它不可用,我只是不创建外键:
if defined?(Foreigner)
add_foreign_key "theblog_content_nodes",
"theblog_content_statuses", column: :content_status_id
end
但我想为旧 rails 版本添加 foreigner
依赖项。
要访问 rails 版本,我们可以使用如下内容(基于 this answer):
require 'rubygems'
rails_gem = Gem::Specification.select {|z| z.name == "rails"}.max_by {|a| a.version}
p rails_gem.version.version
#=> "4.2.5"