ruby - gem 更新显示 WSL2 上的权限错误

标签 ruby jekyll

我想按照 doc 在 WSL2 上安装 jekyll 。但出现错误。

gem update
Updating installed gems                                                            
Updating fiddle                                                                    
ERROR:  While executing gem ... (Gem::FilePermissionError)                             
You don't have write permissions for the /var/lib/gems/2.5.0 
directory.

--backtrace之后

ERROR:  While executing gem ... (Gem::FilePermissionError)
You don't have write permissions for the /var/lib/gems/2.5.0 directory.
/usr/lib/ruby/2.5.0/rubygems/installer.rb:706:in `verify_gem_home'
/usr/lib/ruby/2.5.0/rubygems/installer.rb:854:in `pre_install_checks'
/usr/lib/ruby/2.5.0/rubygems/installer.rb:281:in `install'
/usr/lib/ruby/2.5.0/rubygems/resolver/specification.rb:97:in `install'
/usr/lib/ruby/2.5.0/rubygems/request_set.rb:168:in `block in install'
/usr/lib/ruby/2.5.0/rubygems/request_set.rb:156:in `each'
/usr/lib/ruby/2.5.0/rubygems/request_set.rb:156:in `install'
/usr/lib/ruby/2.5.0/rubygems/dependency_installer.rb:409:in `install'
/usr/lib/ruby/2.5.0/rubygems/commands/update_command.rb:213:in `update_gem'
/usr/lib/ruby/2.5.0/rubygems/commands/update_command.rb:225:in `block in update_gems'
/usr/lib/ruby/2.5.0/rubygems/commands/update_command.rb:224:in `each'
/usr/lib/ruby/2.5.0/rubygems/commands/update_command.rb:224:in `update_gems'
/usr/lib/ruby/2.5.0/rubygems/commands/update_command.rb:100:in `execute'
/usr/lib/ruby/2.5.0/rubygems/command.rb:313:in `invoke_with_build_args'
/usr/lib/ruby/2.5.0/rubygems/command_manager.rb:173:in `process_args'
/usr/lib/ruby/2.5.0/rubygems/command_manager.rb:143:in `run'
/usr/lib/ruby/2.5.0/rubygems/gem_runner.rb:59:in `run'
/usr/bin/gem:21:in `<main>'

我已阅读stackoverflow 相关的que,但他们没有工作。
系统信息:

  1. ruby -v ruby 2.5.8p224(2020-03-31 修订版 67882)[x86_64-linux- gnu]
  2. gem -v 2.7.6.2
  3. 发行版 - Ubuntu 20.04.4 LTS
  4. Winver - 版本 21H2(操作系统版本 22000.556)
    编辑:
    gem 环境的输出
/usr/lib/ruby/2.5.0/rubygems/commands/environment_command.rb:154: warning: Insecure world writable dir /mnt/c in PATH, mode 040777
RubyGems Environment:
  - RUBYGEMS VERSION: 2.7.6.2
  - RUBY VERSION: 2.5.8 (2020-03-31 patchlevel 224) [x86_64-linux-gnu]
  - INSTALLATION DIRECTORY: /var/lib/gems/2.5.0
  - USER INSTALLATION DIRECTORY: /home/raghav/.gem/ruby/2.5.0
  - RUBY EXECUTABLE: /usr/bin/ruby2.5
  - EXECUTABLE DIRECTORY: /usr/local/bin
  - SPEC CACHE DIRECTORY: /home/raghav/.gem/specs
  - SYSTEM CONFIGURATION DIRECTORY: /etc
  - RUBYGEMS PLATFORMS:
    - ruby
    - x86_64-linux
  - GEM PATHS:
     - /var/lib/gems/2.5.0
     - /home/raghav/.gem/ruby/2.5.0
     - /usr/lib/ruby/gems/2.5.0
     - /usr/share/rubygems-integration/2.5.0
     - /usr/share/rubygems-integration/all
     - /usr/lib/x86_64-linux-gnu/rubygems-integration/2.5.0
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
  - SHELL PATH:
     - /home/raghav/.local/bin
     - /home/raghav/bin
     - /usr/local/sbin
     - /usr/local/bin
     - /usr/sbin
     - /usr/bin
     - /sbin
     - /bin
     - /usr/games
     - /usr/local/games
     - /usr/lib/wsl/lib
     - /mnt/c/Program Files (x86)/Common Files/Oracle/Java/javapath
     - /mnt/c/WINDOWS/system32
     - /mnt/c/WINDOWS
     - /mnt/c/WINDOWS/System32/Wbem
     - /mnt/c/WINDOWS/System32/WindowsPowerShell/v1.0/
     - /mnt/c/WINDOWS/System32/OpenSSH/
     - /mnt/c/Users/Raghav/Downloads/cmake-3.20.3-windows-x86_64/cmake-3.20.3-windows-x86_64/bin
     - /mnt/c/Program Files/dotnet/
     - /mnt/c/Program Files/Microsoft SQL Server/130/Tools/Binn/
     - /mnt/c/Program Files/Microsoft SQL Server/Client SDK/ODBC/170/Tools/Binn/
     - /mnt/c/msys64/mingw64/bin"
     - /mnt/c/Users/Raghav/.dotnet/tools
     - /mnt/c/Users/Raghav/AppData/Local/Microsoft/WindowsApps
     - /mnt/c/Program Files/Java/jre1.8.0_321/bin
     - /mnt/c/Users/Raghav/AppData/Local/Programs/MiKTeX/miktex/bin/x64/
     - /snap/bin


