我们有一个ruby应用程序依赖于具有原生扩展的gem(在这个特定情况下Nokogiri).但是,由于各种原因,我们无法在生产主机上安装该gem的构建先决条件(例如build-essential,libxslt-dev,ruby-dev等).
是否有(标准?)方法重新打包预先构建的原生扩展的gem?
它应该是可能的(对Windows来说这似乎是相当标准的),但是我找不到关于这个主题的任何文档.
请注意,我们只需要支持单个平台,所有系统库的已知版本(Ubuntu 9.04 Server 64位,Ruby 1.8.7).
更新:我们正在使用Bundler,所以我们想要在一天结束时安装一个gem,而不是debian软件包.
最后找到了一种方法来为使用rake-compiler构建C扩展(其中大部分都是)的gem执行此操作.
您需要在与要部署到的计算机相同的计算机上执行以下操作,否则它将无法工作:
安装构建C扩展的构建先决条件:
# apt-get install build-essentials ruby-dev # ... etc # gem install rake-compiler
解压缩要重建的gem:
$ gem unpack nokogiri
构建闪亮的新预编译gem:
$ rake native gem
您现在可以在没有安装任何构建工具的计算机上安装本机gem:
$ gem install pkg/nokogiri-1.4.3.1-x86-linux.gem Successfully installed nokogiri-1.4.3.1-x86-linux 1 gem installed