我在C中编写了一些我希望从Ruby运行的专有业务逻辑。我试图把它写成一个gem,它只是Bundler从主项目内部的路径中包含的;但是,Bundler“在这种情况下不构建原生扩展”(#bundler irc频道中的tmoore)。
我宁愿不为此C扩展gem创建单独的私有存储库。我也不想为所有环境预编译本机版本。 RubyInline似乎不是一个选项,因为C不仅仅是几个函数,大量使用指向函数之间传递的结构的指针等。
是否有任何选项可以将C构建到项目中,以便通过标准捆绑安装在目标计算机上编译C?
答案 0 :(得分:1)
感谢#bundler irc频道中的tmoore指向以下内容:
来自前者:
与git不同,bundler不会为指定的gem编译C扩展 作为路径。
从后者:
我想我会选择"如果需要,请使用git gems 编译扩展"。 :path,作为选项,是一种添加目录的方法 您手动管理到加载路径。如果你需要 在这些目录中构建的扩展,你应该自己做 作为手动管理该目录的一部分。 :)
这就是官方用语。如果您希望Bundler编译专有扩展,请从私有Git存储库加载扩展gem。 (这很有帮助:https://gist.github.com/masonforest/4048732。)为了避免过于宽泛的权限,您可以:
将oauthtoken合并到你的gemfile中的git url中:
gem' your_gem_name',git: ' https://your_oauth_token:x-oauth-basic@github.com/account/project.git'