除非我使用完整路径,否则无法在Ruby C Extension中使用Gems

时间:2017-07-22 16:42:32

标签: c ruby api rubygems

每当我尝试使用Ruby的C API(使用rb_require)时,我会得到一个“无法加载此类文件 - ”错误,除非我使用完整路径。要求宝石在常规ruby脚本中正常工作。这些东西我需要做什么吗?这些宝石是使用Bundler安装的。

1 个答案:

答案 0 :(得分:0)

当您从扩展程序中调用rb_require时,您正在调用核心“内置”进程,以便在Ruby中要求文件。这会绕过Rubygems替换Kernel#require方法时添加的Gem处理代码。

为了获得正确的gem处理,你需要调用普通的require方法,并让通常的方法调度将调用路由到Rubygems代码。你可以用:

来做到这一点
rb_funcall(rb_cObject, rb_intern("require"), 1, rb_str_new_cstr("the_gem"));

您可以拨打rb_intern一次并存储结果,以避免在需要时多次调用。