2

我想(最终)将我的乘客安装从版本 3 更新到 4,但是我在设置 GEM_PATH 环境变量时遇到了一些问题,就像我在 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"

这适用于乘客 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 环境变量。据我所知,文档中没有提到这一点。任何想法将不胜感激。

4

2 回答 2

1

你可以用另一种方式做到这一点。由于您在版本 3 或 4 中使用带有 bundler 的 Rails,您可以让 bundler 隔离生产服务器上的应用程序的所有 gem,将它们的副本放入应用程序文件夹中。要做到这一点:

bundle install --deployment

您可以在Bundler 部署文档中了解更多信息

您还可以阅读如何使用 gemsets 使RVM 与乘客 3(它可能转移到 4)一起工作,但在我看来,使用捆绑器部署是更好的选择。

于 2014-03-26T01:19:31.763 回答
-1

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

乘客肯定是在尝试使用您系统的默认 ruby​​,您必须告诉它使用好的,即安装了 RVM 的 yuo。要找到正确的 ruby​​,在您的控制台中,确保您使用的 ruby​​ 是您要使用的,您可以输入

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 可能出现在任何地方:在全局服务器配置中,如果启用 AllowOverride Options,则在in <VirtualHost>、 in <Directory>、 in和 .htaccess 中<Location>

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

希望它会帮助你:)

于 2014-03-22T09:45:44.913 回答