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

Ruby on Rails定时爬取数据入库与手动刷新功能实现咨询

Rails Reddit爬取应用技术问题解答

关于每日自动爬取的实现问题

首先明确:带无限时间循环的scraper.rb不要往models/views/controllers三个目录里放,Rails的Web服务进程启动时不会自动执行这类自定义常驻脚本,硬塞到初始化目录反而会阻塞Web服务启动,导致整个站点无法访问。
正确的实现方式如下:

  • 爬取逻辑的存放位置:把爬取相关的纯业务代码封装成服务类,放到自建的app/services/目录下,比如app/services/reddit_scraper.rb,在类里分别写好全量爬取、单条帖子爬取的方法,不要在文件里写死循环逻辑。
  • 每日自动执行的方案:不需要额外维护一个常驻的Ruby爬取进程,用系统定时任务触发即可。开发/生产环境都可以用whenever gem管理定时规则,配置每天固定时间通过rails runner调用服务类里的全量爬取方法,到点系统会自动拉起临时进程执行爬取,跑完自动释放资源,不会和Web服务冲突。
  • 进程关系:爬取逻辑和Web服务完全解耦,不需要同时启动两个常驻Ruby进程。定时任务触发的临时进程不会占用持续的服务器资源,也不会阻塞正常的页面请求响应。

关于手动刷新按钮的实现问题

你的实现思路完全正确,不需要前端JS就能跑通:

  • 给每个帖子旁的刷新按钮绑定对应请求,路由指向Posts控制器下自定义的刷新动作
  • 动作逻辑里先根据参数找到对应的帖子记录,直接调用之前封装好的单条爬取方法拉取最新点赞数,更新完数据库记录后,重定向回列表页或者直接渲染对应帖子的局部片段即可
  • 建议加个简单的频率限制:比如单条帖子10分钟内只能手动触发一次刷新,避免短时间请求过多被Reddit反爬拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:39:23