用户名:raghav
root 是文件的所有者。

最佳答案

您尝试运行的程序尝试使用非特权帐户执行特权操作。 gem即使您以非特权用户身份运行该目录,也会尝试写入根目录。还有一个问题是 bundler将使用 gem因此,这会给您带来同样的问题,但这次您不能使用 --user-install不再标记了。要克服默认行为而不影响底层操作系统,您可以强制 gem 使用用户帐户并强制 bundler 使用本地目录。

TL;博士:

您需要做的是使用 gem install --user-install而不是gem install 。这会将 gems 安装到 ~/.local/share/gem/ ;

bundle config set --local path 'vendor/bundle'或每个项目的类似命令。或者,您可以使用 bundle config set --global path ~/.local/share/gem/ ,它将使用 gem install --user-install 相同的文件夹使用(在 Ubuntu 22.04 上)。


首先,该教程的当前说明建议打开 power shell 并运行 bash 。那已经过时了。如果您使用 Windows 应用商店中的 Ubuntu 应用程序,当您运行该应用程序时,您将在 Ubuntu 虚拟机内获得一个 shell,这就是您应该使用的。从那里您可以按照 ubuntu instructions 进行操作。 .

这是在此环境中工作的一步一步,它将使用 sudo仅在不可避免的情况下出现一次:

$ sudo apt-get install ruby-full build-essential zlib1g-dev
$ gem install --user-install bundler jekyll webrick

这样您就可以像往常一样在 Ubuntu 中使用 Jekyll 了。如果你想从 bundler 中使用它,那么你必须再次安装 webrick gem,因为 jekyll 会覆盖 Gemfile。另外,默认情况下,捆绑程序会尝试在系统范围内安装,因此您必须将其配置为使用本地目录。

警告:仅在您的博客目录或 future 博客的新空目录中运行这些命令。

~$ sudo apt-get install ruby-full build-essential zlib1g-dev
~$ gem install --user-install bundler
~$ mkdir blog
~/blog$ cd blog
~/blog$ bundle init
~/blog$ bundle add jekyll
~/blog$ bundle config set --local path 'vendor/bundle'
~/blog$ bundle exec jekyll new --force --skip-bundle .
~/blog$ bundle add webrick
~/blog$ bundle install

使用 bundle exec jekyll serve 进行测试

如果您同意使用用户范围的 gem 文件夹,并且知道更新 jekyll 会更新它所依赖的 gems 的版本,从而影响您的其他 ruby​​ 项目,那么您可以使用用户范围的方法:

~$ sudo apt-get install ruby-full build-essential zlib1g-dev
~$ gem install --user-install bundler
~$ bundle config set --global path ~/.local/share/gem
~$ mkdir blog
~/blog$ cd blog
~/blog$ bundle init
~/blog$ bundle add jekyll
~/blog$ bundle exec jekyll new --force --skip-bundle .
~/blog$ bundle add webrick
~/blog$ bundle install

当然,您也可以始终使用系统范围的方法,这是最不推荐的,因为它会破坏您的 ruby​​ 安装:

~$ sudo apt-get install ruby-full build-essential zlib1g-dev
~$ sudo gem install bundler jekyll webrick

关于ruby - gem 更新显示 WSL2 上的权限错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71621241/

相关文章:

ruby-on-rails - Mac OSX 10.5 "good enough"上是否默认安装了用于 Rails 开发的 Ruby?

html - Jekyll 每 4 个循环中的项目显示不同

html - 无法通过标签枚举 Jekyll 页面

jekyll - 为什么 Font Awesome 无法在我的 jekyll 构建的 Github 网站上运行?

html - 在社交媒体上分享页面 - 图片缩略图不正确

ruby-on-rails - 如何在自定义 Rails 引擎 gem 中加载正确版本的动态库和 gem(libxml、Nokogiri)?

ruby-on-rails - Rails 4.0 未定义方法 `+' 为 nil :NilClass

ruby-on-rails - Rails,按相关模型计数排序

Ruby - 如果数组中的元素包含某个字符,则返回关联的元素

javascript - 当 jekyll gist 标签与私有(private) gist 一起使用时,自动更改脚本 src