我在 Ubuntu 12.04 上配置了一个新服务器,并开始使用 RVM。
我已经按照我的用户(作为我自己,而不是使用 sudo 作为 root)安装了 RVM瑞安·比格的指南 http://ryanbigg.com/2010/12/ubuntu-ruby-rvm-rails-and-you/,以前没有在系统范围内安装 Ruby。所以,我在 /usr/bin 下没有任何 Ruby。我的第一个任务是替换我所有 CGI 脚本的 shebang 行,从
!#/usr/bin/ruby
to
!#/usr/bin/env ruby
但是我的脚本没有在 Apache 下运行。在终端中我可以运行它们(通过输入./index.cgi
,例如),但不是通过浏览器。相关说明:两者的用户是相同的,即 Apache 用户与登录终端的用户相同。通过php测试,我检查了RVM环境(最后几行.bashrc
)未在 Apache 下加载。
I saw 使用 RVM 运行 CGI 脚本的技巧 http://www.lamolabs.org/blog/5397/how-to-use-rvm-installs-of-ruby-in-shell-cgi-scripts/,建议将特定版本的 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
而不是另一个像这样的外壳csh
or ksh
?)
你可以获取 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
in .bashrc
or /etc/init.d/apache2
(就在顶部附近,below shebang)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)