【问题标题】:Loading Rails Environment when running rake tasks using Rufus scheduler and Sidekiq使用 Rufus 调度程序和 Sidekiq 运行 rake 任务时加载 Rails 环境
【发布时间】:2015-04-23 20:28:53
【问题描述】:

我想要完成的是使用 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'' 没有运气。

我还尝试了 system 'rake worker_runner:auto_visit RAILS_ENV=development',它最终将每个任务运行了两次。

任何帮助将不胜感激:)

PS。我是新手,很抱歉,如果这是个愚蠢的问题

【问题讨论】:

    标签: ruby-on-rails rake-task rufus-scheduler


    【解决方案1】:

    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找到

    【讨论】:

    • 非常感谢!那行得通。现在开始弄清楚为什么它会运行每个任务两次。
    • 太好了,请花点时间在stackoverflow.com/questions/12686282/… 为原始答案投票,这很公平
    • 太棒了。刚刚做了。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多