如何让 /usr/bin/env ruby 指向正确的 Ruby 环境?

所以我正在编写一个CGI Ruby脚本,并在脚本文件的顶部添加了以下内容:
#!/usr/bin/env ruby
 require 'rubygems'
 require 'action_pack'
 require 'cgi'

几个小时过去了,不断出现"usr/bin/env: ruby: No such file or directory"错误并进行谷歌搜索后,我通过执行sudo apt-get purge ruby rubygems卸载了系统中的ruby 1.8.7(我还通过rvm安装了1.9.3版本)。但是我仍然遇到同样的错误。当我输入"which ruby"时,返回的结果是/home/homeuser/.rvm/rubies/ruby-1.9.3-p194/bin/ruby。有人知道如何解决这个问题吗?
以下是echo $PATH的结果:
/home/homeuser/.rvm/gems/ruby-1.9.3-p194@rsoc326/bin:/home/homeuser/.rvm/gems/ruby-1.9.3-p194@global/bin:/home/homeuser/.rvm/rubies/ruby-1.9.3-p194/bin:/home/homeuser/.rvm/bin:/var/lib/gems/1.8/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/home/homeuser/.rvm/bin

我在我的台式电脑上也有同样的设置,但没有遇到相同的问题。
2个回答

/usr/bin/env ruby 应该指向 RVM 中的 Ruby。

但让我们检查一下您的设置。

检查您的~/.profile文件,它应该包含以下两行内容:
export PATH="$PATH:$HOME/.rvm/bin" # 将RVM添加到路径以进行脚本编写
[[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm"  # 这将加载RVM

其次,检查您安装的Ruby版本:
rvm list
这应该输出类似以下内容:
rvm rubies

=* ruby-1.9.3-p286 [ x86_64 ]

# => - 当前版本
# =* - 当前版本和默认版本
#  * - 默认版本
如果不是这样,请尝试运行rvm use 1.9.3 --default 当以root身份运行脚本时,请确保使用rvmsudo ./yourscript.rb而不是sudo ./yourscript.rb,这可以确保设置正确的$PATH 请告诉我上述三个步骤的结果。

我把#!/usr/bin/env ruby改成了#!/home/homeuser/.rvm/bin/ruby。所以我猜这意味着/usr/bin/env指向系统的ruby,而不是rvm的任何一个ruby版本。
问题解决了,虽然能够使用#!/usr/bin/env ruby会更好,这样我就可以将我的ruby脚本从台式机移动到笔记本电脑上,而无需更改#!/home/homeuser/.rvm/bin/ruby(因为由于用户名不同,我的台式机上路径略有不同)。也许可以使用符号链接来解决这个问题?