创建始终运行的后台任务

时间:2017-05-12 00:35:46

标签: ruby-on-rails ruby telegram-bot rails-activejob

我有一个仅在ruby中制作的电报机器人,执行机器人我有一个运行我的ruby文件的二进制文件。最重要的部分是收听用户的新消息。

Telegram::Bot::Client.run(token) do |bot|
 bot.listen do |message|
 call other methods here

但是现在我想从这个简单的ruby项目转移到rails应用程序,因为我想开始开发更复杂的功能。 那么如何创建一个始终运行此监听器的任务呢?我读了一些关于ActiveJob和Sidekiq的内容,但我不知道如何实现这一目标。

感谢。

2 个答案:

答案 0 :(得分:1)

ActiveJob和Sidekiq不是您所需要的。那些是在后台执行有限的工作。你需要一种独立于Rails应用程序启动的守护进程。 看一下这个https://github.com/thuehlinger/daemons

答案 1 :(得分:0)

我认为Rake Task会是完美的选择。无需其他gem,您只需在服务器上设置它的运行时间表即可。

在当前情况下,我想运行一个过程,该过程会自动将已存在48小时以上的记录标记为declined

因此,我在.rake目录bin/tasks/内创建了一个decline_stale_records.rake文件。

里面的文件代码有点像这样:

desc 'Decline stale records'
task decline_stale_records: :environment do
  stale_records = Records.where('created_at >= ?', 48.hours.ago).where.not(approval_status: 'declined')
  stale_records.update_all(approval_status: 'declined')
end

在Heroku中,您可以安排这些文件在您的首选时间运行,请阅读此guide