Phusion Passenger 4忽略了setenv GEM_PATH

时间:2014-03-16 22:29:05

标签: ruby-on-rails apache passenger setenv

我想(最后)将我的Passenger安装从版本3更新到4,但是我在设置GEM_PATH env变量时遇到了一些问题,就像我对v3一样。

在我的Apache配置中,我有以下一行,告诉乘客在哪里找到我的rvm gemsets(注意@my_set):

SetEnv GEM_PATH "/.../.rvm/gems/ruby-1.9.3-p448@my_set:/.../.rvm/gems/ruby-1.9.3-p448@global"

这适用于Passenger v3。但是,当我切换到版本4时,应用程序无法加载,调试视图显示以下内容:

GEM_PATH = /.../.rvm/gems/ruby-1.9.3:/.../.rvm/gems/ruby-1.9.3-p448@global

这似乎是系统默认设置。

使用setenv设置任何其他ENV变量。例如,我添加了行

SetEnv TEST_VAR "FOO"

到我的apache配置,它在乘客调试视图中显示出来,没有任何障碍:

TEST_VAR = "FOO"

感觉Passenger专门以某种方式覆盖了我的GEM_PATH环境变量。据我所知,在文档中没有提到这一点。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

你可以通过其他方式做到这一点。由于您在版本3或4中使用Rails与捆绑器,因此您可以使捆绑器隔离所有用于生产服务器上的应用程序的gem,并将它们的副本放入应用程序文件夹中。要做到这个问题:

bundle install --deployment

您可以在Bundler Deployment documentation

中详细了解相关信息

你也可以阅读有关如何使用gemsets制作RVM work with Passenger 3(它可以转移到4),但在我看来,使用捆绑器部署是更好的选择。

答案 1 :(得分:-1)

我不确定它会对你有所帮助,但是,考虑到PassengerRuby和PassengerDefaultRuby配置,而不是考虑GEM_PATH。 http://www.modrails.com/documentation/Users%20guide%20Apache.html#PassengerRuby

Passenger肯定会尝试使用你系统的默认ruby,你必须告诉它使用好的,也就是说用yVM安装的那个。要在控制台中找到正确的红宝石,请确保您使用的红宝石是您要使用的红宝石,您可以输入

ruby -v
which ruby
rvm list
rvm use [the one you want to use]

一旦您确定在此终端会话中,您正在使用的红宝石是您希望乘客使用的,请输入此命令

passenger-config about ruby-command

然后您应该看到如下行:

To use in Apache: PassengerRuby /home/tommyjam/.rvm/gems/ruby-2.1.1/wrappers/ruby

复制有趣的信息并将其粘贴在好的位置,也就是说,就像乘客说的那样

PassengerRuby可能随处可见:全局服务器配置,<VirtualHost><Directory><Location>和.htaccess,如果启用了AllowOverride选项

您也可以将PassengerRuby更改为PassengerDefaultRuby并将其置于全局服务器配置中,我想在/etc/apache2/mods-available/passenger.conf中

希望它会对你有所帮助:)。