【问题标题】:RVM is not setting my PATH in `fish`, but should beRVM 没有在“鱼”中设置我的 PATH,但应该是
【发布时间】:2017-11-18 08:29:16
【问题描述】:

我已经使用 RVM 一年半了。

在每次命令调用时都有 RVM PATH 警告界面,但除此之外 RVM 仍然正常运行。我可能已经通过以下链接的说明修复了该警告:StackOverflow - Getting “Warning! PATH is not properly set up” when doing rvm use 2.0.0 --default 这涉及将[[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" 放入我的bash 相关的shell 配置文件之一。

在调用链中的其他可用文件中添加该文件或添加太多文件可能会导致这种奇怪的(主要是?)美学错误:SuperUser - Why am I having / how can I fix this error: “shell_session_update: command not found”

开始再次收到 RVM PATH 错误。我当时并没有这么想,但是回头看看这个问题,我想知道我是否刚刚将我的fish shell 从大约 2.2.0 更新到了 2.5.0,这可能导致我进一步实际 strong> PATH 错误(不是警告)...

执行rvm reset 没有帮助。

执行rvm get stable --auto-dotfiles 似乎对当前终端有帮助,但对其他终端没有帮助,即使在重新启动时也是如此。决定重新安装。

rvm implode。删除或注释掉我所有的 shell 配置文件中的所有 RVM 行。

跑过RVM - Integration - Fish Shell,这里也介绍了StackOVerflow - Can't get RVM to switch rubies,这涉及到先做一些RVM - Installing RVM - Quick (guided) Install

  • 使用此组合:curl -sSL https://get.rvm.io | bash -s stable --rails --with-default-gems="rails haml" --with-gems="hirb"
  • 下载了rvmfish函数。
  • rvm default 配置添加到config.fish

问题

我的ruby 可执行文件版本错误:

⋊> ~ ruby -v
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]

这是系统 ruby​​,而不是 RVM 设置的版本:

⋊> ~ which ruby
/usr/bin/ruby

我没有捆绑命令:

⋊> ~ which bundle
⋊> ~ bundle
fish: Unknown command 'bundle'
⋊> ~ functions bundle

因此,如果没有 bundle 帮助我安装 gem,我就无法使用 Rails:

⋊> ~ rails
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.

我的PATHGEM_PATH 变量似乎没有更新,如下所示。

我的问题是问如何更新这些变量?类似于此链接的内容:StackOverflow - RVM doesn't set correct gem path

更多背景

⋊> ~ which rails
/usr/bin/rails
⋊> ~ functions rails
⋊> ~ ⨯
⋊> ~ head /usr/bin/rails
#!/usr/bin/ruby
# Stub rails command to load rails from Gems or print an error if not installed.
require 'rubygems'

version = ">= 0"
if ARGV.first =~ /^_(.*)_$/ and Gem::Version.correct? $1 then
  version = $1
  ARGV.shift
end
⋊> ~ which rvm
⋊> ~ ⨯

⋊> ~ ls ~/.config/fish/functions/rvm.fish
/Users/username/.config/fish/functions/rvm.fish

⋊> ~ functions rvm|head
function rvm --description 'Ruby enVironment Manager'
  # run RVM and capture the resulting environment
  set --local env_file (mktemp -t rvm.fish.XXXXXXXXXX);
  # echo "DEBUG: env_file: $env_file"
  # This finds where RVM's root directory is and sources scripts/rvm from within it.  Then loads RVM in a clean environment and dumps the environment variables it generates out for us to use.
  bash -c 'PATH=$GEM_HOME/bin:$PATH;RVMA=$(which rvm);RVMB=$(whereis rvm | sed "s/rvm://");source $(if test $RVMA;then echo $RVMA | sed "s/\/bin\//\/scripts\//";elif test $RVMB; then echo $RVMB | sed "s/rvm/rvm\/scripts\/rvm/"; else echo ~/.rvm/scripts/rvm; fi); rvm "$@"; status=$?; env > "$0"; exit $status' $env_file $argv

  # apply rvm_* and *PATH variables from the captured environment
  and eval (grep -E '^rvm|^GEM_PATH|^GEM_HOME' $env_file | grep -v '_clr=' | sed '/^[^=]*PATH/s/:/" "/g; s/^/set -xg /; s/=/ "/; s/$/" ;/; s/(//; s/)//')
  # needed under fish >= 2.2.0
⋊> ~ bash -c 'which rvm'
⋊> ~ bash -c 'whereis rvm'
⋊> ~ bash -c 'echo ~/.rvm/scripts/rvm;'
/Users/username/.rvm/scripts/rvm
⋊> ~ head /Users/username/.rvm/scripts/rvm
#!/usr/bin/env bash

# rvm : Ruby enVironment Manager
# https://rvm.io
# https://github.com/rvm/rvm

# partial duplication marker dkjnkjvnckbjncvbkjnvkj
# prevent from loading in sh shells
if
  builtin test -n "${BASH_VERSION:-}" -o -n "${ZSH_VERSION:-}" -o -n "${KSH_VERSION:-}"
⋊> ~ rvm use
Using /Users/username/.rvm/gems/ruby-2.1.5 with gemset ux-rails3.2
⋊> ~ rvm list

rvm rubies

=* ruby-2.1.5 [ x86_64 ]

# => - current
# =* - current && default
#  * - default
⋊> ~ ls /Users/username/.rvm/rubies/
default@  ruby-2.1.5/
⋊> ~ ls /Users/username/.rvm/rubies/ruby-2.1.5/
bin/  config  include/  lib/  share/
⋊> ~ rvm env
export PATH="/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2/bin:/Users/username/.rvm/gems/ruby-2.1.5@global/bin:/Users/username/.rvm/rubies/ruby-2.1.5/bin:$PATH"
export GEM_HOME='/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2'
export GEM_PATH='/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2:/Users/username/.rvm/gems/ruby-2.1.5@global'
export MY_RUBY_HOME='/Users/username/.rvm/rubies/ruby-2.1.5'
export IRBRC='/Users/username/.rvm/rubies/ruby-2.1.5/.irbrc'
unset MAGLEV_HOME
unset RBXOPT
export RUBY_VERSION='ruby-2.1.5'
⋊> ~ rvm env --path
/Users/username/.rvm/environments/ruby-2.1.5@ux-rails3.2
⋊> ~ cat /Users/username/.rvm/environments/ruby-2.1.5@ux-rails3.2
export PATH="/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2/bin:/Users/username/.rvm/gems/ruby-2.1.5@global/bin:/Users/username/.rvm/rubies/ruby-2.1.5/bin:$PATH"
export GEM_HOME='/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2'
export GEM_PATH='/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2:/Users/username/.rvm/gems/ruby-2.1.5@global'
export MY_RUBY_HOME='/Users/username/.rvm/rubies/ruby-2.1.5'
export IRBRC='/Users/username/.rvm/rubies/ruby-2.1.5/.irbrc'
unset MAGLEV_HOME
unset RBXOPT
export RUBY_VERSION='ruby-2.1.5'
⋊> ~ rvm 2.1.5 do rvm env --path
/Users/username/.rvm/environments/ruby-2.1.5
⋊> ~ cat /Users/username/.rvm/environments/ruby-2.1.5
export PATH="/Users/username/.rvm/gems/ruby-2.1.5/bin:/Users/username/.rvm/gems/ruby-2.1.5@global/bin:/Users/username/.rvm/rubies/ruby-2.1.5/bin:$PATH"
export GEM_HOME='/Users/username/.rvm/gems/ruby-2.1.5'
export GEM_PATH='/Users/username/.rvm/gems/ruby-2.1.5:/Users/username/.rvm/gems/ruby-2.1.5@global'
export MY_RUBY_HOME='/Users/username/.rvm/rubies/ruby-2.1.5'
export IRBRC='/Users/username/.rvm/rubies/ruby-2.1.5/.irbrc'
unset MAGLEV_HOME
unset RBXOPT
export RUBY_VERSION='ruby-2.1.5'
⋊> ~ gem env
RubyGems Environment:
  - RUBYGEMS VERSION: 2.0.14.1
  - RUBY VERSION: 2.0.0 (2015-12-16 patchlevel 648) [universal.x86_64-darwin16]
  - INSTALLATION DIRECTORY: /Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2
  - RUBY EXECUTABLE: /System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/ruby
  - EXECUTABLE DIRECTORY: /Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2/bin
  - RUBYGEMS PLATFORMS:
    - ruby
    - universal-darwin-16
  - GEM PATHS:
     - /Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2
     - /Users/username/.rvm/gems/ruby-2.1.5@global
  - GEM CONFIGURATION:
     - :update_sources => true
     - :verbose => true
     - :backtrace => false
     - :bulk_threshold => 1000
  - REMOTE SOURCES:
     - https://rubygems.org/
⋊> ~ gem list
bigdecimal (1.2.0)
bundler (1.7.6)
bundler-unload (1.0.2)
executable-hooks (1.3.2)
gem-wrappers (1.2.7)
hirb (0.7.3)
io-console (0.4.2)
json (1.7.7)
minitest (4.3.2)
psych (2.0.0)
rake (0.9.6)
rdoc (4.0.0)
rubygems-bundler (1.4.4)
rvm (1.11.3.9)
test-unit (2.0.0.0)
⋊> ~ rvm gemset list

gemsets for ruby-2.1.5 (found in /Users/username/.rvm/gems/ruby-2.1.5)
   (default)
   global
=> ux-rails3.2
⋊> ~ rvm gemset dir
/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2
⋊> ~ ls /Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2/
bin
cache
environment
wrappers

⋊> ~ ls /Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2/bin/
⋊> ~

⋊> ~ ls /Users/username/.rvm/gems/ruby-2.1.5@global/bin/
bundle
bundler
executable-hooks-uninstaller
ruby_executable_hooks

⋊> ~ ls /Users/username/.rvm/gems/ruby-2.1.5/bin/
haml
ruby_executable_hooks
tilt
⋊> ~ echo $PATH
/usr/local/mysql/bin /usr/local/opt/coreutils/libexec/gnubin /usr/local/opt/findutils/bin /Users/username/bin /usr/local/mysql/bin /usr/local/opt/coreutils/libexec/gnubin /usr/local/opt/findutils/bin /Users/username/bin /usr/local/bin /usr/bin /bin /usr/sbin /sbin /usr/local/munki /opt/puppetlabs/bin /Applications/Wireshark.app/Contents/MacOS

⋊> ~ echo $GEM_PATH
/Users/username/.rvm/gems/ruby-2.1.5@ux-rails3.2:/Users/username/.rvm/gems/ruby-2.1.5@global
⋊> ~ cat .ruby-gemset .ruby-version
ux-rails3.2
ruby-2.1.5
⋊> ~ grep "rvm" .config/fish/config.fish  .bashrc .bash_profile .profile .zshrc .mkshrc .zlogin /etc/profile /etc/bashrc
.config/fish/config.fish:# Source: http://stackoverflow.com/questions/18276701/getting-warning-path-is-not-properly-set-up-when-doing-rvm-use-2-0-0-defaul
.config/fish/config.fish:rvm default;
.bashrc:# From running the command 'rvm get head ...'.  Needs to be at the bottom, so no other PATH entries can change the order.
.bashrc:# Source: http://stackoverflow.com/questions/18276701/getting-warning-path-is-not-properly-set-up-when-doing-rvm-use-2-0-0-defaul
.bashrc:# export PATH="$PATH:$HOME/.rvm/bin"
.bash_profile:# [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
.profile:# export PATH="$PATH:$HOME/.rvm/bin"
.profile:# [[ -s "$HOME/.rvm/scripts/rvm" ]] && source "$HOME/.rvm/scripts/rvm" # Load RVM into a shell session *as a function*
grep: .zshrc: No such file or directory
grep: .mkshrc: No such file or directory
grep: .zlogin: No such file or directory

⋊> ~ ls .gemrc
ls: cannot access '.gemrc': No such file or directory
⋊> ~ rvm -v; ruby -v; rails -v; echo "gem version "(gem -v); rake -V; bundle -v;
rvm 1.29.1 (latest) by Michal Papis, Piotr Kuczynski, Wayne E. Seguin [https://rvm.io/]
ruby 2.0.0p648 (2015-12-16 revision 53162) [universal.x86_64-darwin16]
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.
gem version 2.0.14.1
rake, version 0.9.6
fish: Unknown command 'bundle'

Mac 10.12.3

iTerm2 3.0.15

鱼,2.5.0 版

其他东西

【问题讨论】:

  • rvm 命令有问题。例如,参见github.com/fish-shell/fish-shell/issues/4039。我也无法理解你的问题。您说您正在将 rvm 与 fish 一起使用,但您的第一段谈到了 bash 并显示了与 fish 不兼容的代码。
  • 不是一个真正的答案,但我在鱼中使用 rbenv 没有问题
  • 我提供了一些上下文,但rvm.fish 函数在下面调用bash,节省了它的环境,然后“有点”将它应用到鱼的环境中,所以我想包括它信息,以及尽可能多的任何其他信息,以免影响本次问答的效率。

标签: ruby-on-rails ruby shell fish


【解决方案1】:

某种解决方案

到目前为止,我几乎无法通过以下方式进行更改:

grep -E '^rvm|^GEM_PATH|^GEM_HOME'

到:

grep -E '^rvm|^[^=]*PATH|^GEM_HOME'

不确定会导致什么副作用,但通过查看rvm.fish 代码,这似乎是缺失的。

相关的一边

旧版本中包含^[^=]*PATH\ 术语,就像我的系统以前的版本一样,也可以在这里随机找到:GitHub Gist - ToniRib/rvm.fish 那是为了转义管道 (|) 字符,但我不明白为什么在单引号内需要这样做。我的修复特别适用于没有反斜杠和简单的管道字符。

非功能替代

我也尝试了一个没有其他代码的补丁,例如这个:

and set -xg GEM_PATH (echo $GEM_PATH | sed 's/ /:/g')
and set -xg PATH (echo $GEM_PATH | sed 's/:/ /g') $MY_RUBY_HOME/bin $PATH

我继续向它添加行,但仍然看到各种错误。首先我需要ruby 的正确版本的“rubies”目录,然后用fish 的空格修改两个gem 路径,但我仍然遇到问题,所以将bashPATH 环境变量批发和让rvm 脚本自己工作是我迄今为止最好的。

【讨论】:

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