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

如何在Heroku上同时运行Scrapyd与Flask应用?

解决Heroku上同时运行Flask(Gunicorn)和Scrapyd的问题

嘿,我刚帮几个朋友搞定过类似的Heroku部署问题,给你一步步拆解怎么弄!核心问题是Heroku默认每个dyno只跑一个进程,但我们可以用Procfile定义多个进程,让Flask和Scrapyd在同一个dyno里并肩工作。

第一步:更新你的Procfile

Heroku靠根目录下的Procfile来管理启动命令,原来你可能只有启动Flask的命令,现在要加上Scrapyd的启动项。

打开你的Procfile,改成这样:

web: gunicorn your_flask_app_module:app
scrapyd: scrapyd
  • web进程是处理外部HTTP请求的Flask应用(记得把your_flask_app_module换成你实际的Flask模块名,比如app:app)
  • scrapyd进程就是启动Scrapyd服务,默认会监听本地的6800端口,刚好给Flask内部调用。

第二步:调整Scrapyd配置(可选但推荐)

因为Heroku的环境有一些限制,比如文件系统是临时的,我们可以给Scrapyd加个自定义配置文件,避免踩坑:

在项目根目录创建scrapyd.conf,内容如下:

[scrapyd]
bind_address = 0.0.0.0  # 允许内部访问
log_dir = /tmp/scrapyd_logs  # 日志写到Heroku允许的临时目录
jobs_to_keep = 5  # 限制保留的任务数,避免占太多内存

这样配置后,Scrapyd能更适配Heroku的环境,日志也能正常生成(虽然重启dyno后会消失,但可以通过Heroku日志查看)。

第三步:本地先测试,避免部署踩坑

在部署到Heroku之前,先用foreman(Heroku CLI自带的工具)本地启动两个进程,验证一切正常:

foreman start

这时候你应该能看到Gunicorn和Scrapyd都启动了,然后测试你的Flask API,看是否能成功调用Scrapyd的/schedule接口调度爬虫。如果本地没问题,部署到Heroku基本也不会有大问题。

第四步:部署到Heroku并验证

正常执行部署命令:

git add .
git commit -m "Add Scrapyd process to Procfile"
git push heroku master

部署完成后,用下面的命令查看进程状态:

heroku ps

你应该能看到web.1和scrapyd.1两个进程都处于up状态。接下来就可以测试你的Flask API了,记得Flask里调用Scrapyd的地址要写成http://localhost:6800(因为两个进程在同一个dyno里,内部访问就行,不用外部域名)。

额外注意事项

  • 内存限制:免费Heroku dyno只有512MB内存,如果你的爬虫比较重,同时跑Gunicorn和Scrapyd可能会触发内存不足的错误,这时候可以考虑升级到付费dyno。
  • 日志排查:如果遇到问题,用heroku logs --tail实时查看两个进程的日志,大部分问题都是路径配置、依赖缺失或者端口冲突导致的,日志里会有明确提示。
  • Scrapy项目加载:确保你的Scrapy项目文件(比如scrapy.cfg、爬虫代码)都已经提交到git仓库,Scrapyd启动后会自动加载根目录下的Scrapy项目。

如果还有问题,随时看日志排查就行,大部分情况都是小配置问题~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:03:59