0

Я использую драгоценный камень state_machine и драгоценный камень rufus-scheduler. Штатная машина работает отлично. Rufus-scheduler, однако, нет. Я создаю эту программу, чтобы привыкнуть к gufus gufus. Через 10 секунд после: принято переход на: оба, затем он должен перейти на: only_employer. Тем не менее, rufus-scheduler по какой-то причине не работает. Переход на: оба работает, но затем он не переходит к: only_employer. Как это исправить? Благодарю.rufus-scheduler gem не работает в рельсах

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. BTW Я думаю, что вам не следует использовать rufus-scheduler таким образом – 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

Я не запускаю рельсы поверх всего, и я провел несколько часов со спасением. Я использую самую последнюю версию rufus (я не вижу, какая версия на github. Любая версия, которую вы получаете, помещает gem 'rufus-scheduler' в файл gem. Я очень новичок в фоновых заданиях так что есть хороший шанс, что есть некоторые базовые знания, которые мне не хватает, но я прошел несколько рельсов и некоторое время искал интернет, но ничего не могу найти. – Philip7899

Смежные вопросы