2008-09-17 92 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」後。