Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RVM ruby版本与FreeBSD服务的错误交互_Ruby_Service_Rubygems_Rvm - Fatal编程技术网

RVM ruby版本与FreeBSD服务的错误交互

RVM ruby版本与FreeBSD服务的错误交互,ruby,service,rubygems,rvm,Ruby,Service,Rubygems,Rvm,所以我安装了RVM,将root和$account放入RVM组 $account将ruby 1.9.3-p551安装到RVM中,我将RVM设置为启用 rvm use 1.9.3 然后我检查一下 ruby -v ruby 1.9.3-p551 (2014-11-13 revision 48407) [x86_64-freebsd10.1] 这证实ruby已经从系统范围的2.1更改为rvm屏蔽的1.9.3 我尝试运行的服务是Snorby,如果这有助于打开任何人的眼睛,那么我就从它开始 servic

所以我安装了RVM,将root和$account放入RVM组

$account将ruby 1.9.3-p551安装到RVM中,我将RVM设置为启用

rvm use 1.9.3
然后我检查一下

ruby -v
ruby 1.9.3-p551 (2014-11-13 revision 48407) [x86_64-freebsd10.1]
这证实ruby已经从系统范围的2.1更改为rvm屏蔽的1.9.3

我尝试运行的服务是Snorby,如果这有助于打开任何人的眼睛,那么我就从它开始

service snorby start
它对此作出答复

ruby1.9.3-p551 is not installed.
To install do: 'rvm install ruby-1.9.3-p551'
ruby1.9.3-p551 is not installed.
To install do: 'rvm install ruby-1.9.3-p551'
ruby1.9.3-p551 is not installed.
ruby: ruby-1.9.3-p551 not available via rvm (exit code 1)
如果我解释正确的话,ruby就是返回上一个错误的那个,这让我觉得有些脚本或者期望ruby-1.9.3-p551在一个环境变量中,而不是在一个环境变量中,或者当我试图运行一个服务脚本时,它是在另一个用户下运行的,因此需要添加到rvm组中

为了尝试并确认,我在几乎所有相关文件所在的目录之一中运行了grep:

grep -rnwl '/usr/local' -e "is not installed"
为了找到可能读取此错误的脚本,几乎所有返回的脚本都与ruby或rvm相关。我不确定下一步该怎么做,因为重新安装1.9.3并不能解决这个问题,我不想随意修改配置

附录1.1:

经过进一步研究,附录1的其余部分是错误信息,在脚本中$0将解析为正确的目录,因此两个帐户都正确解析为

/correct/directory
我将用斜体字标出附录1的其余部分,作为背景材料

我查看了服务脚本,发现它试图在错误的目录中读取我拥有的$account的.ruby版本,在所有其他帐户上,都有以下代码:

结果:

但在美元账户中,结果是:

增编2:

进一步的研究表明,美元?被用来检查出口代码,他们根本没有排队。当我在$account中测试退出代码时

rvm use $version >/dev/null; echo $?
它返回0,表示一切正常

当我编辑脚本并强制它回显$?使用后

rvm use $dynamically_acquired_version >/dev/null
它返回1,这使我怀疑脚本是作为另一个$account运行的。我甚至检查了$version=$dynamicy\u-acquired\u-version,它们是否相同

增编3:

我的怀疑通过在脚本开头注入以下内容得到证实:

if [ -z "$USER" ]; then
  echo "USER IS NULL"
fi
用户已更改,实际上甚至没有定义,我安装RVM的方式是RVM组中只有root和$account。希望事情很快就会明朗


当出现更多结果时,我将进一步更新此内容,如果有人发现此问题,尽管在我挖掘时请随意向我扔骨头。

您需要检查rvm是否正确加载到您的服务脚本中。将此命令放入脚本中

type rvm | head -1
它应该输出
rvm是一个函数
。如果没有,您需要正确加载rvm:

\# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then

  \# First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"

elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then

  \# Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"

else

  printf "ERROR: An RVM installation was not found.\n"

fi
如果绝对路径不适合您,请将
$HOME
更改为绝对路径。正确加载rvm后,您可以在脚本中进一步使用常规的
rvm use


请在此处查看详细信息:

你的RVM安装在哪里?谢谢你的帮助,我正在等着看我是否可以作为root安装,因为这是一个大的多用户系统。
if [ -z "$USER" ]; then
  echo "USER IS NULL"
fi
type rvm | head -1
\# Load RVM into a shell session *as a function*
if [[ -s "$HOME/.rvm/scripts/rvm" ]] ; then

  \# First try to load from a user install
  source "$HOME/.rvm/scripts/rvm"

elif [[ -s "/usr/local/rvm/scripts/rvm" ]] ; then

  \# Then try to load from a root install
  source "/usr/local/rvm/scripts/rvm"

else

  printf "ERROR: An RVM installation was not found.\n"

fi