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