gemspec扩展 - 有条件地安装gem

时间:2015-01-10 10:40:14

标签: ruby

我正在分配宝石,我想为gemspec文件添加一些条件依赖项,具体取决于ruby版本。我发现它可以使用spec.extensions完成。所以在gem目录中我创建了一个文件:ext / mkrf_conf.rb:

require 'rubygems/dependency_installer.rb' 
begin
   Gem::Command.build_args = ARGV
   rescue NoMethodError
end 
inst = Gem::DependencyInstaller.new


begin
    if RUBY_VERSION < "2.1.0"
        inst.install "activerecord", ">2.0", "< 4.0"
    else
        inst.install "activerecord", ">4.0"
    end
rescue
    exit(1)
end 

f = File.open(File.join(File.dirname(__FILE__), "Rakefile"), "w")   # create dummy rakefile to indicate success
f.write("task :default\n")
f.close

然后我将扩展名添加到gemspec文件中:

spec.extensions << 'ext/mkrf_conf.rb'

我创建了一个测试项目,当我拥有Gemfile:

gem 'my_gem', path: '/Users/xxx/Documents/my_projects/my_gem'

我想测试这是否有效,但是当我进行捆绑安装时,activerecord根本就没有安装。由于此扩展不存在。有人可以指出我做错了什么。谢谢!

1 个答案:

答案 0 :(得分:0)

这可能不是你问题的确切答案,但我想知道你是否看到Gemfile是一个普通的ruby文件。也就是说,您可能只是将逻辑放在Gemfile

if RUBY_VERSION < "2.1.0"
    gem "activerecord", ">2.0", "< 4.0"
else
    gem "activerecord", ">4.0"
end
gem ...

希望它能解决你的问题。