【发布时间】:2025-11-27 06:10:01
【问题描述】:
所以我安装了 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-masked 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-version,在所有其他帐户上,以下代码:
echo $(cd $(dirname $0)/.. && pwd)
结果:
/correct/dir
但在 $account 中,结果是:
/
附录_2:
进一步的研究表明 $?正在用于检查退出代码,它们根本没有排队。当我通过执行测试 $account 中的退出代码时
rvm use $version >/dev/null; echo $?
返回0,表示一切正常。
当我编辑脚本并强制它回显 $?使用后
rvm use $dynamically_acquired_version >/dev/null
它返回 1,这让我怀疑脚本是作为不同的 $account 运行的。我什至检查了 $version = $dynamically_acquired_version 是否相同。
附录_3:
通过在脚本开头注入以下内容来证实我的怀疑:
if [ -z "$USER" ]; then
echo "USER IS NULL"
fi
用户改变了,实际上甚至没有定义,我安装 RVM 的方式是 rvm 组中只有 root 和 $account。希望事情很快就会好起来。
当更多结果出现时,我会进一步更新,如果有人遇到这种情况,尽管在我挖掘的时候随意扔给我一根骨头。
【问题讨论】:
-
你的 RVM 安装在哪里?