Nginx – How to fix NginX/Phusion/Passenger “zsh:1: no such file or directory: passenger/buildout/agents/SpawnPreparer”

nginxphusion-passenger

Hopefully this is the correct site to ask this question.

I've got a webservice I'm attempting to set up using NginX with Phusion Passenger riding a Ruby Sinatra application. The problem is that when I try to start the server and test the site, I get the following error:

zsh:1: no such file or directory: passenger/buildout/agents/SpawnPreparer

Now, I've been able to determine that SpawnPreparer is calling zsh, although, I'm not sure why. I don't even use zsh and I wasn't using it when I built the server. Nevertheless, what I'd like to know is if it's possible to configure passenger in the nginx.conf to use a different shell with which to spawn its processes? If so, how?

This is Phusion 4.0.14

Thanks!

Best Answer

When Phusion Passenger spawns an application, it does so by invoking the command $SHELL -lc '/path-to-passenger-root/buildout/agents/SpawnPreparer /path-to-passenger-root/helper-scripts/rack-loader.rb <SOME ARGUMENTS>'. It's described here: https://github.com/phusion/passenger/wiki/Debugging-application-startup-problems#the-spawning-process-explained. Here, $SHELL is the user's shell, as configured in the OS's user database (/etc/passwd). In your case, your user is setup with zsh as its shell. This is probably your OS's default setting.

Your error message indicates that it cannot execute the file passenger/buildout/agents/SpawnPreparer. In other words, Phusion Passenger thinks that /path-to-passenger equals passenger. This probably means that you set the incorrect value for the passenger_root directive, which dictates the proper value of /path-to-passenger.