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

如何并行启动Rails服务器与Webpack服务器并同时终止二者?

解决Rails开发服务器与Webpack服务器并行启动且可统一终止的问题

我完全懂你的痛点——直接用rails s & bin/webpack-dev-server这种方式后台运行进程,按下Ctrl+C时只有前台进程会终止,后台的进程还会留在系统里占着端口,每次都得手动查PID杀进程,实在麻烦。下面给你几个靠谱的解决方案,尤其是适合用Yarn脚本统一管理的方法:

推荐方案:使用concurrently工具

concurrently是专门用来并行运行多个命令的工具,它能统一处理进程信号,当你按下Ctrl+C时,会自动终止所有启动的子进程,完美解决残留问题。

步骤1:安装依赖

在项目根目录下执行命令,把concurrently添加为开发依赖:

yarn add concurrently --dev

步骤2:配置Yarn脚本

打开项目根目录的package.json,在scripts字段里添加start命令:

"scripts": {
  "start": "concurrently \"rails s\" \"bin/webpack-dev-server\""
}

步骤3:启动服务

现在只需要在终端执行这条命令,就能同时启动两个服务器:

yarn start

当你按下Ctrl+C时,concurrently会向Rails和Webpack的进程都发送终止信号,不会有任何残留进程占用端口。

备选方案:使用foreman(适合更复杂的进程管理)

如果你需要管理更多进程,或者习惯用Procfile配置,可以试试foreman:

  1. 安装foreman:gem install foreman
  2. 在项目根目录创建Procfile文件,内容如下:
web: rails s
webpack: bin/webpack-dev-server
  1. 启动服务:foreman start
    同样,按下Ctrl+C时,foreman会终止所有进程。

为什么直接用&会有问题?

当你用command &把进程放到后台时,这个进程会脱离当前终端的进程组,当你按下Ctrl+C发送SIGINT信号时,只有前台进程组里的进程会收到信号并终止,后台进程不会收到,所以就会残留下来占用端口。而concurrently或foreman会把所有子进程纳入同一个进程组,统一处理终止信号,避免了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:47:38