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