在电报僵尸宝石

时间:2016-11-01 16:01:41

标签: ruby-on-rails rake telegram-bot rake-task

我有这个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

然后在我的任务中,我有这个任务只涉及db中的产品:

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

现在,如果我发送消息,一切都按预期工作,我得到了 “在任务之前” “在任务中” “任务结束后” 此外,如果我检查数据库已触摸产品。 但是,如果我再次发送消息,我会得到这个结果 “在任务之前” “任务结束后” 当然,该产品尚未触及。 此外,不会引发错误,就像启动任务的指令被绕过一样。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

问题出在rake的invoke方法中,该方法只调用一次任务。 执行后在任务中添加reenable解决了问题。