我正在分配宝石,我想为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根本就没有安装。由于此扩展不存在。有人可以指出我做错了什么。谢谢!
答案 0 :(得分:0)
这可能不是你问题的确切答案,但我想知道你是否看到Gemfile
是一个普通的ruby文件。也就是说,您可能只是将逻辑放在Gemfile
:
if RUBY_VERSION < "2.1.0"
gem "activerecord", ">2.0", "< 4.0"
else
gem "activerecord", ">4.0"
end
gem ...
希望它能解决你的问题。