Search code examples
node.jsexpresscpanelpassenger

Phusion Passenger on cPanel (Apache) "Cannot GET" (Express); the same code works on localhost and Heroku


My Nodejs app works well on localhost & Heroku, but fails on my cPanel hosting with Phusion Passenger (CloudLinux).

When I look in the node_modules folder, express is there.

Does anyone know how to get my app up and running?

This is the error log:

App 1268608 output: internal/modules/cjs/loader.js:775
App 1268608 output:     throw err;
App 1268608 output:     ^
App 1268608 output: 
App 1268608 output: Error: Cannot find module 'express'
App 1268608 output: Require stack:
App 1268608 output: - /home/futur/w2/server.js
App 1268608 output: - /opt/passenger-5.3.7-9.el7.cloudlinux/src/helper-scripts/node-loader.js
App 1268608 output:     at Function.Module._resolveFilename (internal/modules/cjs/loader.js:772:15)
App 1268608 output:     at Function.Module._load (internal/modules/cjs/loader.js:677:27)
App 1268608 output:     at Module.require (internal/modules/cjs/loader.js:830:19)
App 1268608 output:     at Module.require (/opt/passenger-5.3.7-9.el7.cloudlinux/src/helper-scripts/node-loader.js:80:25)
App 1268608 output:     at require (internal/modules/cjs/helpers.js:68:18)
App 1268608 output:     at Object.<anonymous> (/home/futur/w2/server.js:1:17)
App 1268608 output:     at Module._compile (internal/modules/cjs/loader.js:936:30)
App 1268608 output:     at Object.Module._extensions..js (internal/modules/cjs/loader.js:947:10)
App 1268608 output:     at Module.load (internal/modules/cjs/loader.js:790:32)
App 1268608 output:     at Function.Module._load (internal/modules/cjs/loader.js:703:12) {
App 1268608 output:   code: 'MODULE_NOT_FOUND',
App 1268608 output:   requireStack: [
App 1268608 output:     '/home/futur/w2/server.js',
App 1268608 output:     '/opt/passenger-5.3.7-9.el7.cloudlinux/src/helper-scripts/node-loader.js'
App 1268608 output:   ]
App 1268608 output: }
App 1271723 output: app is running on port 3002
App 1400344 output: app is running on port 3002 ```

Solution

  • I solved the issue - the problem with Phusion Passenger is that the root path isn't '/', it's '/yourAppURL' (in my case '/w2' (https://futuristicon.com/w2/).

    Really weird, since root is '/' with all other environments (as I mentioned in the question - app worked flawlessly on Heroku & localhost env).

    Important: routes others than root won't work out of the box. You will have to, for some reason, manually create an empty folder named the same as your route parameter, inside the folder in which your .htaccess lives.

    For example, if you wanted to make a route like this:

    app.get('/w2/signup', (req, res) => {
    res.send('Signup!')
    })  
    

    You would have to create a new folder named signup (not the application root folder, but the folder of your app's URL)