3

少し密度が濃いことを願っていますが、バンドラーがビルドしないように見える場合に、バンドラーを使用してネイティブ拡張を使用して gem を開発およびテストする方法がわかりません。

私は宝石を持っています。swig_try1これは、ネイティブ拡張機能を構築する方法の私の演習です。gem をビルドしてインストールすると、予想どおりのBuilding native extensionsメッセージが表示され、ビルドが成功し、別のディレクトリに移動すると、gem を要求して、ネイティブ拡張で定義されたメソッドを使用できます。

私の問題は、実行するbundle installと次の行が表示されるという事実にあります。

Using swig_try1 (0.0.1) from source at .

しかし、Building native extensionsメッセージは表示されず、ディレクトリ構造にも表示されません。

.
├── Gemfile
├── Gemfile.lock
├── LICENSE.txt
├── README.md
├── Rakefile
├── ext
│   └── swig_try1
│       ├── extconf.rb
│       └── swig.c
├── lib
│   ├── swig_try1
│   │   └── version.rb
│   └── swig_try1.rb
├── pkg
│   └── swig_try1-0.0.1.gem
└── swig_try1.gemspec

つまり、no と noMakefileが生成されましたext/swig_try1(swig_try1.bundle私の rvm gems ディレクトリには、これらのファイルが表示されます)。

私は自分のビジネスに取り掛かり、他のディレクトリからの自分の宝石のみを使用することができました...しかし、テストはどうですか? 私は自分の gem ディレクトリから rspec を使用することに慣れていますが、そこからは常に.、ネイティブ拡張機能が組み込まれていないバージョンをロードしようとします。

github のこの問題は、バンドラーがこれを処理できない可能性があることを示唆していますか? どうすればそれが可能になりますか?

私が欠けているものを見るのを手伝ってください。

4

1 に答える 1

3

通常、これはrakeタスクとして行われます。たとえばrake compile、テストの前に確実に実行されます。

ネイティブ拡張 gem で期待される他の標準的なものの中で、これを行うスケルトンgemをまとめました。

の主要な行は次のRakefileとおりです。

require 'rake/extensiontask'

gemspec = Gem::Specification.load('foo.gemspec')
Rake::ExtensionTask.new do |ext|
  ext.name = 'foo'
  ext.ext_dir = 'ext/foo'
  ext.lib_dir = 'lib/foo'
  ext.gem_spec = gemspec
end

task :default => [:compile, :test]

次に、単純なコマンドでコンパイル/テストを組み合わせて実行できますrake。これは、Travis CI にとって非常に便利です。

他にも多くの構造が考えられます - で作成された gem にぴったりだと感じるものを見つけるまで、github でさまざまな gem を読んでこれを収集しましたbundle gem

于 2013-06-04T21:26:40.613 に答える