【问题标题】:Amazon Elastic Beanstalk npm cant find package.jsonAmazon Elastic Beanstalk npm 找不到 package.json
【发布时间】:2016-05-25 02:11:40
【问题描述】:

我对亚马逊网络服务非常陌生,我正在尝试在他们的弹性 beanstalk 上设置一个 node.js 应用程序。我设置了实例并上传/部署了站点,但是当运行状况“正常”时,node.js 日志显示这重复了大约 30 次:

npm ERR! enoent ENOENT: no such file or directory, open '/var/app/current/package.json'
npm ERR! enoent This is most likely not a problem with npm itself
npm ERR! enoent and is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! Please include the following file with any support request:
npm ERR!     /var/app/current/npm-debug.log
npm ERR! Linux 4.1.13-19.31.amzn1.x86_64
npm ERR! argv "/opt/elasticbeanstalk/node-install/node-v4.2.3-linux-x64/bin/node" "/opt/elasticbeanstalk/node-install/node-v4.2.3-linux-x64/bin/npm" "start"
npm ERR! node v4.2.3
npm ERR! npm  v2.14.7
npm ERR! path /var/app/current/package.json
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open

问题是我的 package.json 确实存在,因为我使用 npm init 生成了一个。关于为什么找不到它的任何想法?这是package.json

{
    "name": "testwebsite",
    "version": "0.0.1",
    "scripts": {
        "start": "node server.js"
    },
    "dependencies": {
        "body-parser": "^1.13.3",
        "express": "^4.13.3",
        "express-session": "~1.0.0",
        "socket.io": "^1.3.7"
    },
    "description": "my website",
    "author": "Matt",
    "engines": {
        "node": ">=0.10.0"
    },
    "main": "server.js",
    "devDependencies": {},
    "license": "ISC"
}

【问题讨论】:

  • 你有没有想过这个问题?我遇到了同样的问题。

标签: node.js amazon-web-services amazon-ec2 amazon-elastic-beanstalk


【解决方案1】:

从官方 AWS 线程 [1] 看来(这是我的问题)您可能正在压缩顶级目录而不是压缩源本身。

例如,您可能将所有文件放在一个名为“Project”的文件夹中。与其压缩“Project”,不如压缩并上传“Project”的内容

[1]https://forums.aws.amazon.com/thread.jspa?messageID=476022

【讨论】:

  • 我起初对此不屑一顾,但后来意识到我做错了
  • AWS 的明确说明如下:aws.amazon.com/blogs/devops/… 我特别感谢git archive --format=zip HEAD > myapp.zip 命令。
【解决方案2】:

我在 AWS EB 上也遇到了这些奇怪的错误。我通常使用 CLI 进行部署。

尝试几件事。

  1. 确保 package.json 不在您的 .gitignore 文件中,以确保将其提交到您的存储库。 EB 使用 git 提交历史来决定要压缩和发送的内容。如果不包含它,则它不在 AWS 服务器上

  2. 我为 EC 使用了 t2.nano 实例(512MB 空间)选项,这似乎是个问题,因为我的 package.json 中有很多模块。不确定这是否是我的问题的根本问题,但是当我升级到至少有 1GB 空间的实例时,我的错误消息发生了变化。

希望对你有帮助

【讨论】:

    【解决方案3】:

    我遇到了与此相同或非常相似的问题,这是因为我的代码正在侦听自定义端口,而不是 Elastic Beanstalk 设置为环境变量的端口 (8081) .

    我在我的 app.jsserver.js 文件顶部附近的端口中修复了此设置,就在我创建 express 应用程序之后。例如:

    var app = express();
    app.set('port', (process.env.PORT || 5000)); // 5000 was my original port
    

    然后在app.listen方法中使用这个端口代替我自己自定义的端口号:

    app.listen(app.get('port'), function () {
        console.log('Server has started! http://localhost:' + app.get('port') + '/');
    });
    

    更多详情:http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/create_deploy_nodejs.container.html#nodejs-platform-proxy

    【讨论】:

    • 哇!谢谢!
    • 感谢这也有助于在 AWS Elastic Beanstalk 上托管 LoopbackJS。在这里,我不得不将 config.json 更改为端口 8081。有更好的方法可以通过使用单独的配置文件重载来管理不同的端口。 loopback.io/doc/en/lb3/Environment-specific-configuration.html 如果没有此更改,它会不断抛出 502 Bad Gateway 错误,因为默认端口设置为 3000
    【解决方案4】:

    我遇到了类似的情况,即弹性 beanstalk 部署在使用 eb cli 时失败。我意识到弹性 beanstalk 配置文件已无意中添加到我的 .gitignore 文件中,导致部署失败。

    【讨论】:

      【解决方案5】:

      我在压缩等方面遇到了问题。我建议使用 CodePipeline 并将其链接到您的 github 或 AWS codecommit。然后,跳过构建阶段,在部署阶段单击弹性 beantalk。

      您将不得不暂停该过程并打开一个新选项卡并转到 EB 并创建一个新环境。确保在此示例中单击 nodeJS。确保您选择“示例代码”,以便 AWS 可以使用他们的模板进行设置。 EB 完成构建后,您应该有一个指向可用模板的链接。

      然后您可以返回您的 CodePipeline 选项卡并单击 Elastic Beanstalk 进行部署,您应该会找到刚刚制作的 EB。

      我推荐这个过程,因为它会在你每次进行 git 更改时自动更新。这比压缩文件等要好。

      【讨论】:

        猜你喜欢
        • 2012-03-18
        • 2018-10-13
        • 2017-09-14
        • 2015-05-15
        • 2014-12-15
        • 1970-01-01
        • 2015-04-13
        • 2017-08-03
        • 2021-06-21
        相关资源
        最近更新 更多