2008-09-17 94 views
7

我已经在开发中设置了Passenger(Mac OS X),它的工作原理完美无瑕。后来唯一的问题是:现在我有一个自定义的GEM_HOME路径和安装在"/usr/local"中的ImageMagick二进制文件。我可以将它们放入其中一个源代码的shell rc文件中,这样可以解决从控制台产生的进程的环境变量;但是Passenger呢?以这种方式运行时,相同的应用程序无法找到我的宝石。为Phusion乘客应用程序设置环境变量

+3

更新:自乘客2.2.3以来,“支持SetEnv指令:http://blog.phusion.nl/2009/06/17/phusion-passenger-223-released-bug-fix-edition/正确。 Ben的答案很好,但现在不需要再使用它了(在大多数情况下)。 – mislav 2009-06-30 17:25:15

回答

12

我知道两种解决方案。第一个(记录为here)基本上与manveru的 - 直接在您的代码中设置ENV变量相同。

第二个是为Passenger使用的Ruby解释器创建一个包装,并记录here(查找passenger_with_ruby)。要点是,你创建(和你的Apache配置指向PassengerRuby于)在/ usr/bin中/ ruby​​_with_env,可执行文件包括:

#!/bin/bash 
export ENV_VAR=value 
/usr/bin/ruby $* 

两个工作;我认为,前一种方法有点不那么骇人听闻。

+0

为了防止其他人遇到同样的问题,我不得不:`chmod + x/usr/bin/ruby​​_with_env`。 – 2011-10-02 16:53:40

1

我也遇到过这个问题。它appears乘客不通过值设置使用SetEnv apache指令 - 这是不幸的。

也许有可能设置环境变量在你的environment.rb或的boot.rb(假设你在谈论一个Rails应用程序,我不熟悉的机架上,但据推测它具有类似的功能)

2

在你做任何需要(特别是需要RubyGems的前),你可以这样做:

ENV['GEM_HOME'] = '/foo' 

这将改变这一进程中的环境变量。

2

我发现如果你在计算机上有root权限,那么你可以在“envvars”文件中设置必要的环境变量,apachectl将在启动Apache之前执行这个文件。

envvars通常位于apachectl所在的同一目录中 - 在Mac OS X上,它位于/ usr/sbin中。如果找不到它,请查看apachectl脚本的源代码。

更改envvars文件重新启动Apache与“apachectl -k restart”后。