关于Rails上的ruby:设置Phusion乘客应用程序的环境变量

关于Rails上的ruby:设置Phusion乘客应用程序的环境变量

Setting environment variables for Phusion Passenger applications

我已经在开发中设置了Passenger(Mac OS X),它可以完美运行。唯一的问题稍后出现:现在我有一个自定义的GEM_HOME路径,并且在"/usr/local"中安装了ImageMagick二进制文件。我可以将它们放在获取源代码的外壳rc文件之一中,这可以解决从控制台生成的进程的环境变量。但是乘客呢?以这种方式运行时,同一应用程序找不到我的ruby。


我知道两种解决方案。第一个(此处记录)与manveru'sa€"完全相同,直接在您的代码中设置ENV变量。

第二个方法是围绕Passenger使用的Ruby解释器创建一个package,并在此处进行记录(查找passenger_with_ruby)。要点是您创建/ usr / bin / ruby??_with_env(并在Apache配置中将PassengerRuby指向),该可执行文件由以下内容组成:

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

两项工作;我认为,前一种方法不太强硬。


我发现,如果您在计算机上具有root特权,则可以在" envvars"文件中设置必要的环境变量,并且apachectl将在启动Apache之前执行此文件。

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

更改envvars文件后,使用" apachectl -k restart"重新启动Apache。


在您进行任何要求之前(尤其是在需要ruby之前),您可以执行以下操作:

1
ENV['GEM_HOME'] = '/foo'

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


我也遇到了这个问题。看来,Passenger没有通过使用SetEnv apache指令设置的值-不幸的是。

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


推荐阅读