创建一个始终 运行 的后台任务
Create a background task that is always running
我有一个仅在 ruby 中制作的电报机器人,为了执行该机器人,我有一个二进制文件 运行 我的 ruby 文件。最重要的部分是监听来自用户的新消息。
Telegram::Bot::Client.run(token) do |bot|
bot.listen do |message|
call other methods here
但现在我想从这个普通的 ruby 项目转移到 rails 应用程序,因为我想开始开发更复杂的功能。
那么我怎样才能做一个总是 运行ning 这个监听器的任务呢?我阅读了一些有关 ActiveJob 和 Sidekiq 的内容,但我不知道 how/if 是否有可能实现这一目标。
谢谢。
ActiveJob 和 Sidekiq 不是您需要的。这些是在后台执行有限的工作。您需要某种独立于 Rails 应用启动的守护进程。
看看这个https://github.com/thuehlinger/daemons
我认为 Rake Task 非常适合这个。无需额外的 gem,您只需在您的服务器上设置它的 运行ning 时间表。
在我目前的情况下,我想要 运行 一个自动将超过 48 小时的记录标记为 declined
的过程。
所以我在 bin/tasks/
目录中创建了一个 .rake
文件,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。
我有一个仅在 ruby 中制作的电报机器人,为了执行该机器人,我有一个二进制文件 运行 我的 ruby 文件。最重要的部分是监听来自用户的新消息。
Telegram::Bot::Client.run(token) do |bot|
bot.listen do |message|
call other methods here
但现在我想从这个普通的 ruby 项目转移到 rails 应用程序,因为我想开始开发更复杂的功能。 那么我怎样才能做一个总是 运行ning 这个监听器的任务呢?我阅读了一些有关 ActiveJob 和 Sidekiq 的内容,但我不知道 how/if 是否有可能实现这一目标。
谢谢。
ActiveJob 和 Sidekiq 不是您需要的。这些是在后台执行有限的工作。您需要某种独立于 Rails 应用启动的守护进程。 看看这个https://github.com/thuehlinger/daemons
我认为 Rake Task 非常适合这个。无需额外的 gem,您只需在您的服务器上设置它的 运行ning 时间表。
在我目前的情况下,我想要 运行 一个自动将超过 48 小时的记录标记为 declined
的过程。
所以我在 bin/tasks/
目录中创建了一个 .rake
文件,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。