在Ubuntu服务器上部署时节点应用程序错误
我一直在使用NodeJS,Express和MongoDB开发一个网站。当我在本地机器上运行时,该网站运行正常。但是,当我尝试通过在Ubuntu服务器实例(由Vultr托管)上运行node app.js
来部署它时,我收到以下错误:
/home/appuser/UMISC_Website/node_modules/bindings/bindings.js:119
throw e;
^
Error: /home/appuser/UMISC_Website/node_modules/node-expat/build/Release/node_expat.node: invalid ELF header
at Object.Module._extensions..node (internal/modules/cjs/loader.js:779:18)
at Module.load (internal/modules/cjs/loader.js:630:32)
at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
at Function.Module._load (internal/modules/cjs/loader.js:562:3)
at Module.require (internal/modules/cjs/loader.js:667:17)
at require (internal/modules/cjs/helpers.js:20:18)
at bindings (/home/appuser/UMISC_Website/node_modules/bindings/bindings.js:112:48)
at Object.<anonymous> (/home/appuser/UMISC_Website/node_modules/node-expat/lib/node-expat.js:4:32)
at Module._compile (internal/modules/cjs/loader.js:738:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:749:10)
at Module.load (internal/modules/cjs/loader.js:630:32)
at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
at Function.Module._load (internal/modules/cjs/loader.js:562:3)
at Module.require (internal/modules/cjs/loader.js:667:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/appuser/UMISC_Website/node_modules/xml2json/lib/xml2json.js:1:75)
有人可以帮我理解我做错了吗?
回答如下:当我在本地机器上运行时,该网站运行正常。但是,当我尝试通过在Ubuntu服务器实例(由Vultr托管)上运行节点app.js来部署它时,我收到以下错误:
.../node_expat.node: invalid ELF header
看起来服务器实例使用的是32位内核,并且您已尝试将64位node_expat.node
二进制文件部署到它。
更新:
file -L /home/appuser/UMISC_Website/node_modules/node-expat/build/Release/node_expat.node
Mach-O 64-bit x86_64 bundle
我的猜测很接近:你已经为Linux部署了64位MacOS二进制文件。
Linux不理解/不能运行MacOS二进制文件,所以不要这样做。您必须将NodeJS替换为为目标操作系统构建的NodeJS(即Linux x86_64版本)。
在Ubuntu服务器上部署时节点应用程序错误
我一直在使用NodeJS,Express和MongoDB开发一个网站。当我在本地机器上运行时,该网站运行正常。但是,当我尝试通过在Ubuntu服务器实例(由Vultr托管)上运行node app.js
来部署它时,我收到以下错误:
/home/appuser/UMISC_Website/node_modules/bindings/bindings.js:119
throw e;
^
Error: /home/appuser/UMISC_Website/node_modules/node-expat/build/Release/node_expat.node: invalid ELF header
at Object.Module._extensions..node (internal/modules/cjs/loader.js:779:18)
at Module.load (internal/modules/cjs/loader.js:630:32)
at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
at Function.Module._load (internal/modules/cjs/loader.js:562:3)
at Module.require (internal/modules/cjs/loader.js:667:17)
at require (internal/modules/cjs/helpers.js:20:18)
at bindings (/home/appuser/UMISC_Website/node_modules/bindings/bindings.js:112:48)
at Object.<anonymous> (/home/appuser/UMISC_Website/node_modules/node-expat/lib/node-expat.js:4:32)
at Module._compile (internal/modules/cjs/loader.js:738:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:749:10)
at Module.load (internal/modules/cjs/loader.js:630:32)
at tryModuleLoad (internal/modules/cjs/loader.js:570:12)
at Function.Module._load (internal/modules/cjs/loader.js:562:3)
at Module.require (internal/modules/cjs/loader.js:667:17)
at require (internal/modules/cjs/helpers.js:20:18)
at Object.<anonymous> (/home/appuser/UMISC_Website/node_modules/xml2json/lib/xml2json.js:1:75)
有人可以帮我理解我做错了吗?
回答如下:当我在本地机器上运行时,该网站运行正常。但是,当我尝试通过在Ubuntu服务器实例(由Vultr托管)上运行节点app.js来部署它时,我收到以下错误:
.../node_expat.node: invalid ELF header
看起来服务器实例使用的是32位内核,并且您已尝试将64位node_expat.node
二进制文件部署到它。
更新:
file -L /home/appuser/UMISC_Website/node_modules/node-expat/build/Release/node_expat.node
Mach-O 64-bit x86_64 bundle
我的猜测很接近:你已经为Linux部署了64位MacOS二进制文件。
Linux不理解/不能运行MacOS二进制文件,所以不要这样做。您必须将NodeJS替换为为目标操作系统构建的NodeJS(即Linux x86_64版本)。