0

我正在使用state_machine gem和rufus-scheduler gem。狀態機工作正常。然而,Rufus調度器不是。我正在構建這個程序只是爲了適應rufus寶石。 10秒後:接受過渡到:兩者,它應該然後過渡到:only_employer。但是,由於某種原因rufus-scheduler不起作用。過渡到:兩者都有效,但不會過渡到:only_employer。我該如何解決?謝謝。rufus-scheduler gem不能在rails中工作

class Schedule < ActiveRecord::Base 
    require 'rufus-scheduler' 
    scheduler = Rufus::Scheduler.new 

    def set_schedule 
     scheduler.in '10' do #documentation says this should be 10 seconds 
      self.change_to_done 
     end 
    end 

    state_machine :accepted, :initial => :none do 
     after_transition :any => :both, :do => :set_schedule 
     event :change_to_done do 
      transition :both => :only_employer 
     end 
    end 

end 
+0

將scheduler.join添加爲set_schedule方法中的最後一條語句。順便說一句,我認爲你不應該用這種方式使用rufus調度器 – Aguardientico

+0

謝謝,添加它,但它沒有奏效。我查看了文檔,但無法弄清楚'scheduler.join'應該做什麼。你介意解釋一下嗎? – Philip7899

+0

'scheduler.join'使當前線程加入調度程序線程。這不是你想要的。 'scheduler.join'用於獨立腳本,而不是通過Rails或Sinatra運行的代碼。 – jmettraux

回答

0

爲此,使用rufus-scheduler是矯枉過正的。

def set_schedule 
    Thread.new do 
    sleep 10 
    self.change_to_done 
    end 
end 

應該足夠了。

但是,接下來是在線程友好之上運行Rails的「服務器」嗎?如果不是,你最好把任務交給像resque或sidekick這樣的東西。

+0

謝謝,但正如我所說的,這實際上只是我努力學習rufus之前,我把它放到更復雜的東西。我也試過救援,發現它太複雜了。我也無法弄清楚如何在固定的時間內讓救援工作。我只能想出如何讓它在後臺重複工作,而不是在特定事件之後再次工作。 – Philip7899

+0

閱讀本文可能會對您有所幫助:http://www.chiark.greenend.org.uk/~sgtatham/bugs.html 您沒有提供關於您的設置的詳細信息(Ruby,Rails,rufus-scheduler版本, ...)。你沒有告訴你在Rails上運行什麼(Thin,Passenger,Unicorn,...?) Resque-scheduler可能會讓你感興趣。 https://github.com/resque/resque-scheduler – jmettraux

+0

我沒有在任何事物上運行rails,並且我花了幾個小時的時間來進行救援。我使用的是最新版本的rufus(我無法看到它在github上的版本,它是將gem'rufus-scheduler'放入gem文件中的任何版本。所以很有可能有一些基本的知識我失蹤了,但我已經通過了幾條軌道投射並搜索了互聯網一段時間,但找不到任何東西。 – Philip7899

相關問題