【问题标题】:How to build a Ruby Gem using Nix that has native extensions如何使用具有本机扩展的 Nix 构建 Ruby Gem
【发布时间】:2016-06-20 23:32:05
【问题描述】:

我正在尝试为rails 构建一个bundlerEnv。不知何故,Nix 知道 nokogirirails 的依赖项)需要 zliblibxml2libxslt,但编译失败。

#Gemfile
gem "rails"

#default.nix
{ pkgs ? import <nixpkgs> {} }:

with pkgs;

bundlerEnv {
  name = "smt";
  inherit ruby;

  gemfile  = ./Gemfile;
  lockfile = ./Gemfile.lock;
  gemset   = ./gemset.nix;
}

full output

$ nix-build
...
buildFlags: --use-system-libraries --with-zlib-dir=/nix/store/dn9l2kd6ai731k34pzlzr5dz3in0rn31-zlib-1.2.8-dev --with-xml2-lib=/nix/store/9w15hz68wz5qnihfhsbr281d0sfs20a8-libxml2-2.9.3/lib --with-xml2-include=/nix/store/rq94vzxa92p30prfgv9jz83xiy8hkn2k-libxml2-2.9.3-dev/include/libxml2 --with-xslt-lib=/nix/store/fv137j5wxp4dg1wjqdbk8i2l087163b7-libxslt-1.1.28/lib --with-xslt-include=/nix/store/j7y29aggnzmlgh5bccp9f7vmiknh16fm-libxslt-1.1.28-dev/include --with-exslt-lib=/nix/store/fv137j5wxp4dg1wjqdbk8i2l087163b7-libxslt-1.1.28/lib --with-exslt-include=/nix/store/j7y29aggnzmlgh5bccp9f7vmiknh16fm-libxslt-1.1.28-dev/include
WARNING:  You build with buildroot.
  Build root: /
  Bin dir: /nix/store/z26mymfryhqqh7y8w94qr0xc88q46dvr-ruby2.3.1-p0-nokogiri-1.6.8/lib/ruby/gems/2.3.1/bin
  Gem home: /nix/store/z26mymfryhqqh7y8w94qr0xc88q46dvr-ruby2.3.1-p0-nokogiri-1.6.8/lib/ruby/gems/2.3.1

...
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.

不幸的是,运行find /nix -name mkmf.log 失败。但是使用 Nix 环境手动配置nokogiri 成功(detais

【问题讨论】:

标签: ruby nix


【解决方案1】:

我很幸运有这样的配置:

with import <nixpkgs>{};

let
  bundler_ = bundler.override {
    ruby = ruby_2_3;
  };
  bundix_ = bundix.override {
    bundler = bundler_;
};

  gems = bundlerEnv {
    name = "company-bundler";
    inherit ruby_2_3;
    gemfile = ./Gemfile;
    lockfile = ./Gemfile.lock;
    gemset = ./gemset.nix;
  };

in

stdenv.mkDerivation rec {
  name = "company-tools";
  version = "0.1.0";
  buildInputs = [
    # Ruby
    ruby_2_3
    bundler_
    bundix_
    rake
    gems

    # Nokogiri
    libiconv
    libxml2
    libxslt
    zlib
    ];

    shellHook = ''
      # use a Gem directory within nix
      export GEM_HOME=$out/.gems
      export PATH=$out/.gems/bin:$PATH

      # For nokogiri
      export XSLT_LIB=${stdenv.lib.makeLibraryPath [ libxslt ]}
      bundle config build.nokogigi --with-xslt-lib=$XSLT_LIB
    '';
    }

我认为关键位是XSLT_LIB var 和bundle config

【讨论】:

    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-20
    • 1970-01-01
    • 2014-10-24
    • 2018-04-26
    相关资源
    最近更新 更多