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

Rails 7下配置systemd运行jsbundling-rails监听服务异常问题咨询

问题解决方法

根因分析

  • esbuild 默认的 --watch 监听模式存在交互环境依赖:当检测到标准输入(STDIN)被关闭时,会在单次构建完成后自动退出
  • systemd 运行后台服务时默认不会分配 TTY,且默认将 StandardInput 设为 null,因此触发了 esbuild 的自动退出逻辑,表现为进程直接以退出码0终止

解决方案

推荐最稳妥的修改方案,无需调整systemd默认配置:

  1. 可选方案一(推荐):修改项目根目录下的 package.json 文件,找到 scripts 段的 build 配置,给 esbuild 命令添加 --watch=forever 参数,修改后示例:
{
  "scripts": {
    "build": "esbuild app/javascript/*.* --bundle --outdir=app/assets/builds --watch=forever"
  }
}
  1. 可选方案二(无需修改项目配置):直接调整systemd服务的ExecStart配置,直接传入参数:
ExecStart=/usr/local/bin/yarn --verbose build --watch=forever
  1. 可选方案三(不推荐):如果不想修改esbuild参数,也可以调整systemd服务配置,分配伪TTY模拟交互环境,在Service段添加如下配置:
StandardInput=tty
TTYPath=/dev/tty

配置修改完成后,执行以下命令生效:

sudo systemctl daemon-reload
sudo systemctl restart rails_app_js_watcher.service

验证

执行systemctl status rails_app_js_watcher.service查看服务状态,若显示active (running)即为配置生效,esbuild已进入持久监听模式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 05:36:02