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

我最近刚开始将注意力转移到在TorqueBox部署Ruby应用程序,当然这些应用程序是在Jruby上面构建的。 到目前为止,我基本上已经执行了一个bundle install ,然后在前往jrubydom的途中处理每个gem,但是由于需要重新实现其中的大部分,我已经花了几个gem花了我相当长的时间来解决。

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

你可以使用JRuby Lint 。 它将检查一些需要C扩展甚至列表替代的gem(基于此列表 )。

基于具有本机扩展的gem通常具有/ ext目录的事实,我做了一个简单的oneliner来找到这些gems:

 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')) }"