如何使用 Nix 而不是 Homebrew 在 OS X 上设置 Ruby?

Bas*_*ber 3 ruby nix

我最近切换到 Nix 包管理器,而不是 OS X 的 Homebrew。

通常,我使用 rbenv 安装它,如下所示:

brew install rbenv
rbenv install 2.2.0
Run Code Online (Sandbox Code Playgroud)

我现在问自己如何与 Nix 合作?我听说 Nix 本身是一个足够好的包管理器,所以也许我可以摆脱它rbenv来处理我的 ruby​​ 版本?

当我通过 Nix 安装 ruby​​ 时

nix-env -i ruby
Run Code Online (Sandbox Code Playgroud)

即使 OS X 可以识别它:

$ which ruby
/Users/USERNAME/.nix-profile/bin/ruby
Run Code Online (Sandbox Code Playgroud)

我在尝试执行以下操作时仍然遇到Permission denied错误:

gem install sass
Run Code Online (Sandbox Code Playgroud)

您仍然会推荐 rbenv 来处理 ruby​​ 安装吗?我知道我可以只 chown Nix 文件夹,但无论如何我应该拥有它。

kne*_*epp 5

我在使用 python 和nix. 一般来说,使用 nix 时的方法不是

  • 为某种语言的某些版本安装特定于语言的包管理器(gem、、pip...)
  • 使用该语言特定的包管理器来安装库

相反,nix(根据我所学到的)做事的方式是:

  • 安装所有已打包的应用程序nix
  • nix如果您正在开发应用程序,则无需通过(或)安装应用程序所依赖的库gem,而是定义一个nix描述应用程序依赖项的表达式并将其用作开发环境。(我认为在这件事上应该改进文档。)
  • 通常不要自行安装库,而是在某些第三方构建过程中手动引用这些库。(这在某些情况下有效,例如在编译的 C/C++ 库中,其中库的依赖项通过 s 内置到它们中RPATH。但这不适用于例如 python 包。)最后,您真正想要的是应用程序,不是图书馆!

nixpkgs你可以在官方文档中找到一些关于如何设置此类环境的文档,目前主要涵盖 Haskell,但 Ruby 应该类似。