gpt4 book ai didi

ruby - 当 bundler 包含来自源代码的 gem 时,如何使用 native 扩展测试 gem?

转载 作者:数据小太阳 更新时间:2023-10-29 08:00:28 25 4
gpt4 key购买 nike

我希望我说得有点密集,但是当 bundler 似乎不构建它们时,我无法弄清楚应该如何使用 bundler 开发和测试具有 native 扩展的 gem。

我有一个 gem,swig_try1,它只是我在如何构建 native 扩展方面的练习。我可以构建 gem 并安装它,我看到预期的 Building native extensions 消息,构建成功,当我转到另一个目录时,我可以要求 gem 并使用 native 扩展中定义的方法.

我的问题在于,当我运行 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

即,在 ext/swig_try1 中没有生成 Makefile,也没有生成 swig_try1.bundle(在我的 rvm gems 目录中,我请参阅这些文件)。

我可以继续我的工作,只使用其他目录中的 gem...但是测试呢?我习惯于使用我的 gem 目录中的 rspec,但它总是尝试从那里加载 . 的版本,它没有构建 native 扩展。

issue on github建议 bundler 可能无法处理这个?这怎么可能?

请帮我看看我错过了什么。

最佳答案

通常这是作为 rake 任务完成的,例如rake compile,您确保它在测试之前运行。

我在此处放置了一个骨架 gem 来执行此操作,以及 native 扩展 gem 中预期的其他标准内容:https://github.com/neilslater/ruby_nex_c

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 来说非常方便。

许多其他结构也是可能的 - 我通过阅读 github 上的各种 gem 收集了这个结构,直到我发现一些我认为非常适合使用 bundle gem 创建的 gem 的东西。

关于ruby - 当 bundler 包含来自源代码的 gem 时,如何使用 native 扩展测试 gem?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16926994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com