2015-09-29 19 views
2

目前,Nix中的默认和最新Ruby为2.2.2-p0。当我运行nix-env -qaP ruby时,它返回一个列表,其中表示可通过nixpkgs.ruby访问此Ruby版本。我期望这个Ruby链接将改变,以保持与最新的受支持的Ruby版本的最新。没有可选的nixpkgs.ruby_2_2_2供我用来确保我的ruby版本。使用最新版本时确保Nix Dev环境中的Ruby版本

然而,看看https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/interpreters/ruby/ruby-2.2.2.nix的.nix定义文件,我发现它们在该脚本中指定了修订版本。

所以我想知道,是否有某种方式可以指定我想在我的Nix表达式的buildInputs中列出的Nix包的修订版本,以创建开发环境(它将被访问通过nix-shell .)?或者还有其他一些我可能会做的事情,这将使我能够确保ruby 2.2.2-p0用于安装,而不仅仅是最新的Ruby,它可能会改变?

当前脚本:

let 
    pkgs = import <nixpkgs> {}; 
    in with pkgs; { 
    rubyEnv = stdenv.mkDerivation rec { 
     name = "ruby-env"; 
     version = "0.1"; 
     src = ./.; 
     buildInputs = [ 
     stdenv 
     ruby 
     bundler_HEAD 
     ]; 
    }; 
    } 

我没有看到这所涵盖的文档在http://nixos.org/nix/manual/#chap-writing-nix-expressions

回答

2

没有可选nixpkgs.ruby_2_2_2对我来说,用什么来保证我的 红宝石版本。

实际上存在nixpkgs一个ruby_2_2_2

$ nix-env -qaP ruby 
nixos.ruby_1_8  ruby-1.8.7-p374 
nixos.ruby_1_9  ruby-1.9.3-p551 
nixos.ruby_2_0  ruby-2.0.0-p645 
nixos.ruby_2_1_0 ruby-2.1.0-p0 
nixos.ruby_2_1_1 ruby-2.1.1-p0 
nixos.ruby_2_1_2 ruby-2.1.2-p353 
nixos.ruby_2_1_3 ruby-2.1.3-p0 
nixos.ruby_2_1  ruby-2.1.6-p0 
nixos.ruby_2_2_0 ruby-2.2.0-p0 
nixos.ruby   ruby-2.2.2-p0 
nixos.bundler_HEAD ruby-2.2.2-p0-bundler-2015-01-11 

通过查看ruby package in the index的定义,你可以看到当前的默认红宝石只是红宝石2.2别名:

ruby = ruby_2_2; 

这又是ruby 2.2.2的别名:

ruby_2_2 = ruby_2_2_2; 

要覆盖红宝石包在尼克斯表达特定的红宝石版本,可用于:

let 
    nixpkgs = import <nixpkgs> {}; 
    pkgs = nixpkgs.overridePackages (self: super: { 
    ruby = nixpkgs.ruby_2_2_2; 
    }); 
in with pkgs; 
{ 
    rubyEnv = stdenv.mkDerivation rec { 
    name = "ruby-env"; 
    version = "0.1"; 
    src = ./.; 
    buildInputs = [ 
     stdenv 
     ruby 
     bundler 
    ]; 
    }; 
} 
+1

啊,没关系,这是有道理的,假设你的意思是ruby_2_2化名为2.2.2,而不是2.2.0。 – josiah

+1

感谢您的指点,我修复了错字。 – Eric