【问题标题】:Monitor a rake task in rails 5在 rails 5 中监控 rake 任务
【发布时间】:2017-05-16 17:09:36
【问题描述】:

我有一个要求,我必须不断地从 AWS-SQS(简单队列服务)获取消息并更新模型的相关记录。该消息包含需要在获取后立即作为通知显示给相关用户的数据。这已通过使用 Action Cable 成功管理。我创建了一个 rake 任务,它从队列中获取消息并进行所需的处理。该任务应该在无限循环中运行。我有 2 个问题?

namespace :sqs_consumer do
  desc 'Get data from the AWS-SQS and process it.'
  task start: :environment do
    # initialize the sqs client
    loop do
      #read the queue for messages and process them in batches(if any)
    end
  end
end

1) 为上述需求创建一个 rake 任务是否正确?无限运行的 rake 任务是正确的方法吗?如果没有,什么是正确的方法。我无法定期运行任务,因为我需要实时数据。

2) 我想监控任务。我正在使用monit。不幸的是,同样的 Monit conf 似乎不起作用。我做错了什么或错过了什么?

check process aws_sqs_consumer with pidfile /var/www/myproject/shared/pids/sqs_consumer.pid
  start program = "/bin/sh -c 'cd /var/www/myproject/current; nohup bundle exec rake sqs_consumer:start RAILS_ENV=staging -i 0 -P /var/www/myproject/shared/pids/sqs_consumer.pid >> log/sqs_consumer.log 2>&1 &'" as uid ubuntu and gid ubuntu
  stop program = "/bin/sh -c 'kill $(cat /var/www/myproject/shared/pids/sqs_consumer.pid)'" as uid ubuntu and gid ubuntu

【问题讨论】:

  • 你可以尝试使用守护进程 gem 来创建一个守护进程并使用上帝来监控它:)

标签: ruby ruby-on-rails-5 infinite-loop rake-task monit


【解决方案1】:

这个监控配置对我有用

check process aws_sqs_consumer with pidfile /var/www/myproject/shared/tmp/pids/sqs_consumer.pid
  start program = "/bin/sh -c 'cd /var/www/myproject/current && BACKGROUND=y PIDFILE=/var/www/myproject/shared/tmp/pids/sqs_consumer.pid LOG_LEVEL=info bundle exec rake sqs_consumer:start RAILS_ENV=staging'"
  stop program = "/bin/sh -c 'kill $(cat /var/www/myproject/shared/tmp/pids/sqs_consumer.pid)'" as uid ubuntu and gid ubuntu with timeout 90 seconds

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    • 2011-10-06
    • 1970-01-01
    • 2016-03-23
    • 2011-12-03
    • 2018-12-07
    • 1970-01-01
    相关资源
    最近更新 更多