繁体   English   中英

Heroku,cron,delayed_job和workers(Rails 3)

[英]Heroku, cron, delayed_job and workers (Rails 3)

我有两个问题:

  1. 如何在执行延迟的作业之前添加heroku worker,并在完成后将其删除?
  2. 我的cron.rake好吗?

cron.rake:

desc "This task is called by the Heroku cron add-on"
task :cron => :environment do

  puts "requesting homepage to refresh cache"
  uri = URI.parse('http://something.com')
  Net::HTTP.get(uri)
  puts "end requesting homepage"

  puts "start sending daily mail"
  User.notified_today.each do |user|
    Delayed::Job.enqueue UserMailer.daily_mail(user).deliver
  end
  puts "end sending daily mail"

end

我使用collectionidea delay_job

我在HireFire上取得了成功。

设置简单:

  • gem 'hirefire'添加到您的Gemfile
  • 使用配置信息创建Rails.root/config/initializers/hirefire.rb

要添加删除/删除工作程序,请在:create /之后:destroy之后挂接到您的ORM中

使用Heroku上的DataMapper,我做到了这一点(您必须自己设置ENV变量)

MAX_CONCURRENT_WORKERS = 5
if ENV["HEROKU_APP"]  
  Delayed::Job.after :create do
    workers_needed = [Delayed::Job.count, MAX_CONCURRENT_WORKERS].min
    client = Heroku::Client.new(ENV['HEROKU_USERNAME'], ENV['HEROKU_PASSWORD'])
    client.set_workers(ENV['HEROKU_APP'], workers_needed)        
    puts "- Initialized Heroku workers for ZipDecoder"           
  end

  Delayed::Job.after :destroy do
    workers_needed = [Delayed::Job.count, MAX_CONCURRENT_WORKERS].min
    client = Heroku::Client.new(ENV['HEROKU_USERNAME'], ENV['HEROKU_PASSWORD'])
    client.set_workers(ENV['HEROKU_APP'], workers_needed)        
    puts "- Cleaned Up a Delayed Job for ZipDecoder ---------------------------------"
  end
end
  1. 您也许可以使用“自动缩放”插件,如worklessheroku- autoscale
  2. 关于cron,我看不到任何问题...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM