使用 Rufus 调度程序和 Sidekiq 在 运行 rake 任务时加载 Rails 环境
Loading Rails Environment when running rake tasks using Rufus scheduler and Sidekiq
我想要完成的是 运行 使用 rufus-scheduler 按设定的时间间隔执行一些自定义 rake 任务。
这是我的task_scheduler.rb
require 'rufus-scheduler'
require 'rake'
load File.join(Rails.root, 'lib', 'tasks', 'worker_runner.rake')
s = Rufus::Scheduler.new
s.every '1m' do
Rake::Task['auto_visit'].reenable
Rake::Task['auto_visit'].invoke
end
s.every '5m' do
Rake::Task['room_master'].reenable
Rake::Task['room_master'].invoke
Rake::Task['room_key'].reenable
Rake::Task['room_key'].invoke
end
s.every '15m' do
Rake::Task['deadmans_snitch'].reenable
Rake::Task['deadmans_snitch'].invoke
end
s.every '1h' do
Rake::Task['bitly_data'].reenable
Rake::Task['bitly_data'].invoke
end
这是我的 worker_runner.rake
task :auto_visit => :environment do
puts 'Running auto visit worker'
AutoVisitWorker.new.perform
end
task :bitly_data => :environment do
puts 'Running bitly data worker'
BitlyDataWorker.new.perform
end
task :deadmans_snitch => :environment do
puts 'Running Deadmans Snitch worker'
DeadmansSnitchWorker.new.perform
end
task :room_master => :environment do
puts 'Running Room Master worker'
RoomMasterApiWorker.new.perform
end
task :room_key => :environment do
puts 'Running Room Key worker'
RoomkeyApiWorker.new.perform
end
间隔正确触发,但我不断收到以下错误:
rufus-scheduler intercepted an error:
2218687480 job:
2218687480 Rufus::Scheduler::EveryJob "1m" {}
2218687480 error:
2218687480 2218687480
2218687480 RuntimeError
2218687480 Don't know how to build task 'environment'
2218687480 /Users/NamNguyen/.rvm/gems/ruby-2.1.1/gems/rake-10.4.2/lib/rake/task_manager.rb:62:in `[]'
我正在研究这个,似乎我没有正确加载“task_scheduler.rb”中的环境。
我尝试在 'Rake::Task' 之前加载 'RAILS_ENV=development' 得到同样的错误。我也尝试过加载它(我知道这没有任何意义)但没有运气。我也尝试 'require './config/boot'' 和 'require './config/environment'' 在顶部没有运气。
我还尝试了 系统 'rake worker_runner:auto_visit RAILS_ENV=development',结果 运行 每个任务都执行了两次。
任何帮助将不胜感激:)
PS。我是新手,很抱歉,如果这是个愚蠢的问题
Testing Rake task with Rspec with Rails environment 的答案有帮助吗?
require 'rufus-scheduler'
require 'rake'
MyRailsApp::Application.load_tasks
# ...
通过https://www.google.com/search?q=don%27t+know+how+to+build+task+%27environment%27
找到
我想要完成的是 运行 使用 rufus-scheduler 按设定的时间间隔执行一些自定义 rake 任务。
这是我的task_scheduler.rb
require 'rufus-scheduler'
require 'rake'
load File.join(Rails.root, 'lib', 'tasks', 'worker_runner.rake')
s = Rufus::Scheduler.new
s.every '1m' do
Rake::Task['auto_visit'].reenable
Rake::Task['auto_visit'].invoke
end
s.every '5m' do
Rake::Task['room_master'].reenable
Rake::Task['room_master'].invoke
Rake::Task['room_key'].reenable
Rake::Task['room_key'].invoke
end
s.every '15m' do
Rake::Task['deadmans_snitch'].reenable
Rake::Task['deadmans_snitch'].invoke
end
s.every '1h' do
Rake::Task['bitly_data'].reenable
Rake::Task['bitly_data'].invoke
end
这是我的 worker_runner.rake
task :auto_visit => :environment do
puts 'Running auto visit worker'
AutoVisitWorker.new.perform
end
task :bitly_data => :environment do
puts 'Running bitly data worker'
BitlyDataWorker.new.perform
end
task :deadmans_snitch => :environment do
puts 'Running Deadmans Snitch worker'
DeadmansSnitchWorker.new.perform
end
task :room_master => :environment do
puts 'Running Room Master worker'
RoomMasterApiWorker.new.perform
end
task :room_key => :environment do
puts 'Running Room Key worker'
RoomkeyApiWorker.new.perform
end
间隔正确触发,但我不断收到以下错误:
rufus-scheduler intercepted an error:
2218687480 job:
2218687480 Rufus::Scheduler::EveryJob "1m" {}
2218687480 error:
2218687480 2218687480
2218687480 RuntimeError
2218687480 Don't know how to build task 'environment'
2218687480 /Users/NamNguyen/.rvm/gems/ruby-2.1.1/gems/rake-10.4.2/lib/rake/task_manager.rb:62:in `[]'
我正在研究这个,似乎我没有正确加载“task_scheduler.rb”中的环境。
我尝试在 'Rake::Task' 之前加载 'RAILS_ENV=development' 得到同样的错误。我也尝试过加载它(我知道这没有任何意义)但没有运气。我也尝试 'require './config/boot'' 和 'require './config/environment'' 在顶部没有运气。
我还尝试了 系统 'rake worker_runner:auto_visit RAILS_ENV=development',结果 运行 每个任务都执行了两次。
任何帮助将不胜感激:)
PS。我是新手,很抱歉,如果这是个愚蠢的问题
Testing Rake task with Rspec with Rails environment 的答案有帮助吗?
require 'rufus-scheduler'
require 'rake'
MyRailsApp::Application.load_tasks
# ...
通过https://www.google.com/search?q=don%27t+know+how+to+build+task+%27environment%27
找到