我有一个宝石我正在本地开发,具有以下结构:
foo ext foo extconf.rb foo.cpp foo.h etc.cpp etc.h lib foo.gemspec
--- foo.gemspec -
Gem::Specification.new do |s| s.name = "foo" s.version = "0.0.2" s.author = "Aemon Cannon" s.files = Dir["ext/foo/*.{h,cpp}"] + Dir["lib/**/*"] + Dir['ext/**/extconf.rb'] s.platform = Gem::Platform::RUBY s.require_paths = [ 'lib', 'ext' ] s.extensions = Dir['ext/**/extconf.rb'] end
--- ext / foo / extconf.rb ----
require 'mkmf' $CPPFLAGS += "-std=c++11 -Wno-unused-value " abort "missing libz" unless have_library("z") abort "missing c++ standard library" unless have_library("stdc++") create_makefile "foo"
我使用gem build foo构建一个gem,它似乎构建成功,然后将gem添加到我的rails app下的vendor / gems。我在我的Gemfile中提到它:
gem 'foo', '0.0.2', :path => 'vendor/gems'
当我'捆绑安装'时,它说:
Using foo (0.0.2) from source at vendor/gems
但它似乎没有构建扩展,现在gem已经从供应商/宝石中删除,并且没有出现在供应商/缓存中。
'gem install foo-0.0.1.gem'正确安装gem,成功构建原生扩展。
Rails版本3.2.x. Bundler 1.5.x
有什么想法吗?
由于
答案 0 :(得分:1)
Bundler docs for using :path
说:
与:git 不同,bundler不会为指定为路径的gem编译C扩展。
我的理解是:path
主要用于与您正在积极开发的宝石一起使用,而Bundler期望在该位置“准备好”代码。如果要使用:path
,则应首先手动编译扩展(可能使用rake-compiler)。