8

是否可以在 Phusion Passenger 已经运行时将其升级到较新的版本(在我的情况下使用 Nginx)?

我使用passenger-install-nginx-module. 我的 Nginx 配置现在包含

passenger_root /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.rc6;
passenger_ruby /usr/local/bin/ruby;

现在我想升级到Passenger 4.0.2。我可以安装 gem,但是当我passenger-install-nginx-module再次运行时,它会尝试重新编译并重新安装 Nginx。(我认为在我使用指定的位置注意到已经安装了 Nginx 会很聪明--prefix

我尝试手动更改passenger_root为新的Passenger gem 位置,但在Nginx 错误日志中出现以下错误:

2013/05/12 12:30:13 [alert] 14298#0: Unable to start the Phusion Passenger watchdog because its executable (/usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.2/agents/PassengerWatchdog) does not exist. This probably means that your Phusion Passenger installation is broken or incomplete, or that your 'passenger_root' directive is set to the wrong value. Please reinstall Phusion Passenger or fix your 'passenger_root' directive, whichever is applicable. (-1: Unknown error)

显然PassengerWatchdog是在运行时构建的passenger-install-nginx-module。我不想PassengerWatchdog从旧的 gem 复制过来,因为有些东西可能已经改变了。

那么......在不重新编译和重新安装Nginx(或Apache)的情况下升级Passenger的正确方法是什么?

4

2 回答 2

17

@Wukerplank 的评论让我走上了正轨。我passenger-install-nginx-module再次运行时检查了输出,它说:

Nginx doesn't support loadable modules such as some other web servers do,
so in order to install Nginx with Passenger support, it must be recompiled.

Do you want this installer to download, compile and install Nginx for you?

 1. Yes: download, compile and install Nginx for me. (recommended)
    The easiest way to get started. A stock Nginx 1.4.1 with Passenger
    support, but with no other additional third party modules, will be
    installed for you to a directory of your choice.

 2. No: I want to customize my Nginx installation. (for advanced users)
    Choose this if you want to compile Nginx with more third party modules
    besides Passenger, or if you need to pass additional options to Nginx's
    'configure' script. This installer will  1) ask you for the location of
    the Nginx source code,  2) run the 'configure' script according to your
    instructions, and  3) run 'make install'.

Whichever you choose, if you already have an existing Nginx configuration file,
then it will be preserved.

重要的部分是 Nginx 必须重新编译才能与Passenger一起使用,并且保留现有的 Nginx 配置。

所以升级Passenger的正确方法是

  1. 安装新的Passenger gem
  2. passenger-install-nginx-module使用与第一次完全相同的参数执行(因此编译相同的 Nginx 版本和模块,安装在同一目录等)
  3. 在安装之前,检查它是否显示“欢迎使用 Phusion Passenger Nginx 模块安装程序,v4.0.2。” 新版本在上面(在我的例子中是 4.0.2)
  4. 安装 Nginx 后,passenger_root将现有 Nginx conf (path/to/nginx/conf/nginx.conf) 中的更改为指向新的 gem 版本(只需将旧版本号替换为新版本)
  5. 重启 Nginx
  6. 利润
于 2013-05-12T19:21:03.267 回答
5

不重新编译 Nginx 就无法升级。完整的升级说明可以在Phusion Passenger for Nginx 手册中找到。从手册:

Nginx 与其他 Web 服务器的不同之处在于它不支持可加载模块。扩展 Nginx 的唯一方法是完全从源代码重新编译它。由于 Phusion Passenger 由一些外部可执行文件和 Nginx 模块组成,因此在首次安装 Phusion Passenger 时必须重新编译 Nginx,升级 Nginx 本身或升级 Phusion Passenger 版本时也必须重新编译 Nginx。

重新编译 Nginx 和 Phusion Passenger 可执行文件是我们在这一步中要做的。好消息是 Phusion Passenger 提供了一个工具,让您轻松完成这项工作。

如果你之前已经安装过 Nginx,但没有 Phusion Passenger 支持,那么你应该先卸载它。您不必这样做,因为您还可以安装另一个支持 Phusion Passenger 的 Nginx,与现有 Nginx 并行。我们只是建议卸载现有的以避免用户混淆,但选择权在您手中。

如果您之前安装了支持 Phusion Passenger 的 Nginx,并且正在升级,那么您不必先卸载现有的 Nginx。相反,我们将在这一步覆盖它。但重要的是您使用上次使用的配置参数重新编译 Nginx。

于 2013-05-14T10:55:11.353 回答