cPanel (Apache) 上的 Phusion Passenger "Cannot GET" (Express);相同的代码适用于 localhost 和 Heroku
Phusion Passenger on cPanel (Apache) "Cannot GET" (Express); the same code works on localhost and Heroku
我的 Nodejs 应用程序在本地主机和 Heroku 上运行良好,但在使用 Phusion Passenger (CloudLinux) 托管的 cPanel 上运行失败。
当我查看 node_modules 文件夹时,express 就在那里。
有谁知道如何启动我的应用程序 运行?
这是错误日志:
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 ```
我解决了这个问题 - Phusion Passenger 的问题是根路径不是“/”,而是“/yourAppURL”(在我的例子中是“/w2”(https://futuristicon.com/w2/).
真的很奇怪,因为 root 与所有其他环境都是“/”(正如我在问题中提到的 - 应用程序在 Heroku 和 localhost env 上完美运行)。
重要提示:除 root 之外的其他路由无法开箱即用。由于某种原因,您必须在 .htaccess 所在的文件夹中手动创建一个与路由参数同名的空文件夹。
例如,如果您想制作这样的路线:
app.get('/w2/signup', (req, res) => {
res.send('Signup!')
})
您必须创建一个名为 signup 的新文件夹(不是应用程序根文件夹,而是您的应用 URL 的文件夹)
我的 Nodejs 应用程序在本地主机和 Heroku 上运行良好,但在使用 Phusion Passenger (CloudLinux) 托管的 cPanel 上运行失败。
当我查看 node_modules 文件夹时,express 就在那里。
有谁知道如何启动我的应用程序 运行?
这是错误日志:
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 ```
我解决了这个问题 - Phusion Passenger 的问题是根路径不是“/”,而是“/yourAppURL”(在我的例子中是“/w2”(https://futuristicon.com/w2/).
真的很奇怪,因为 root 与所有其他环境都是“/”(正如我在问题中提到的 - 应用程序在 Heroku 和 localhost env 上完美运行)。
重要提示:除 root 之外的其他路由无法开箱即用。由于某种原因,您必须在 .htaccess 所在的文件夹中手动创建一个与路由参数同名的空文件夹。
例如,如果您想制作这样的路线:
app.get('/w2/signup', (req, res) => {
res.send('Signup!')
})
您必须创建一个名为 signup 的新文件夹(不是应用程序根文件夹,而是您的应用 URL 的文件夹)