你如何预编译linux的ruby gem的原生扩展?

Jac*_*cob 13 ruby gem precompiled

我们有一个ruby应用程序依赖于具有原生扩展的gem(在这个特定情况下Nokogiri).但是,由于各种原因,我们无法在生产主机上安装该gem的构建先决条件(例如build-essential,libxslt-dev,ruby-dev等).

是否有(标准?)方法重新打包预先构建的原生扩展的gem?

它应该是可能的(对Windows来说这似乎是相当标准的),但是我找不到关于这个主题的任何文档.

请注意,我们只需要支持单个平台,所有系统库的已知版本(Ubuntu 9.04 Server 64位,Ruby 1.8.7).

更新:我们正在使用Bundler,所以我们想要在一天结束时安装一个gem,而不是debian软件包.

Jac*_*cob 21

最后找到了一种方法来为使用rake-compiler构建C扩展(其中大部分都是)的gem执行此操作.

您需要在与要部署到的计算机相同的计算机上执行以下操作,否则它将无法工作:

安装构建C扩展的构建先决条件:

# apt-get install build-essentials ruby-dev # ... etc
# gem install rake-compiler
Run Code Online (Sandbox Code Playgroud)

解压缩要重建的gem:

$ gem unpack nokogiri
Run Code Online (Sandbox Code Playgroud)

构建闪亮的新预编译gem:

$ rake native gem
Run Code Online (Sandbox Code Playgroud)

您现在可以在没有安装任何构建工具的计算机上安装本机gem:

$ gem install pkg/nokogiri-1.4.3.1-x86-linux.gem 
Successfully installed nokogiri-1.4.3.1-x86-linux
1 gem installed
Run Code Online (Sandbox Code Playgroud)