【问题标题】:You don't have write permissions for the /Library/Ruby/Gems/2.3.0 directory. (mac user)您没有 /Library/Ruby/Gems/2.3.0 目录的写入权限。 (mac用户)
【发布时间】:2018-12-10 02:31:03
【问题描述】:

下面是我需要做的。

要运行规范,您需要安装 RSpec。首先,在项目的根目录中运行gem install bundler。然后,运行bundle install。要运行单个规范文件,请运行如下命令:bundle exec rspec spec/00_hello_spec.rb。要一次运行所有规范,请运行bundle exec rspec

所以,我在终端输入gem install bundler,得到了错误:

您没有 /Library/Ruby/Gems/2.3.0 目录的写入权限。

这是在 atom 的项目文件中

source "https://rubygems.org"
gem "rspec", "~> 3.2.0"

我的问题是:

似乎终端正在给我响应,因为我不应该更改 ruby​​ 上的任何内容,我需要在 atom 内 bundle install?谁能告诉我如何使用 atom 或在 atom 中运行任何东西?

【问题讨论】:

  • 只需使用以下命令sudo chown -R $USER /Library/Ruby/Gems/

标签: macos rubygems installation bundler atom-editor


【解决方案1】:

更新

您说得对,macOS 不允许您使用 Mac 随附的 Ruby 版本更改任何内容。但是,可以使用不干扰 Apple 提供的单独版本的 Ruby 来安装像 bundler 这样的 gem。

强烈建议不要使用sudo 安装gem,或更改系统文件和目录的权限,即使您知道自己在做什么。我们可以停止提供这种糟糕的建议吗?我写了一篇详细的文章,显示why you should never use sudo to install gems

解决方案包括两个主要步骤:

  1. 安装一个单独的 Ruby 版本,该版本不会干扰 Mac 随附的版本。
  2. 更新您的PATH,使新Ruby 版本的位置位于PATH 的第一个位置。一些工具会自动为您执行此操作。如果您不熟悉 PATH 及其工作原理,这是您应该学习的基础知识之一,您就会明白为什么有时会出现“command not found”错误以及如何解决这些错误。

有几种方法可以在 Mac 上安装 Ruby。我推荐的最好方法,我希望在各种安装说明中更普遍,是使用自动脚本(就像我在上面编写并链接到的那个),它将为您设置一个适当的 Ruby 环境。这大大减少了由于指令不足而导致错误的机会,这些指令使用户手动执行大量操作并让他们自己找出所有必要的步骤。

您可以采取的另一条路线是花额外的时间手动完成所有事情并希望获得最好的结果。首先,您需要安装Homebrew,它会安装必备的命令行工具,并且可以轻松安装其他必要的工具。

那么,安装单独版本的 Ruby 的两种最简单的方法是:

如果您想要在多个 Ruby 版本之间轻松切换的灵活性 [推荐]

选择以下四个选项之一:

  • chrubyruby-install - 我的个人建议以及由我的脚本自动安装的建议。这些可以通过 Homebrew 安装:
brew install chruby ruby-install

如果您选择了chrubyruby-install,那么您可以像这样安装最新的 Ruby:

ruby-install ruby

安装完所有内容并根据上述工具的说明配置.zshrc.bash_profile 后,退出并重新启动终端,然后切换到所需的 Ruby 版本。在chruby 的情况下,它会是这样的:

chruby 3.0.1

是否需要配置.zshrc.bash_profile取决于which shell you are using

如果您确定自己不需要多个版本的 Ruby(macOS 附带的版本除外)

  • 使用 Homebrew 安装 ruby​​:
brew install ruby

然后通过运行以下命令更新您的PATH

echo 'export PATH="/usr/local/opt/ruby/bin:/usr/local/lib/ruby/gems/2.7.0/bin:$PATH"' >> ~/.zshrc

上面命令中的2.7.0 假设 Homebrew 安装了以2.7 开头的 Ruby 版本。如果您使用的是其他版本(可以使用 ruby -v 检查),请将 2.7 替换为您的 Ruby 版本的前两位数。

然后“刷新”您的 shell 以使这些更改生效:

source ~/.zshrc

或者您可以打开一个新的终端选项卡,或者退出并重新启动终端。

如果您使用 Bash,请将 .zshrc 替换为 .bash_profile。如果您不确定,请阅读我的指南以了解 which shell you are using

要检查您现在使用的是非系统版本的 Ruby,您可以运行以下命令:

which ruby

应该不是/usr/bin/ruby

ruby -v

如果您使用的是 macOS Catalina,它应该不是 2.6.3。截至今天,3.0.1 是最新的 Ruby 版本。

一旦您安装了这个新版本的 Ruby,您现在可以安装 bundler(或任何其他 gem):

gem install bundler

【讨论】:

  • 如果你像我一样使用 zsh(或 bash 以外的其他 shell),还有一个额外的步骤!安装rbenv 后,您必须执行echo 'eval "$(rbenv init -)"' >> ~/.bash_profileSource
  • 这个很有帮助...应该设置为正确答案。
  • 由于 MacOS 鼓励人们切换到 zsh,您还应该将 ~/.bash_profile 的更改应用到 ~/.zshrc。
  • 链接被阻止,您需要订阅时事通讯(哇)。
  • 您不必注册时事通讯。你可以从这里获取脚本:github.com/monfresh/install-ruby-on-macos.
