【问题标题】:How to fix "sudo bundle install"如何修复“sudo bundle install”
【发布时间】:2020-02-26 06:22:57
【问题描述】:

我阅读了很多问题,例如“How can I fix an accidental 'sudo bundle install dir_name'?”、“cannot recover from `sudo bundle install`”、“`bundle install` failed due to permission denied”,但没有一个对我有用。

在 Debian 10.2 下,我错误地将 bundle install 运行为 root。我发出 Ctrl+c 超过 1 秒后使用它。 现在,作为普通用户,每次我尝试使用bundle 我都会得到:

bash: /srv/dev-disk-by-label-data/home/mark/gems/bin/bundle: Permission denied

我做到了:

  • gem uninstall bundlergem install bundler
  • rm -r ~/.bundle/
  • rm -r ~/.gem/
  • bundle install --path ~/.gem 及其变体
  • 检查~/gems下的所有文件都是我自己拥有的

permission denied 错误仍然存​​在。

【问题讨论】:

    标签: ruby rubygems bundler root sudo


    【解决方案1】:

    来自 Bundler 的文档:

    默认情况下,Bundler 将 gem 安装到与 gem install 相同的位置。

    在某些情况下,您的 Unix 用户可能无法写入该位置。在这种情况下,>Bundler 会将所有内容暂存到一个临时目录中,然后询问您的 >sudo 密码,以便将 gem 复制到它们的系统位置。

    从您的角度来看,这与将 gems 直接安装到 >系统中是相同的。

    您永远不应该使用 sudo bundle install。这是因为 >bundle install 中的其他几个步骤必须以当前用户身份执行:

    更新您的 Gemfile.lock

    如有必要,更新您的供应商/缓存

    使用用户的 SSH 密钥检查私有 git 存储库

    在这三个中,前两个理论上可以通过将 >resulting files 更改为 $SUDO_USER 来执行。然而,第三个只能通过>以当前用户身份调用 git 命令来执行。因此,git gem 被下载并安装到 ~/.bundle 而不是 $GEM_HOME 或 $BUNDLE_PATH。

    因此,您应该以当前用户身份运行 bundle install,如果需要将 gem 放入其最终位置,Bundler 将 >询问您的密码。

    作为一种可能的解决方案,您可以完全卸载 Ruby 及其依赖项,然后使用 asdf、RVM 或 rbenv 安装 Ruby 并再次运行 Bundler。

    我使用 Bundler 只是为了从 gemfile 安装 gem。 cd 使用 gemfile 进入项目并运行 bundle install。它必须找到 gemfile 并自动安装 gems。我认为在主目录中使用 Bundler 很糟糕。

    我在这里安装了所有的 gem:

    ~/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems
    

    【讨论】:

    • 我不得不从头开始重新安装所有东西。只是有点粗鲁……
    • 很高兴您解决了这个问题!作为建议 - 仅在需要时使用 sudo,最好检查它(例如 bundler)做了什么,然后做出决定(是否使用 sudo)。
    • 当然。我知道我不能将sudo 与捆绑器一起使用。如前所述,在权限被拒绝消息后,这是由于“自动化”造成的错误:)
    • 在脚本的密码中输入安全类型吗?我之所以选择sudo,是因为我不想将这类信息交给我无法信任的其他程序。
    猜你喜欢
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2011-10-02
    • 2016-02-25
    • 2017-09-04
    • 2021-12-23
    • 2017-08-24
    相关资源
    最近更新 更多