2015-09-29 8 views
2

В настоящее время по умолчанию и последним Ruby in Nix является 2.2.2-p0. Когда я запускаю nix-env -qaP ruby, он возвращает список, в котором говорится, что эта рубиновая версия доступна через nixpkgs.ruby. Я ожидаю, что эта рубиновая ссылка изменится, чтобы оставаться в курсе последних версий Ruby. Нет никакой опции nixpkgs.ruby_2_2_2, чтобы использовать ее для обеспечения моей рубиновой версии.Обеспечьте версию Ruby в среде Nix Dev при использовании последней версии

Однако, глядя на файл определения .nix в https://github.com/NixOS/nixpkgs/blob/master/pkgs/development/interpreters/ruby/ruby-2.2.2.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; 

, который в свою очередь является псевдонимом для рубина. 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