ruby-on-rails - Rake 任务不是从 worker 中运行

标签 ruby-on-rails redis rake resque

我不明白为什么我的 rake 任务没有在 resque worker 中运行。运行

rake :send_this_email

从控制台运行正常,我只是想将它作为 cron 作业运行(如下所示),但是在从工作人员中调用 rake 任务时有些东西无法正常工作。

我的rescue_schedule.yml

send_this_email:
  cron: "*/2 * * * *"
  class: SendThisEmailWorker 
  args:
  description: "Send email when condition defined in rake task is met"

我的 send_this_email_worker.rbworkers 目录中,如果我可以自己从控制台手动调用 rake 任务,那问题一定出在哪里?

require 'rake'

module SendThisEmailWorker
  @queue = :send_this_email

  def self.perform
    Rake::Task["send_this_email"].invoke
  end
end

当我启动我的开发服务器时,这个send_this_email rake 任务应该每 2 分钟运行一次,对吗?不是,resque 管理面板将其显示为队列中的作业。我在这里缺少什么?

感谢您的关注。

更新自 gerep 评论

require 'rake'

module SendThisEmailWorker
  @queue = :send_this_email

  def self.perform
    puts "Hi from the console, I'm started"
    Rake::Task["send_this_email"].invoke
  end
end

最佳答案

只有 require 'rake' 是不够的。例如,如果你这样做 Rake::Task.tasks #列出所有任务

你会得到[]

您需要告诉您的工作类加载任务。 试试这个

require 'rake'
Rake::Task.clear # necessary to avoid tasks being loaded several times in dev mode
YOUR_APP_NAME::Application.load_tasks
module SendThisEmailWorker
  @queue = :send_this_email

  def self.perform
    puts "Hi from the console, I'm started"
    Rake::Task["send_this_email"].invoke
  end
end

YOUR_APP_NAME 是您应用的名称,可以在 config/application.rb

中找到

关于ruby-on-rails - Rake 任务不是从 worker 中运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15556710/

相关文章:

ruby-on-rails - 更新生产中的 ElasticSearch 映射(轮胎)

html - Spree 中购物车链接的奇怪行为

node.js - 我如何在redis中存储这种类型的嵌套对象?

ruby - 从根目录调用嵌套的 rake 文件

javascript - 首先安装 Rails : Rake aborted no javascript runtime

mysql - 如何在多列索引中对列进行排序以获得 Mysql 中的最佳性能

ruby-on-rails - Rails + HTTParty : Expecting JSON data in the body

Redis 快照重载内存

单个命令调用中多个 ZRANGEBYSCORE 的 Redis ZINTERSTORE?

ruby-on-rails - 奇怪的 "profiling"输出。从 Rails 命令行