首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Clockwork和Resque

Clockwork和Resque
EN

Stack Overflow用户
提问于 2014-08-06 01:11:44
回答 1查看 654关注 0票数 0

我正在尝试运行一个简单的任务来测试使用resque和时钟工作在一起。

我的worker: app/worker/logger_helper.rb

代码语言:javascript
复制
class LoggerHelper
  @queue = :log_queue

  def self.before_perform
    Rails.logger = Logger.new(File.open(Rails.root.join('log', 'resque.log')))
    Rails.logger.level = Logger::DEBUG
  end

  def self.perform
    time = Time.now
    Rails.logger.info("testing #{time}")
  end
end    

我的clock.rb文件库/时钟.rb

代码语言:javascript
复制
  require File.expand_path('../../config/boot',        __FILE__)
  require File.expand_path('../../config/environment', __FILE__)
  require 'clockwork'

  module Clockwork

  handler do |job|
    Resque.enqueue(job)
  end

  every(10.seconds, 'loggerhelper') {LoggerHelper}
end

Rake文件:

代码语言:javascript
复制
require File.expand_path('../config/application', __FILE__)
Rails.application.load_tasks
require 'resque/tasks'
task(:default).clear
task default: [:spec]

task "resque:setup" => :environment do
  QUEUE = '*'
end

首先运行resque:setup,然后运行clockwork lib/clockwork.rb

我在终端中得到了以下输出

代码语言:javascript
复制
INFO -- : Triggering 'loggerhelper'
INFO -- : Triggering 'loggerhelper'
...

但是不向日志中写入任何内容。

我尝试了多种方法,但没有看到任何输出。

我确实跑了

代码语言:javascript
复制
every(10.seconds, 'loggerhelper') {LoggerHelper.perform}

在clock.rb文件中,它确实可以工作,但我不认为您应该直接调用deliver。此外,我不确定它是否真的在队列中运行,或者只是简单地执行。

EN

回答 1

Stack Overflow用户

发布于 2014-08-06 03:31:32

首先,记录器应配置为:

代码语言:javascript
复制
Rails.logger = Logger.new(Rails.root.join('log', 'rescue.log'))

我还简化了我的clock.rb文件,尽管我认为它的工作方式与最初一样:

代码语言:javascript
复制
require File.expand_path('../../config/boot',        __FILE__)
require File.expand_path('../../config/environment', __FILE__)
require 'clockwork'
module Clockwork
  every(5.seconds, 'Running Logger Helper') {Resque.enqueue(LoggerHelper)}

end

接下来,我创建了一个包含以下内容的Proc文件:

代码语言:javascript
复制
web: bundle exec unicorn -p $PORT -c ./config/unicorn.rb
resque-web: bundle exec resque-web --foreground
resque: env TERM_CHILD=1 bundle exec rake resque:work QUEUE='*'
clock: bundle exec clockwork lib/clock.rb

如果我运行

代码语言:javascript
复制
 env TERM_CHILD=1 bundle exec rake resque:work QUEUE='*'

在一个终端中然后

代码语言:javascript
复制
bundle exec clockwork lib/clock.rb

在第二个终端中,它可以工作!我希望这对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25144591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档