gemspec中的条件ruby-gem依赖关系



我正在构建一个rails引擎,它在迁移中使用外键。

    add_foreign_key "theblog_content_nodes",
                    "theblog_content_statuses", column: :content_status_id

从版本4.2 rails本身支持外键,但在我们使用foreigner gem之前。如果我们尝试将foreignerrails 4.2及更新版本一起使用,则会出现错误。

因此,由于我将从4.0.1开始支持rails,我必须在gemspec中使用条件依赖关系。

我在这里找到了可能的解决方案,但我不知道如何在gemspec中检查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版本,我们可以使用以下内容(基于此答案):

require 'rubygems'
rails_gem = Gem::Specification.select {|z| z.name == "rails"}.max_by {|a| a.version}
p rails_gem.version.version
#=> "4.2.5"

最新更新