为Phusion Passenger应用程序设置环境变量

时间:2008-09-17 02:56:14

标签: ruby-on-rails ruby passenger env

我在开发中设置了Passenger(Mac OS X),它运行完美。唯一的问题出现在后面:现在我在GEM_HOME中安装了自定义"/usr/local"路径和ImageMagick二进制文件。我可以把它们放在一个获取源代码的shell rc文件中,这解决了从控制台生成的进程的环境变量;但乘客怎么样?以这种方式运行时,同一个应用程序无法找到我的宝石。

4 个答案:

答案 0 :(得分: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 $*

两者都有效;我认为,前一种做法不那么苛刻。

答案 1 :(得分:2)

在你做任何要求之前(特别是在要求rubygems之前)你可以这样做:

ENV['GEM_HOME'] = '/foo'

这将改变此过程中的环境变量。

答案 2 :(得分:2)

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

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

更改envvars文件后,使用“apachectl -k restart”重启Apache。

答案 3 :(得分:1)

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

也许可以在environment.rb或boot.rb中设置环境变量(假设您正在谈论Rails应用程序;我不熟悉Rack,但可能它具有类似的功能)