为什么不能捆绑安装我的本地 gem 和扩展?

Aem*_*non 6 ruby rubygems native ruby-on-rails bundler

我有一个正在本地开发的 gem,其结构如下:

富
  分机
   富
    扩展配置文件
    foo.cpp
    foo.h
    等.cpp
    等.h
  库
 foo.gemspec

--- foo.gemspec --

Gem::Specification.new |s|
  s.name =“foo”
  s.版本 = "0.0.2"
  s.author =“伊蒙大炮”
  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']
结尾

--- ext/foo/extconf.rb ----

需要“mkmf”
$CPPFLAGS +=“-std=c++11 -Wno-unused-value”
中止“缺少 libz”,除非 has_library("z")
中止“缺少 c++ 标准库”,除非 has_library("stdc++")
创建makefile“foo”

我使用 gem build foo 构建一个 gem,似乎构建成功,然后将该 gem 添加到我的 Rails 应用程序的供应商/gems 下。我在 Gemfile 中这样提到:

gem 'foo', '0.0.2', :path => '供应商/gems'

当我“捆绑安装”时,它说:

使用来自供应商/gems 的源代码的 foo (0.0.2)

但它似乎没有构建扩展,现在 gem 已从供应商/宝石中删除,并且不会出现在供应商/缓存中。

'gem install foo-0.0.1.gem' 正确安装 gem,成功构建本机扩展。

Rails 版本 3.2.x Bundler 1.5.x

有任何想法吗?

谢谢

mat*_*att 6

使用 Bundler 文档:path说:

\n\n
\n

与:git不同,bundler 不会为指定为路径的 gem 编译 C 扩展。

\n
\n\n

我的理解是,这:path主要是为了与您正在积极开发的 gem 一起使用,并且 Bundler 期望 \xe2\x80\x9cready 在该位置转到 \xe2\x80\x9d 代码。如果您想使用:path,您应该首先手动编译扩展(也许使用rake-compiler)。

\n