Рейк задачи внутри telegram bot gem

У меня есть этот telegrambot.rb файл

require 'telegram/bot'
require 'rake'
require File.expand_path(File.dirname(__FILE__) + "/../config/environment")
Myapp::Application.load_tasks
token = "mytoken"
Telegram::Bot::Client.run(token) do |bot|
    bot.listen do |message|
        case message.text
        when "Try"
            pp "before task"
            Rake::Task["alpha:try"].invoke
            pp "after task"
        end
    end
end

Тогда в моих задачах есть эта задача, которая просто касается продукта в БД:

namespace :alpha
    task try: :environment do
        pp "in the task"
        prod = BaseProduct.first
        prod.touch(:updated_at)
    end
end

Теперь, если я отправляю сообщение, все работает так, как ожидалось, и я получаю
«перед заданием»
«в задаче»
«после задания»
Кроме того, если я проверяю db, продукт был затронут.
Но, если я отправлю сообщение снова, я получу этот результат
«перед заданием»
«после задания»
И конечно продукт не был затронут.
Кроме того, не возникает ошибок, как если бы команда, запускающая задачу, была обойдена.
Есть идеи?

1 ответ

  1. Проблема была в методе Rake invoke, который только вызывает задачу один раз.
    Добавление восстанавливаемой задачи после выполнения решило проблему.