7

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

4

4 回答 4

12

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

第二个是围绕Passenger 使用的Ruby 解释器创建一个包装器,并在此处记录(查找passenger_with_ruby)。要点是您创建(并在 Apache 配置中将 PassengerRuby 指向)/usr/bin/ruby_with_env,这是一个可执行文件,其中包括:

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

两者都有效;我认为,前一种方法不那么骇人听闻。

于 2008-09-17T08:54:05.643 回答
2

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

ENV['GEM_HOME'] = '/foo'

这将更改此进程内的环境变量。

于 2008-09-17T04:30:03.547 回答
2

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

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

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

于 2008-12-12T16:39:51.530 回答
1

我也遇到过这个问题。看起来,Passenger 没有传递使用SetEnvapache 指令设置的值——这很不幸。

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

于 2008-09-17T03:22:09.887 回答