使用最新版本时确保 Nix 开发环境中的 Ruby 版本
Ensure Ruby version in Nix Dev Environment when using latest version
目前,Nix 中的默认和最新 Ruby 是 2.2.2-p0。当我 运行 nix-env -qaP ruby
它 returns 一个列表时,它说这个 ruby 版本是通过 nixpkgs.ruby
访问的。我希望这个 Ruby link 会更改为与最新支持的 ruby 版本保持同步。没有可选的 nixpkgs.ruby_2_2_2 供我使用以确保我的 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
的文档中看到这一点
There is no optional nixpkgs.ruby_2_2_2 for me to use to ensure my
ruby version.
其实在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的定义,可以看到当前默认的ruby只是ruby 2.2:
的一个别名
ruby = ruby_2_2;
这又是 ruby 2.2.2:
的别名
ruby_2_2 = ruby_2_2_2;
要在 nix 表达式中将 ruby 包覆盖到特定的 ruby 版本,可以使用 overridePackages
:
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
];
};
}
目前,Nix 中的默认和最新 Ruby 是 2.2.2-p0。当我 运行 nix-env -qaP ruby
它 returns 一个列表时,它说这个 ruby 版本是通过 nixpkgs.ruby
访问的。我希望这个 Ruby link 会更改为与最新支持的 ruby 版本保持同步。没有可选的 nixpkgs.ruby_2_2_2 供我使用以确保我的 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
的文档中看到这一点There is no optional nixpkgs.ruby_2_2_2 for me to use to ensure my ruby version.
其实在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的定义,可以看到当前默认的ruby只是ruby 2.2:
的一个别名ruby = ruby_2_2;
这又是 ruby 2.2.2:
的别名ruby_2_2 = ruby_2_2_2;
要在 nix 表达式中将 ruby 包覆盖到特定的 ruby 版本,可以使用 overridePackages
:
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
];
};
}