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

使用Rufus Scheduler调用Rake任务时遇NoMethodError错误求助

解决Rufus Scheduler调用Rake任务时的NoMethodError问题

问题根源

你直接在schedule.rb里require 'lib/tasks/api.rake',会导致Rake的DSL方法(比如namespace、task)直接绑定在main对象上,而Rufus的运行上下文没有正确初始化Rake的DSL环境,因此触发了undefined method 'rake'错误。

修正方案

修改config/schedule.rb文件,调整Rake任务的加载方式:

require 'rufus-scheduler'
require 'rake'

# 针对Rails项目:加载Rails环境及所有Rake任务
Rails.application.load_tasks if defined?(Rails)
# 非Rails项目请替换为:
# Rake.application.load_tasks

scheduler = Rufus::Scheduler.new

scheduler.every '3s' do
  # 每次调用前重新启用任务,避免Rake任务默认仅执行一次的限制
  Rake::Task["api:update"].reenable
  Rake::Task["api:update"].invoke
end

scheduler.join

补充说明

  • Rails项目必须用Rails.application.load_tasks加载任务,它会自动扫描lib/tasks目录下的所有rake文件,无需手动require。
  • 添加.reenable是因为Rake任务默认执行一次后会标记为"已完成",下次invoke不会重复执行,这个方法能重置任务状态,让每次调度都能正常运行。
  • Windows环境下确保Ruby环境变量配置正常,运行时直接执行ruby config/schedule.rb即可启动调度。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 08:34:53