5

Ruby Gemが実際にネイティブC拡張機能であるかどうかを確認するにはどうすればよいですか?

実行gem install some_gemすると、ネイティブ拡張機能を構築しようとするタイミングを確認できますが、インストールする前に、どのgemがネイティブC拡張機能であるかを判断する方法はありますか?

4

1 に答える 1

1

gemの仕様をチェックして、extensionsが定義されているかどうかを確認できます。これを行うには、gemをダウンロードするか、そのソースを確認する必要がありますが、少しのunix-fuを使用してプログラムで実行することは難しくありません。

curl -L <gem-url> | tar xOf - metadata.gz | gunzip | ruby -r yaml -e 'p YAML.load($stdin.read).extensions.any?'

bsonbson_extを比較してみましょう(これらは、私が考えることができる同じgemの最初の非C拡張バージョンとC拡張バージョンであるため):

% curl -L https://rubygems.org/downloads/bson-1.8.0.gem | tar xOf - metadata.gz | gunzip | ruby -r yaml -e 'p YAML.load($stdin.read).extensions.any?'
false

% curl -L https://rubygems.org/downloads/bson_ext-1.8.0.gem | tar xOf - metadata.gz | gunzip | ruby -r yaml -e 'p YAML.load($stdin.read).extensions.any?'
true

RubyGems APIを使用すると、gemの現在のバージョンを知る必要性を自動化できます。

curl https://rubygems.org/api/v1/gems/bson.yaml | ruby -r yaml -e 'p YAML.load($stdin.read)["version"]'
于 2012-12-10T01:15:41.683 に答える