Ruby的专有C扩展

Ruby的专有C扩展,c,ruby,bundler,C,Ruby,Bundler,我已经用C编写了一些专有的业务逻辑,我想从Ruby运行这些逻辑。我试图把它写成一个gem,Bundler只是把它从主项目的内部路径包含进来;但是,Bundler“在这种情况下不会构建本机扩展”(t在#Bundler irc通道中) 我不希望为这个C扩展gem创建单独的私有存储库。我也不希望为所有环境预编译本机版本。RubyLine似乎不是一个选项,因为C不仅仅是一对函数,它大量使用指向函数之间传递的结构的指针,等等 是否有将C构建到项目中的选项,以便通过标准捆绑包安装在目标机器上编译C?感谢#b

我已经用C编写了一些专有的业务逻辑,我想从Ruby运行这些逻辑。我试图把它写成一个gem,Bundler只是把它从主项目的内部路径包含进来;但是,Bundler“在这种情况下不会构建本机扩展”(t在#Bundler irc通道中)

我不希望为这个C扩展gem创建单独的私有存储库。我也不希望为所有环境预编译本机版本。RubyLine似乎不是一个选项,因为C不仅仅是一对函数,它大量使用指向函数之间传递的结构的指针,等等

是否有将C构建到项目中的选项,以便通过标准捆绑包安装在目标机器上编译C?

感谢#bundler irc频道中的tmoore为我指出以下内容:

来自前者:

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

从后者:

我想我会选择“如果需要,请使用git gems” 编译扩展名“:路径作为一个选项,是添加目录的一种方式 您正在手动管理的加载路径。如果你需要一个 扩展内置在这些目录中,您应该自己做 作为手动管理该目录的一部分。:)

这是官方的说法。如果希望Bundler编译专有扩展,请从私有Git存储库加载扩展gem。(这很有帮助:)为了避免权限过宽,您可以:

  • 创建专用于私人回购的新Github帐户
  • 仅授予它对您的私有扩展repo的只读访问权限
  • 为该专用Github用户创建oauth令牌:
  • 将该oauthtoken合并到GEM文件中的git url中:

    gem“你的名字”,git: ''