首次设置延迟作业,并且在执行RailsCast后,它不能在我的测试环境中工作。延迟作业失败,无日志或提醒
我有两种方法,我想运行 - 在测试中,我想在页面加载后15秒运行它们。这些方法是来自Participation.rb模型的calculate_rankings
和update_wallet
。
安装每个引导创业板上面之后,我想两件事情调试:1)我正在rake jobs:work
,那里是Starting job worker
后无输出,和2)我已经添加了警报到我的控制器的方法,该方法不激活。
后宝石安装和运行迁移(这是成功的),我已经在代码中做了两处更改。
创建应用程序/工作/ chipsupdater.rb
这是错误。该文件被错误地命名,因此在控制器中没有正确调用。根据我在下面写的方法,应该是app/jobs/chips_update_job.rb。
class ChipsUpdaterJob < Struct.new(:game_id)
def perform
Participation.calculate_ranking(game_id)
Participation.update_wallet(game_id)
end
end
更新我的ScoreboardController,我要初始化延迟工作:
class ScoreboardController < ApplicationController def index @participations = Participation.where(finished: true, game_id: session[:game_id]).order(score: :desc).limit(10) @game = Game.find(params[:game_id]) end def chipsupdater Delayed::Job.enqueue(ChipsUpdaterJob.new(params[:game_id]), :run_at => 1.minute.from_now) flash[:notice] = "Things are good. Not broken." end end
随着作业没有闪光灯警报或输出控制台,我的信念是我没有正确地调用延迟作业。你能发现我出错的地方吗(或者为什么我不能使用作业控制台进行调试)?
编辑
每注释中的讨论,我现在运行在测试环境中的工人。但是,我仍然无法a)将作业发布到我的DelayedJobs
表或b)实现我们的关键输出,即在ChipsUpdater作业文件中使用这两种方法。
因此,我的观点是,我无法根据此故障正确调用延迟的作业。
对于上下文,我想包含两个更多可能相关的文件。
首先,这里是在ChipUpdaterJob
引用的参与模式:
class Participation < ActiveRecord::Base
ef self.calculate_ranking(game_id)
records = Participation.where(game_id: game_id, finished: true).order('score DESC, updated_at ASC')
records.each_with_index do |record, index|
puts "rank: #{index + 1}"
puts record.inspect
puts record['score']
puts record['user_id']
puts record['game_id']
Ranking.create(game_id: game_id, user_id: record['user_id'], game_time: record['updated_at'], ranking: index + 1)
end
end
如果取出延迟上下文和运行从记分板控制器正常的方法,我在当地证实,它成功运行排名过程。延迟似乎是失败的。
/斌/ delayed_job的
require File.expand_path(File.join(File.dirname(__FILE__), '..', 'config', 'environment'))
require 'delayed/command'
Delayed::Command.new(ARGV).daemonize
对于任何检查这一点,delayed_job的不正确的,因为我有我的工作文件夹中的不正确命名的文件发布。下划线是正确调用控制器中类的关键。 – darkginger