c - Ruby 的专有 C 扩展

标签 c ruby bundler

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

我不想为这个 C 扩展 gem 创建一个单独的私有(private)存储库。我也不想为所有环境预编译 native 版本。 RubyInline 似乎不是一个选项,因为 C 不仅仅是几个函数,大量使用指向在函数之间传递的结构的指针等。

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

最佳答案

感谢#bundler irc channel 中的 tmoore 向我指出以下内容:

来自前者:

Unlike :git, bundler does not compile C extensions for gems specified as paths.

来自后者:

I think I'm going to go with "please use git gems if you need to compile extensions". :path, as an option, is a way to add directories that you are managing manually to the load path. If you need an extension built in those directories, you should be doing it yourself as part of managing that directory manually. :)

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

  1. 创建一个专用于您的私有(private)仓库的新 Github 帐户
  2. 只授予它对您的私有(private)扩展存储库的只读访问权限
  3. 为该专用 Github 用户创建一个 oauth token :https://help.github.com/articles/creating-an-access-token-for-command-line-use/
  4. 将该 oauthtoken 合并到您的 gemfile 中的 git url 中:

    gem 'your_gem_name', git: ' https://your_oauth_token:x-oauth-basic@github.com/account/project.git '

关于c - Ruby 的专有 C 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26794623/

相关文章:

c - 带有 const char* 的 printf 中的奇怪 SIGABRT

ruby - 在没有 Nokogiri 的情况下在 Ruby 中进行 Curl 解析?

ruby - 在 attr_accessor 期间键入转换值

ruby-on-rails - bundle 安装在 ./mysql2 文件夹中安装 gems

ruby-on-rails - Bundler 使用错误的 Ruby 版本

c - 在 C 中查找最小值和最大值的问题

c - 在 C 中将 2 位或更多位数字作为 char

c - 相对于标准代码测试 simd 加速的正确方法是什么

ios - FaSTLane 不断警告我正在使用 Ruby 2.2.4

ruby-on-rails - Rails 可安装引擎 : how to bundle in each app that uses it?