elastic beanstalk如何运行node js应用代码?
Posted
技术标签:
【中文标题】elastic beanstalk如何运行node js应用代码?【英文标题】:How does elastic beanstalk runs nodejs application code? 【发布时间】:2017-05-02 15:52:34 【问题描述】:我的应用程序在 localhost 中运行正常,但是当我将其提交到其他地方(如 aws(或 mcs))部署时,它无法识别 lib consign 加载路由所需的文件路径。
这是我期望运行的:
> portal@1.0.0 start /home/code/tmp/portal
> NODE_ENV=development nodemon index.js
[nodemon] 1.11.0
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: *.*
[nodemon] starting `node index.js`
consign v0.1.2 Initialized in app
+ ./controllers/homeController.js
+ ./routes/routes.js
Ok! Express is running...
下面的跟踪是在 aws 发生的,看到它无法识别 homeController.js 文件:
> portal@1.0.0 start /var/app/current
> NODE_ENV=development nodemon index.js
[nodemon] 1.11.0[39m
[nodemon] to restart at any time, enter `rs`[39m
[nodemon] watching: *.*[39m
[nodemon] starting `node index.js`[39m
consign v0.1.2 Initialized in app
+ ./current/
+ ./current/
/var/app/current/app/routes/routes.js:2
app.get('/', app.controllers.homeController.index.bind(app.controllers.homeController));
^
TypeError: Cannot read property 'homeController' of undefined
at Function.module.exports (/var/app/current/app/routes/routes.js:2:33)
at Consign.into (/var/app/current/node_modules/consign/lib/consign.js:239:17)
at Object.<anonymous> (/var/app/current/config/express.js:18:6)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object.<anonymous> (/var/app/current/index.js:1:80)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.runMain (module.js:604:10)
at run (bootstrap_node.js:394:7)
at startup (bootstrap_node.js:149:9)
at bootstrap_node.js:509:3
[31m[nodemon] app crashed - waiting for file changes before starting...[39m
知道为什么这个环境会弄乱这个应用程序路径吗? 或者aws如何运行这段代码?
【问题讨论】:
.... 显然app
在第 2 行的文件 /var/app/current/app/routes/routes.js 中未定义。从那里开始您的研究。
EBS 根据您的设置启动 EC2 服务器。您应该能够通过 ssh 进入服务器并从那里查看内容的方式对其进行配置。
虽然...您要部署服务器并使用 nodemon 作为启动/运行服务器的方式似乎有点奇怪。 nodemon 不是开发工具吗?
【参考方案1】:
该问题是由于 Consign lib 的 this 行为而发生的。 aws 使用的路径被错误地处理,因为它具有字符串“app”(/var/current/app/)。
我使用整个路径 (process.cwd() + '/app') 修复了它。
【讨论】:
以上是关于elastic beanstalk如何运行node js应用代码?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Amazon Elastic Beanstalk 在端口 80 上安全地运行 Node.js 服务器?
如何使用 AWS Elastic Beanstalk 部署 Node/Express 服务器
如何在 Elastic Beanstalk 实例上运行任意 npm 脚本
以 root 身份运行 Node.js 脚本的 Elastic beanstalk