【问题标题】:Ruby on Mac OSX Sierra via Mac Ports通过 Mac 端口在 Mac OSX Sierra 上安装 Ruby
【发布时间】:2018-04-23 18:43:09
【问题描述】:

我使用的是 macOS Sierra。我通过 macports (/opt/local/bin/ruby2.5) 安装了 ruby​​ 2.5。但是,我也有 ruby​​ 2.0 位于 /usr/bin/ruby 中——不确定它来自哪里——它不是 macports 包。如何让我的系统在系统范围内使用较新的 ruby​​ 2.5? 当我尝试删除/重命名 /usr/bin/ruby 时,即使作为超级用户,我也会得到“不允许操作”。

【问题讨论】:

  • Ruby 与 osx 捆绑在一起。您是否尝试过使用RVM
  • 您不想更改默认的 ruby​​。使用rvmrbenv(我更喜欢后者)来管理你用于项目工作的版本
  • 我个人更喜欢 asdf。

标签: ruby macos macports


【解决方案1】:

/usr/bin 是苹果的土地。您不应该更改它,Apple 已经实施了一项名为“系统完整性保护”(SIP) 的功能,该功能可以主动防止在启用此保护的情况下修改文件,其中之一是 /usr/bin/ruby。有一些方法可以禁用 SIP,但有更好的替代方法可以更改默认的 ruby​​。

相反,首选特定版本的自行安装工具的一般方法是设置$PATH,以便您控制的文件夹位于/usr/bin 之前。 MacPorts 已经通过添加 /opt/local/bin 来做到这一点。但是,默认情况下,MacPorts 不会创建 /opt/local/bin/ruby -> ruby2.5 符号链接,因为您可能安装了多个版本的 Ruby,并且它不知道您希望将哪个版本设为默认值。

出于这个原因,MacPorts 附带了一种称为port select(请参阅port help select)的机制,允许您管理/opt/local/bin/ruby 符号链接。在您的情况下,port select --list ruby 应该显示一个选项列表,sudo port select --set ruby ruby25 应该将 ruby​​2.5 设为默认值。请注意,Shell 通常会将查找从命令名称缓存到提供它的路径,因此这只有在打开新的 shell 或在当前 shell 中运行 hash -r 后才会生效。

在 Ruby 的特定情况下,还有一些工具可用于并行管理不同版本的 Ruby,例如 rbenv 和 rvm。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多