我在Ubuntu 12.04上配置了一台新服务器,我开始使用RVM。
我已经在我的用户(我自己,而不是root用sudo)下安装了RVM,遵循Ryan Bigg's guide,没有以前系统范围内安装的Ruby。所以,我在/ usr / bin下没有任何Ruby。我的第一个任务是替换
中所有CGI脚本的shebang行!#/usr/bin/ruby
到
!#/usr/bin/env ruby
但是我的脚本没有在Apache下运行。在终端中,我可以运行它们(例如,通过键入./index.cgi
),但不能通过浏览器运行它们。相关说明:在用户中都是相同的,即Apache用户与登录终端的用户相同。通过php测试,我检查了RVM环境(.bashrc
的最后几行)未在Apache下加载。
我看到了this tip for running CGI scripts with RVM,它建议将特定版本Ruby的完整路径放在shebang行中。如果你有在不同版本的Ruby上运行的脚本,这将非常有用。但是该解决方案对我不起作用,因为我的脚本必须在不同的机器上运行,具有不同的用户和不同的路径。
对我有用的解决方案是在/ usr / bin下放置所需Ruby版本的符号链接:
sudo ln -s /home/apache_user/.rvm/rubies/ruby-1.8.7-p370/bin/ruby /usr/bin/ruby
但我想知道是否有更好的解决方案,因为我认为rvm --default use
优于sudo ln -s
。
我正在考虑:
PassEnv
指令传递的相关变量的名称。但我对此表示怀疑。 (为什么Apache会运行.bashrc
而不是csh
或ksh
等其他shell?)答案 0 :(得分:1)
您可以获取ruby环境,我不确定它是否足以在$HOME
中为apache提供它,或者如果您需要修改/etc/init.d/apache2
,但该行是:
source /path/to/rvm/environments/<name>
对于<name>
,您可以使用完整的ruby名称或别名
您可以使用以下命令创建别名:
rvm alias create veve 1.9.3-p125@my-project
安装在/home/app/.rvm
中的RVM允许您使用:
source /home/app/.rvm/environments/veve
在.bashrc
或/etc/init.d/apache2
(靠近顶部,低于shebang)。
答案 1 :(得分:0)
你总能做到
sudo ln -s /usr/local/rvm/rubies/default/bin/ruby /usr/bin/ruby
这会将rvm管理的Ruby的默认版本链接到/usr/bin/ruby
,您将永远不必做任何事情。设置并忘掉它。