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

运行 Node 应用程序的 Elastic Beanstalk Docker 容器提前退出

AWS Elastic Beanstalk - 如何在同一个 ec2 实例中运行 php 和 nodejs