【问题标题】:ElasticBeanstalk/NodeJS ruining my month; Need to force update or get hook workingElastic Beanstalk/Node JS 毁了我的一个月;需要强制更新或让钩子工作
【发布时间】:2026-01-17 11:35:01
【问题描述】:

我已经尝试了几个星期来为节点模块的某些问题创建一个解决方法,该问题给我带来了一些我仍然不明白的麻烦。我已经证明有效的简单解决方法是将文件“Match.js”重命名为“match.js”。

问题是因为这需要在 npm 启动之前发生,部署失败并恢复到旧版本。尽管启动序列失败,我要么需要能够强制 EB 采用我的新版本,要么在 npm start 之前创建一个重命名此文件的挂钩。但是,我很难确定该钩子应该何时触发:

files:
  "/opt/elasticbeanstalk/hooks/appdeploy/pre/21matchhack.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/usr/bin/env bash
      DIR_NAME="/tmp/deployment/application/node_modules/react-router/lib"
      FILE_NAME="Match.js"
      FILE_RENAME="match.js"
      cd $DIR_NAME
      if [ -f $FILE_NAME ]; then mv $FILE_NAME $FILE_RENAME; fi

据我了解,EB 将我的新应用程序版本解压缩到 /opt/elasticbeanstalk/hooks/appdeploy/pre/20unzip.sh 中的 /tmp/deployment/application

set -xe

EB_APP_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config  container -k app_staging_dir)
EB_APP_SOURCE_BUNDLE=$(/opt/elasticbeanstalk/bin/get-config  container -k source_bundle)

/usr/bin/unzip -o -d $EB_APP_STAGING_DIR $EB_APP_SOURCE_BUNDLE

为了让事情变得更加混乱和令人沮丧,下面的顺序似乎删除了下一个部署步骤中的临时文件夹/30config_clean.sh

set -xe

EB_CONFIG_STAGING_DIR=$(/opt/elasticbeanstalk/bin/get-config  container -k config_staging_dir)

rm -rf $EB_CONFIG_STAGING_DIR
mkdir -p $EB_CONFIG_STAGING_DIR

如果这个目录解压后在下一步被删除,我的新版本会去哪里?由于一个简单的大写文件名,我无法在 3 周内部署到生产环境。

【问题讨论】:

    标签: node.js amazon-elastic-beanstalk


    【解决方案1】:

    我认为你可以使用https://docs.npmjs.com/misc/scriptspreinstall 钩子。

    package.json 中的类似内容

    "scripts" : {
       ....
       "preinstall":"mv Match.js match.js"   
       ....
    
    }
    

    【讨论】:

    • 嗯,这是个好主意...但是,因为它是我需要修复的节点模块,所以我认为它应该是 postinstall 代替: "postinstall": "mv ./node_modules/ react-router/lib/Match.js ./node_modules/react-router/lib/match.js"
    • 不幸的是,EB 似乎没有运行 postinstall,所以我尝试了 prestart,但仍然没有运气:/ 感谢您的帮助,我会继续努力