找出Gemfile中哪些gems需要本机c扩展?

时间:2014-06-19 17:32:02

标签: ruby gem jruby bundler torquebox

我最近才开始将注意力转移到TorqueBox上面部署Ruby应用程序,这当然是在Jruby上面构建的。到目前为止,我基本上已经执行了bundle install,然后在前往jrubydom的途中处理每个宝石,但我已经打了几个宝石,由于需要重新实现大部分他们。

有没有办法调用bundler或rubygems来运行所有gems及其deps来测试它们是否需要本机c扩展然后返回这样的列表?一定要很好地处理一些较小的项目,甚至知道在将项目转移到jruby方面是否值得解决一个项目。

2 个答案:

答案 0 :(得分:8)

基于具有原生扩展名的宝石通常具有/ ext目录的事实,我做了一个简单的oneliner来找到这些宝石:

puts `bundle show --paths`.split("\n").select{|dep| File.directory?("#{dep}/ext") }.map{|dep| dep.split('/').last }.join(', ')

您可以使用以下命令在命令行执行此操作:

$ bundle show --paths | ruby -e "STDIN.each_line {|dep| puts dep.split('/').last if File.directory?(File.join(dep.chomp, 'ext')) }"

答案 1 :(得分:5)

您可以使用JRuby Lint。它将检查一些需要C扩展甚至列表替代的宝石(基于this list)。