Upgrade Phusion Passenger without reinstalling Nginx - ruby-on-rails

Is it possible to upgrade Phusion Passenger to a newer version when it is already running (with Nginx in my case)?
I installed Passenger 4.0.0.rc6 using passenger-install-nginx-module. My Nginx config now contains
passenger_root /usr/local/lib/ruby/gems/2.0.0/gems/passenger-4.0.rc6;
passenger_ruby /usr/local/bin/ruby;
Now I want to upgrade to Passenger 4.0.2. I can install the gem, but when I run passenger-install-nginx-module again, it tries to recompile and reinstall Nginx. (I thought it would be so clever to notice there is already a installed Nginx in the location I specify using --prefix)
I tried to manually change passenger_root to the new Passenger gem location but the I get the following error in the Nginx error log:
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)
Apparently the PassengerWatchdog is built when running passenger-install-nginx-module. I don't want to copy over PassengerWatchdog from the old gem because something might have changed.
So... what is the proper way to upgrade Passenger without recompiling and reinstalling Nginx (or Apache)?

#Wukerplank's comment put me on the right track. I checked the output when running passenger-install-nginx-module again and it says:
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.
The important part being that Nginx has to be recompiled to work with Passenger and that existing Nginx configurations are preserved.
So the right way to upgrade Passenger is to
install the new Passenger gem
execute passenger-install-nginx-module with exactly the same parameters as the first time (so the same Nginx version and modules are compiled, it's installed in the same directory etc.)
before installing, check that it says "Welcome to the Phusion Passenger Nginx module installer, v4.0.2." with the new version on top (4.0.2 in my case)
after Nginx is installed, change the passenger_root in your existing Nginx conf (path/to/nginx/conf/nginx.conf) to point to the new gem version (just replace the old version number with the new)
Restart Nginx
Profit

You cannot upgrade without recompiling Nginx. Full upgrade instructions can be found in the Phusion Passenger for Nginx manual. From the manual:
Nginx is a different from other web servers in that it does not support loadable modules. The only way to extend Nginx is to recompile it entirely from source. Since Phusion Passenger consists of some external executables plus an Nginx module, you must recompile Nginx when first installing Phusion Passenger, but also when upgrading Nginx itself or when upgrading the Phusion Passenger version.
Recompiling Nginx and the Phusion Passenger executables is what we will do in this step. The good news is that Phusion Passenger provides a tool to make this easy for you.
If you’ve already installed Nginx before, but without Phusion Passenger support, then you should uninstall it first. You don’t have to, because you can also install another Nginx with Phusion Passenger support, in parallel to the existing Nginx. We merely recommend uninstalling the existing in order to avoid user confusion, but the choice is yours.
If you had previously installed Nginx with Phusion Passenger support, and you are upgrading, then you don’t have to uninstall your existing Nginx first. Instead we’ll overwrite it this step. But it is important that you recompile Nginx with the configure parameters that you used last time.

Related

WARNING: Apache doesn't seem to be compiled with the 'prefork', 'worker' or 'event' MPM - Rails - Apache2 - Passenger

I am deploying a Rails application on an ubuntu server that has Apache2 installed, Rails installed, and I am trying to get the application deployed using Passenger.
Apache is installed just fine - I can view static files, reload it, start it, stop it, etc..
Rails is installed just fine - I can run the WeBrick server from the application root.
Now I want to use passenger to deploy.
When I run the following command:
passenger-install-apache2-module
It goes through some stuff then the following error comes up:
WARNING: Apache doesn't seem to be compiled with the 'prefork', 'worker' or 'event' MPM - Rails - Apache2 - Passenger
Basically, the Passenger installer tells me to recompile Apache with one of those MPM's or continue the installation process. I tried continue but it fails.
So, how do I got about fixing this issue?
You have two choices:
Fix Apache. How to fix this depends on how you installed Apache in the first place. If you installed Apache by installing it from source, then reinstall Apache by compiling it from source, but this time using the worker MPM. Refer to the Apache documentation to learn how to do that.
Don't use Apache. Instead, use Phusion Passenger + Nginx, or use Phusion Passenger Standalone.

Cant start nginx with passenger

i have nginx compiled with passenger, and i am trying to start it, i get the following error:
Starting nginx: nginx: [alert] Unable to start the Phusion Passenger watchdog because its executable (/home/trusteer/.rvm/gems/ruby-1.9.3-p392/gems/passenger-3.0.19/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)
I have the passenger gem installed, but the agents folder is indeed missing, what could be the reason for that ? I have this gem installed in other machine (i didnt install it there, its old), and i see that the gem include the agents directory, and its the same gem version (3.0.19).
what could be the reason for this issue ?
The directory structure has changed in Phusion Passenger 4. Most likely, your Nginx is compiled for Phusion Passenger 3. Nginx must be compiled for the same version of Phusion Passenger that the passenger_root points to.

How to remove nginx?

I installed nginx and passenger with the command:
rvmsudo passenger-install-nginx-module
Is there any nifty way to remove it easily?
nginx should be self-contained in /opt/nginx or whatever path you chose during install.
You can just remove the folder and everything should be ok.
Edit : Or remove passenger altogether : gem uninstall passenger
Passenger's documentation discusses uninstalling:
To uninstall Phusion Passenger, please first remove all Phusion Passenger configuration directives from your web server configuration file(s). After you’ve done this, you need to remove the Phusion Passenger files.
If you installed Phusion Passenger through Homebrew, then run brew uninstall passenger.
If you installed Phusion Passenger via a Ruby gem, then run gem uninstall passenger (or, if you’re a Phusion Passenger Enterprise user, gem uninstall passenger-enterprise-server). You might have to run this as root.
If you installed Phusion Passenger via a source tarball, then remove the directory in which you placed the extracted Phusion Passenger files. This directory is the same as the one pointed to the by PassengerRoot/passenger_root configuration directive.
If you installed Phusion Passenger through APT or YUM, then use them to uninstall Phusion Passenger.
Nginx does not have to be recompiled after uninstalling Phusion Passenger. Altough Nginx will contain the Phusion Passenger Nginx module, the module will not do anything when all Phusion Passenger configuration directives are removed.
In other words, to disable Passenger just remove the configuration information from the nginx config file. At that point nginx will run without calling Passenger. The benefit is you don't have to reinstall nginx.

Can I add passenger support to a existed Nginx instead of rebuild one?

I have a server running with nginx serving two php websites, right now I want to make it serving a rails app, I've googled, but there no notes about add passenger support to a existed nginx, all of them are telling me run passenger-install-nginx-module to build a nginx.
Can I add passenger support to my nginx instead of rebuild it?
Thanks for any helps.
You still need to rebuild nginx. If you run passenger-install-nginx-module you will see this output:
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.
See Installing Passenger as a normal Nginx module for steps.
cd /path-to-nginx-source-dir
./configure --prefix=/opt/nginx \
--add-module=$(passenger-config --nginx-addon-dir) \
--add-module=/path-to-some-nginx-module
make
sudo make install
The value for /path-to-passenger-module can be obtained with the command:
passenger-config --nginx-addon-dir
There is no need to rebuild nginx if you use Phusion Passenger Standalone.
From Passenger's wiki:
"But I don't want to recompile Nginx. Are there alternatives?"
Yes. Use Phusion Passenger's Standalone mode. Phusion Passenger
Standalone is a standalone server. It does not extend Nginx so it does
not need to recompile Nginx. It will therefore work perfectly with
your existing Nginx installation.
When using Passenger Standalone, you are supposed to:
Start Passenger Standalone on a certain port or socket file.
Add reverse proxy rules to your Nginx configuration file, to forward requests to Passenger Standalone.
If you've ever used Unicorn and Puma, then using Passenger Standalone
will be very familiar: usage is almost the same.

Getting Phusion Passenger on nginx working in Fedora

I had nginx installed with yum. But I needed to install Phusion Passenger. I followed the guide on Passenger website and the command that installs nginx support actually compiled and installed another copy of nginx on my system with Passenger support. The default "service nginx start" for Fedora works with the initial yum installed nginx. If I need Passenger support I have to start nginx manually from /opt/nginx/sbin/nginx and it also uses a config file of its own. I would like to know if there was a cleaner or more proper way to get nginx and Phusion Passenger working on Fedora.
I've done this on Ubuntu Server and I wound up uninstalled the nginx package and letting Passenger install nginx it for me.
From what I understand of nginx, it doesn't support modules like Apache does. So there's no way to install just a passenger module. It has to be baked into a special patched version of nginx.

Resources