如何加载用户的.bashrc的RVM部分来运行Apache下的Ruby CGI脚本?

时间:2012-08-17 17:49:23

标签: ruby apache cgi rvm

我在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

我正在考虑:

  • 在启动时加载RVM环境(但我不知道如何实现);
  • 为每个Web请求加载RVM环境(这会降低性能,我不知道如何配置Apache来执行此操作);
  • 可能已加载RVM环境,我必须做的就是猜测要通过PassEnv指令传递的相关变量的名称。但我对此表示怀疑。 (为什么Apache会运行.bashrc而不是cshksh等其他shell?)

2 个答案:

答案 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,您将永远不必做任何事情。设置并忘掉它。