You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Amazon Linux 2 EB环境resque任务误加载开发环境配置报错排查

问题根因
  • Amazon Linux 2 版本的Elastic Beanstalk平台钩子(包括postdeploy钩子)运行时,默认不会继承你在EB控制台/配置中设置的环境变量,RACK_ENV、RAILS_ENV这类变量默认不存在,Rails会 fallback 到默认的development环境。
  • 你使用的su -s /bin/bash -c "..." webapp命令默认会重置所有非系统默认的环境变量,即便钩子脚本中存在相关变量,执行su后也会丢失。

报错中提到的cannot load such file -- listen符合开发环境的特征:listen gem通常放在Gemfile的development组,生产环境部署时不会安装,只有加载development环境配置时才会尝试加载这个gem。

解决方案

修改你的.platform/hooks/postdeploy/resque_starter.sh脚本,按以下逻辑调整:

  1. 先加载Elastic Beanstalk存储的环境变量文件,导出所有变量到当前运行环境
  2. 执行su命令时添加-p参数保留环境变量,同时在rake命令前显式声明RAILS_ENV=production、RACK_ENV=production双保险
  3. 提前创建resque的pid存储目录,避免因目录不存在导致启动失败

修改后的脚本参考:

#!/bin/bash
# 加载EB环境所有自定义变量
set -a
source /opt/elasticbeanstalk/deployment/env
set +a

# 创建pid目录并授权
mkdir -p /var/run/resque
chown webapp:webapp /var/run/resque

# 启动resque worker
su -p -s /bin/bash -c "PIDFILE=/var/run/resque/resque_1.pid BACKGROUND=yes TERM_CHILD=1 LOGGING=1 RAILS_ENV=production RACK_ENV=production /opt/rubies/ruby-2.6.8/bin/bundle exec /opt/rubies/ruby-2.6.8/bin/rake resque:work QUEUES=email" webapp
补充检查项
  • 注意你原命令中pid路径写的是/var/run/reqsque/,属于拼写错误,已在参考脚本中修正为resque,避免pid文件写入失败
  • 不需要调整Gemfile配置,只要正常加载production环境,就不会尝试加载listen gem

内容的提问来源于stack exchange,提问作者lei lei

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:24:03