2

我在 Ubuntu 12.04 上配置了一个新服务器,并开始使用 RVM。

我按照Ryan Bigg 的指南在我的用户下安装了 RVM(作为我自己,而不是使用 sudo 的 root) ,以前没有安装过系统范围的 Ruby。所以,我在 /usr/bin 下没有任何 Ruby。然后我的第一个任务是替换我所有 CGI 脚本的 shebang 行,从

!#/usr/bin/ruby

!#/usr/bin/env ruby

但是我的脚本没有在 Apache 下运行。在终端中,我可以运行它们(./index.cgi例如,通过键入),但不能通过浏览器运行。相关注意事项:在两者中,用户是相同的,即 Apache 用户与登录终端的用户相同。通过 php 测试,我检查了 RVM 环境(最后几行.bashrc)没有在 Apache 下加载。

我看到了这个使用 RVM 运行 CGI 脚本的提示,它建议将特定版本的 Ruby 的完整路径放在 shebang 行中。如果您有在不同版本的 Ruby 上运行的脚本,这将很有用。但是那个解决方案对我不起作用,因为我的脚本必须在不同的机器上运行,不同的用户和不同的路径。

对我有用的解决方案是将所需 Ruby 版本的符号链接放在 /usr/bin 下:

sudo ln -s /home/apache_user/.rvm/rubies/ruby-1.8.7-p370/bin/ruby /usr/bin/ruby

但我想知道是否有更好的解决方案,因为我想这rvm --default usesudo ln -s.

我在想:

  • 在启动时加载 RVM 环境(但我不知道如何实现);
  • 为每个 Web 请求加载 RVM 环境(这会降低性能,我不知道如何配置 Apache 来做到这一点);
  • 也许 RVM 环境已加载,我所要做的就是猜测要通过PassEnv指令传递的相关变量的名称。但我对此表示怀疑。(为什么 Apache 会运行.bashrc而不是另一个 shell,比如cshor ksh?)
4

2 回答 2

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

安装在其中的 RVM/home/app/.rvm将允许您使用:

source /home/app/.rvm/environments/veve

.bashrc/etc/init.d/apache2(就在顶部附近,在 shebang 下方)。

于 2012-08-17T23:23:57.250 回答
0

你总是可以的

sudo ln -s /usr/local/rvm/rubies/default/bin/ruby /usr/bin/ruby

这会将 rvm 管理的 Ruby 的默认版本链接到/usr/bin/ruby,您将永远不必做任何事情。设置它并忘记它。

于 2013-06-23T22:34:21.720 回答