【解决方案2】:

使用参数--user-install 运行以下命令为我工作:

gem install name_of_gem --user-install

编辑

我仍然无法安装一个 gem(它需要 Ruby 开发工具包的 Ruby.h 头文件或其他东西),然后我尝试了不同的版本管理器,但不知何故,它仍然无法正常工作,正如在文档如何安装和切换(它只是没有切换版本)。 然后我删除了所有已安装的版本管理器,然后使用brew install ruby 安装了最新版本,并且也设置了 PATH 变量。 (在brew安装ruby后会提到),成功了。

【讨论】:

  • 这应该是选择的答案。 M1 芯片尚不支持 Brew,这很有魅力。
  • 为什么这个答案排在最后?这是正确的答案。
  • 在我的 mac Mini M1 上运行良好。 Homebrew 已经支持 M1 芯片
【解决方案3】:

如果您不想运行 sudo,请使用自制软件安装 ruby​​

brew install ruby
export GEM_HOME="$HOME/.gem"
gem install rails

如果您使用的是 zsh,您可能需要将 export GEM_HOME="$HOME/.gem" 添加到您的 ~/.bash_profile.zshrc

注意: RubyGems 会保留旧版本的 gem,因此请在更新后随时进行清理:

gem cleanup

【讨论】:

  • 没有帮助 Catalina OS ?
  • Rails is not currently installed on this system. To get the latest version, simply type: $ sudo gem install rails You can then rerun your "rails" command
  • 听起来您正在尝试运行rails 命令。最后两个命令我没有运行rails 命令。尝试在您的项目之外打开一个新终端,然后将我的答案的最后两行一一复制。
  • 别忘了source ~/. zshrc(或~/.bash_profile
  • 在 Catilina 10.15.4 上为我工作,我确实删除了 rvm rbenv,然后安装了 rbenv。然后更新了我的 .zshrc ,获取了它(又名 $source ~/.zshrc),然后完美地安装了 rails。感谢您的 PATH 更正。
【解决方案4】:

只需导出 GEM_HOME:

export GEM_HOME="$HOME/.gem"

然后试试:

gem install cocoapods

【讨论】:

  • 作为使用 RVM 在 OSX 上安装 Ruby 和 Rails 的人,这对我来说效果很好,并且比其他发布的解决方案简单得多。
【解决方案5】:

正如@idleberg 提到的,在Mac OS 上,最好安装rbenv 以避免在使用手动安装的ruby 时出现权限错误。

安装

$ brew update
$ brew install rbenv

.bashrc文件中添加以下内容:

eval "$(rbenv init -)"

现在,我们可以查看可供安装的 ruby​​ 版本列表

$ rbenv install -l

例如安装 2.3.8 版本

$ rbenv install 2.3.8

现在我们可以全局使用这个 ruby​​ 版本了

$ rbenv global 2.3.8

终于运行

$ rbenv rehash
$ which ruby
/Users/myuser/.rbenv/shims/ruby
$ ruby -v
ruby 2.3.7p456 (2018-03-28 revision 63024) [x86_64-darwin17]

去吧

现在安装捆绑器

$ gem install bundler

全部完成!

【讨论】:

    【解决方案6】:

    安装 macOS Catalina 后我也遇到了同样的问题。我尝试了以下命令及其工作。

    sudo gem update
    

    【讨论】:

    • 迄今为止,对于不想全面安装 ruby​​ + 包管理器 + 等的任何人来说,这是最简单的解决方案。
    【解决方案7】:

    一般建议使用rbenvrvm 之类的版本管理器。否则,已安装的 Gem 将以 root 的形式提供给其他用户。

    如果您知道自己在做什么,可以使用sudo gem install

    【讨论】:

      【解决方案8】:

      运行这个

      $ rbenv init
      # Load rbenv automatically by appending
      # the following to ~/.zshrc:
      
      eval "$(rbenv init -)"
      

      按照说明进行操作,(在我的情况下添加到 ~/.zshrc);)


      同样重要的是:更改仅在您重新启动控制台后才会生效。两种选择

      • 输入source <modified file>
      • 关闭再打开

      【讨论】:

      • 我升级到 Catalina(从 bash 切换到 zsh),我忘记将所有内容从 .bash_profile 复制到 .zshrc
      • 这行得通!不要使用sudo!如果您不使用 ZSH,可以将其添加到您的 .profile.bash_profile。检查这是否有效的一个好方法是使用which ruby,它应该指向具有rbenv 而不是/usr/local/ruby 的路径。
      【解决方案9】:

      如果您单独安装了 ruby​​ 并使用 rbenv/rvm 安装了 ruby​​,那么您的 budler 可能指向不同的版本。

      试试

      gem env home
      

      ruby -v
      

      两者都应该指向相同的版本。检查您是否使用 rbenv/rvm 安装了 ruby​​,如果是,请删除您单独安装的 ruby​​ 版本。

      为了让 gem 工作,你必须调用 rbenv,

      rbenv shell <ruby version> 
      

      rbenv global <ruby version>
      

      我不确定 RVM 是如何工作的。 让我知道这是否有效。

      【讨论】:

      • 缺少设置 shell 和全局。为什么 rbenv 指令中没有这个 ?
      • 不知道为什么错过了,试了才知道。
      【解决方案10】:

      尝试 1 或 2

      1 - $ gem install cocoapods
      2 - $ sudo gem install cocoapods
      

      如果不起作用,则导出 GEM_HOME:

      export GEM_HOME="$HOME/.gem"
      

      再试一次:

      gem install cocoapods
      

      记住官方文档说你可以使用 sudo (https://guides.cocoapods.org/using/getting-started.html#getting-started)。

      【讨论】:

      • export GEM_HOME="$HOME/.gem" 为我工作
      【解决方案11】:

      试试这个:

      sudo gem install cocoapods --user-install
      

      为我工作

      【讨论】:

        【解决方案12】:

        我正在使用以下命令安装 fastlane,但没有成功

        gem install fastlane -NV

        所以使用 sudo 安装 gem 对我有用,就像

        sudo gem install fastlane -NV

        【讨论】:

          【解决方案13】:

          应该使用不同的 ruby​​ 安装。为此,我使用rbenv

          # install your version of ruby
          $ rbenv install 2.0.0-p247
          
          # modify .ruby_version on current directory
          $ rbenv local 2.0.0-p247
          
          # proceed installing gems
          $ gem install bundler
          

          免责声明:我不是红宝石人。这对我有用,如果您是 ruby​​ 专家并且看到此答案中需要更改的内容,请继续或发表评论!

          【讨论】:

            【解决方案14】:

            TL;DR

            在某些情况下,我通过关闭终端会话并在重试失败的命令之前打开一个新会话来解决此类错误。

            详细解释

            在某些 SO(例如 MacOS)中,已经预装了系统范围的 ruby​​ 版本。如果您使用的是版本管理器,例如 rbenvasdf,它们会通过使用当前会话的环境来工作,以便相关命令指向版本管理器安装的二进制文件。

            当安装一个新的二进制文件时,版本管理器将它安装在一个特殊的位置,通常是在用户主目录下的某个地方。然后它会在您的PATH 中配置所有内容,以便您在发出命令时获得新安装的二进制文件,而不是系统附带的二进制文件。但是,如果您不重新启动会话(还有其他方法可以更新您的环境,但这是最简单的方法),您将不会获得新配置,您将使用原始安装。

            【讨论】:

              【解决方案15】:

              MAC 解决方案。运行命令

              sudo gem update    
              

              然后在出现提示时输入您的 Mac 密码

              【讨论】:

                【解决方案16】:

                Mac 解决方案

                1. 使用最新的 ruby​​ 版本安装/更新 RVM

                  \curl -sSL https://get.rvm.io | bash -s stable

                2. 安装bundler

                  gem install bundler


                这两个命令(sudo) gem install ....开始工作后

                【讨论】:

                • 可能还需要指定rvm use &lt;version&gt;
                【解决方案17】:

                在尝试了以前的方法之后,这对我来说在 Big Sur 上很有效:

                sudo gem install -n /usr/local/bin cocoapods
                

                【讨论】:

                • 这对我使用 macOS 11.6 有效。谢谢
                【解决方案18】:
                1. 通过将homebrew 传递到您的终端来安装

                  /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

                2. 使用 brew 安装 cocoapods

                  brew 安装 cocoapods

                【讨论】:

                  【解决方案19】:

                  这在 Mac 上对我有用

                  sudo chown -R $(whoami) $(brew --prefix)/*

                  【讨论】:

                    【解决方案20】:

                    我将 Mojave 与 rbenv 一起使用,此解决方案适用于我:

                    $ vi ~/.bash_profile
                    

                    将此行添加到文件中:

                    if which rbenv > /dev/null; then eval "$(rbenv init -)"; fi
                    

                    【讨论】:

                      【解决方案21】:

                      你需要安装rbenv并在rbenv下维护ruby版本。

                      1. brew install rbenv
                      2. rbenv init
                      3. eval "$(rbenv init -)" 附加到~/.bash_profile
                      4. rbenv install {stable_version_#} 你可以使用rbenv install -L 获取版本号
                      5. rbenv global {your_preferred_version_#} 命令用于切换到 ruby​​ 版本
                      6. rbenv shell {your_preferred_version_#}
                      7. gem install {whatever you want gems}

                      更多详情https://github.com/rbenv/rbenv

                      【讨论】:

                        【解决方案22】:

                        只是做 sudo gem uninstall cocoapods 为我工作。

                        【讨论】:

                          猜你喜欢
                          • 2019-01-10
                          • 2021-01-31
                          • 2015-02-13
                          • 2021-07-16
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 1970-01-01
                          相关资源
                          最近更新 更多