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

yftpprvb  于 2023-02-08  发布在  Ruby
关注(0)|答案(1)|浏览(138)

我想按照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 -vRuby2.5.8p224(2020年3月31日修订版本67882)[x86_64-Linux-GNU]
  2. gem -v网站 2.7.6.2
    1.下载-Ubuntu 20.04.4 LTS
  3. Winver-版本21H2(操作系统构建版本22000.556)
    • 编辑:**

gem environment的输出

/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

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

niknxzdl

niknxzdl1#

你试图运行的程序试图用一个非特权帐户执行特权操作。gem将试图写入根拥有的目录,即使你是作为一个非特权用户运行它。还有另一个问题是bundler,它将使用gem,这将给你带来同样的问题,但这次你不能再使用--user-install标志。要克服默认行为而不影响底层操作系统,可以强制gem使用用户帐户,强制bundler使用本地目录。
靶病变; DR:
您需要做的是使用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。另外,默认情况下,bundler尝试在系统范围内安装,所以你必须配置它使用本地目录。
警告:只能在你的博客目录下运行这些命令,或者为将来的博客运行一个新的空目录。

~$ 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会更新它所依赖的gem的版本,从而影响您的其他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

相关问题