我在我的rails 4应用程序中使用resque和resque_scheduler.我的应用程序正在为resque做一些工作,但它们并没有被工人处理.reque-web显示没有失败.
我通过跑步开始了resque工作
QUEUE=kqueue rake environment resque:work
我的rails控制台
2.0.0p353 :006 > Resque.info
=> {:pending=>0, :processed=>0, :queues=>0, :workers=>1, :working=>0, :failed=>0, :servers=>["redis://localhost:6379/0"], :environment=>"development"}
2.0.0p353 :007 > Resque.redis
=> #<Redis::Namespace:0x007fbb0fbf3e58 @namespace=:resque, @redis=#<Redis client v3.0.6 for redis://localhost:6379/0>, @warning=false>
2.0.0p353 :008 > Resque.workers
=> [#<Worker xxx-macbook.local:16869:kqueue>]
Run Code Online (Sandbox Code Playgroud)
在redis上,
redis 127.0.0.1:6379> keys *
1) "resque:workers"
2) "resque:delayed_queue_schedule"
3) "resque:worker:xxx-macbook.local:16869:kqueue:started"
4) "resque:timestamps:{\"class\":\"InvokeScheduler\",\"args\":[{\"target\":\"/sendmail\",\"http_method\":\"post\",\"type\":\"signup_verification\",\"user_id\":31}],\"queue\":\"kqueue\"}"
5) "resque:delayed:1388832771"
Run Code Online (Sandbox Code Playgroud)
resque-web说:
0 of 1 Workers Working
Failed Jobs
Showing 0 to 0 of 0 jobs
Worker xxx-macbook.local:16869:kqueue
Host Pid Started Queues Processed Failed Processing …Run Code Online (Sandbox Code Playgroud) 有没有人能够在Rails 4.2中获得预定的工作?
我正在使用resque,我正在尝试使用resque-scheduler来安排作业.我有一个计划加载和调度程序运行,甚至看起来它正在运行作业但它没有做任何事情.
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Starting
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Loading Schedule
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Scheduling friends
resque-scheduler: [INFO] 2014-09-16T01:54:25-07:00: Schedules Loaded
resque-scheduler: [INFO] 2014-09-16T01:54:55-07:00: queueing FriendsJob (friends)
Run Code Online (Sandbox Code Playgroud)
我可以将这样的工作排队,然后进行处理.
TestJob.enqueue(params[:id])
Run Code Online (Sandbox Code Playgroud)
我在工作日志中得到了这个输出
got: (Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])
** [01:24:01 2014-09-16] 54841: resque-1.25.2: Processing default since 1410855841 [ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper]
** [01:24:01 2014-09-16] 54841: Running before_fork hooks with [(Job{default} | ActiveJob::QueueAdapters::ResqueAdapter::JobWrapper | ["TestJob", "98732ce5-17f7-4da3-9a03-a5d2f8f74e84", "8"])]
** [01:24:01 2014-09-16] 54841: resque-1.25.2: Forked 54882 at 1410855841
** [01:24:01 2014-09-16] 54882: Running after_fork hooks …Run Code Online (Sandbox Code Playgroud) ruby-on-rails resque ruby-on-rails-4 resque-scheduler rails-activejob
我正在开发一个使用resque和resque-scheduler 来安排电子邮件发送的 rails 应用程序。
有没有办法获得所有预定作业的列表,或者更好的具有特定参数的作业列表?
我已经尝试了一些事情,Resque.schedule但我能得到的最好的是这个哈希:
{"send_email"=>
{
"class"=>"EmailSendingJob",
"args"=>nil,
"queue"=>"email_queue",
"description"=>"Runs the perform method in EmailSendingJob"
}
}
Run Code Online (Sandbox Code Playgroud) 我跑的时候
rake resque:scheduler RAILS_ENV=production
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
2013-09-19 18:16:16 Reloading Schedule
2013-09-19 18:16:16 Loading Schedule
2013-09-19 18:16:16 Scheduling aa_job
2013-09-19 18:16:16 Scheduling bb_job
2013-09-19 18:16:16 Scheduling cc_aggregator
2013-09-19 18:16:16 Schedules Loaded
Run Code Online (Sandbox Code Playgroud)
但是我可以看到这些工作都没有真正排队.我知道我的工作人员已经开始运行,因为如果我做了类似的事情
Resque.enqueue(aa_job)
Run Code Online (Sandbox Code Playgroud)
它按预期排队并执行.
其他的事情,如果我Resque.schedule在我的Rails控制台中,我得到{} (empty)
有任何想法吗?
谢谢.
我正在尝试升级我的Rails 3.2项目Rails 4.2,包括我的所有依赖项Gemfile.我删除了我的旧版本号限制Gemfile,删除了我的Gemfile.lock,和bundle install.它按照我的希望升级了所有内容(据我所知),但是当我做rake时,db:setup我收到以下错误:
p@jarvis ~/g/s/g/n/j/x> rake db:setup --trace
rake aborted!
LoadError: cannot load such file -- resque_scheduler/tasks
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:274:in `require'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:274:in `block in require'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:240:in `load_dependency'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:274:in `require'
/home/p/gop/src/github.com/x/x/x/lib/tasks/resque.rake:2:in `<top (required)>'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:268:in `load'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:268:in `block in load'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:240:in `load_dependency'
/var/lib/gems/2.3.0/gems/activesupport-4.2.6/lib/active_support/dependencies.rb:268:in `load'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/engine.rb:658:in `block in run_tasks_blocks'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/engine.rb:658:in `each'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/engine.rb:658:in `run_tasks_blocks'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/application.rb:452:in `run_tasks_blocks'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/engine.rb:453:in `load_tasks'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/railtie.rb:194:in `public_send'
/var/lib/gems/2.3.0/gems/railties-4.2.6/lib/rails/railtie.rb:194:in `method_missing'
/home/p/gop/src/github.com/x/x/x/Rakefile:7:in `<top (required)>'
/var/lib/gems/2.3.0/gems/rake-11.2.2/lib/rake/rake_module.rb:28:in `load'
/var/lib/gems/2.3.0/gems/rake-11.2.2/lib/rake/rake_module.rb:28:in `load_rakefile'
/var/lib/gems/2.3.0/gems/rake-11.2.2/lib/rake/application.rb:686:in `raw_load_rakefile' …Run Code Online (Sandbox Code Playgroud) rubygems ruby-on-rails resque ruby-on-rails-4 resque-scheduler
我需要执行一项工作,其中每次创建订单时都会将其分配给供应商,如果供应商不接受订单并在指定时间内更新状态,则订单将自动拒绝并将状态更新为拒绝。我面临的问题是,作业会转到延迟队列,如 resque Web 视图中所示,但在延迟失效的指定时间后不会移动到主队列
这是我的工作。
class AutoRejectionJob < ActiveJob::Base
queue_as :auto_rejection_queue
def perform(*args)
assignment_id = args[0]
order_assignment = Estamps::Assignment.find(assignment_id)
if order_assignment.status_id == 1 || order_assignment.status_id == nil
order_assignment.status_id = 3
order_assignment.save!
end
end
end
Run Code Online (Sandbox Code Playgroud)
在我的作业模型中:
class Estamps::Assignment < ActiveRecord::Base
after_create :enqueue_check_status
def enqueue_check_status #
AutoRejectionJob.set(wait: 2.minutes).perform_later(self.id)
end
end
Run Code Online (Sandbox Code Playgroud)
这里,一旦创建了分配记录,其状态通常在创建时保持为“已分配”。现在,从创建之日起,如果用户未在指定时间内更新状态,则作业必须自动将状态更新为“已拒绝”。
我也尝试过这个方法。
def enqueue_check_status
Resque.enqueue_at_with_queue('auto_rejection_queue', 2.minutes.from_now,
AutoRejectionJob, assignment_id: self.id)
end
Run Code Online (Sandbox Code Playgroud)
它们都将作业发送到resque延迟队列,但不将作业带到主队列执行。
此外,当我单击延迟作业的所有计划链接时,作业的时间戳显示没有列出要计划的作业
我被这个问题困扰了将近两周。请帮忙!如果需要更多信息,请告诉我。和这个人度过了一段艰难的时光。
ruby-on-rails delayed-job redis resque-scheduler rails-activejob
我建立了一个小型Rails项目,以“实时”显示加密货币价格。每隔30秒,后台作业就会从我构建的另一个api获取价格,数据会保存在db中,并通过操作电缆进行广播。
我最初是在两年前项目开始时问这个问题的,这确实帮助了我前进。我采用的解决方案是resque-scheduler。我已将应用程序部署到Heroku。几天前,我的价格停止更新,我不知道为什么。我的日志中没有明显的变化。我尚未升级任何软件包。
require 'resque/tasks'
require 'resque/scheduler/tasks'
# Scheduler needs very little cpu, just start it with a worker.
desc "schedule and work, so we only need 1 dyno"
task :schedule_and_work do
if Process.fork
sh "rake environment resque:work"
else
sh "rake resque:scheduler"
Process.wait
end
end
Run Code Online (Sandbox Code Playgroud)
require 'resque/tasks'
require 'resque/scheduler/tasks'
namespace :resque do
task :setup do
require 'resque'
require 'resque/scheduler'
ENV['QUEUE'] = '*'
Resque.redis = 'localhost:6379' unless Rails.env == 'production'
schedule …Run Code Online (Sandbox Code Playgroud) 我按照resque-scheduler repo上的所有说明显示resque-web界面上的"Delayed"和"Schedule"选项卡,但没有!
这是导入的宝石:
gem 'resque', '~> 1.25.2', require: 'resque/server'
gem 'resque-scheduler', '~> 2.5.5'
gem 'resque-web', require: 'resque_web'
Run Code Online (Sandbox Code Playgroud)
为了正常添加调度程序到resque-web,我编辑了 ./config/initializers/resque_config.rb
require 'resque'
Resque.redis = "127.0.0.1:6379" # tell Resque where redis lives
# This will "normally" make the tabs show up.
require 'resque_scheduler' # the one provided on the README doesn't exist 'resque-scheduler'
require 'resque_scheduler/server' # the one provided on the README doesn't exist 'resque/scheduler/server'
Run Code Online (Sandbox Code Playgroud)
要加载resque-web,我使用了rails路由:
ResqueWeb::Engine.eager_load!
mount ResqueWeb::Engine => "/resque_web"
Run Code Online (Sandbox Code Playgroud)
但是,对resque web界面没有影响......
我有一个配置了resque和resque-scheduler的应用程序.所有作业都运行正常,并将日志输出恢复到其日志文件.resque-scheduler alos工作正常,按预期加载和处理作业.
我遇到的一个问题是调度程序似乎没有将任何内容记录到其日志文件中.
我按照这里的设置说明操作
https://github.com/resque/resque-scheduler#logging
并在我的初始化程序中使用此代码.
# Define the location of the schedule
Resque.schedule = YAML.load_file(Rails.root.join('config', 'scheduled_jobs.yml'))
# Define the logger
Resque::Scheduler.configure do |c|
c.quiet = false
c.verbose = false
c.logfile = File.open("#{Rails.root}/log/resque_scheduler.log", 'w+')
c.logformat = 'text'
end
Run Code Online (Sandbox Code Playgroud)
启动应用程序时,将创建resque_scheduler.log.
当我启动调度程序时,它将以下内容输出到stdout(我的VM上的终端窗口).我原以为这会进入日志文件.
$ rake resque:scheduler TERM_CHILD=1
resque-scheduler: [INFO] 2015-07-17T14:34:27+01:00: Starting
resque-scheduler: [INFO] 2015-07-17T14:34:27+01:00: Loading Schedule
resque-scheduler: [INFO] 2015-07-17T14:34:27+01:00: Scheduling daily_job_email_overdue_items_to_admin
resque-scheduler: [INFO] 2015-07-17T14:34:27+01:00: Scheduling daily_job_to_update_status_to_overdue
resque-scheduler: [INFO] 2015-07-17T14:34:27+01:00: Schedules Loaded
Run Code Online (Sandbox Code Playgroud)
我已经对互联网进行了搜索,但没有找到任何有同样问题的人.任何人都遇到了同样的问题或者工作过,并且可以建议我缺少的东西.
非常感谢.
我在 Puma 服务器上有一个 Rails 4 应用程序,其中 Resque/Resque-Scheduler 正在运行后台作业。我想知道的是如何将两个 Resque 工作人员的日志输出合并到我的服务器日志中,或者,这是不可能的,我如何查看我的 Resque 工作人员的日志输出。目前我无法弄清楚如何查看工作人员的日志输出,所以我不知道幕后发生了什么。我找到了这篇博文,它建议将以下内容添加到我的resque.rake文件中:
task "resque:setup" => :environment do
Resque.before_fork = Proc.new {
ActiveRecord::Base.establish_connection
# Open the new separate log file
logfile = File.open(File.join(Rails.root, 'log', 'resque.log'), 'a')
# Activate file synchronization
logfile.sync = true
# Create a new buffered logger
Resque.logger = ActiveSupport::BufferedLogger.new(logfile)
Resque.logger.level = Logger::INFO
Resque.logger.info "Resque Logger Initialized!"
}
end
Run Code Online (Sandbox Code Playgroud)
那行不通。我还尝试了评论中的建议,即替换为Resque.logger = ActiveSupport::BufferedLogger.new(logfile),Resque.logger = ActiveSupport::Logger.new(logfile)但这也不起作用。使用第二个选项,当我NoMethodError: undefined method 'logger=' for Resque:Module尝试启动工作程序时仍然收到错误。 …
logging ruby-on-rails resque ruby-on-rails-4 resque-scheduler
使用resque-scheduler根据用户的输入set_schedule动态cron作业时,似乎设置了计划,但工作人员实际上从未按设定的计划启动.
在Resque配置中,dynamic设置为true,如下所示:Resque :: Scheduler.dynamic = true我正在设置如下调度:
name = business.name + '_employee_import'
config = {}
config[:class] = 'ImporterWorker'
config[:args] = business.id.to_s
config[:cron] = cron_converter
config[:persist] = true
Resque.set_schedule(name, config)
Run Code Online (Sandbox Code Playgroud)
如果我在命令行中执行:
Resque.get_schedule("business_employee_import")
Run Code Online (Sandbox Code Playgroud)
我明白了:
{"class"=>"MyWorker", "args"=>"87", "cron"=>"19 18 * * * *"}
Run Code Online (Sandbox Code Playgroud)
但到了下午6点19分,工人才开始.我有一个工人正在运行,但工作永远不会被接收,我不知道为什么或如何排除故障.在我看来这应该工作.我也尝试将resque-scheduler更新到最新版本,但没有运气.
感谢您提供的任何帮助.
resque-scheduler ×11
ruby-on-rails ×10
resque ×9
ruby ×2
delayed-job ×1
heroku ×1
logging ×1
redis ×1
rubygems ×1