5

Mam uruchomioną aplikację z apache + pasażera w produkcji. Obecnie inicjalizuję program planujący rufus w inicjatorze i rejestruję zadania odczytu z bazy danych w tym inicjatorze. Sposób działania Apache/Pasażera polega na tym, że tworzy on wiele procesów/instancji aplikacji, co powoduje, że program szeregujący jest inicjowany wiele razy i planuje duplikowanie zadań.Implementacja harmonogramu Rufusa w szynach 3

Jaka jest prawidłowa implementacja tego, aby program planujący był obiektem pojedynczym?

Odpowiedz

4

Prawdopodobnie chcesz wdrożyć Rufus Scheduler jako osobny proces roboczy poza aplikacją.

Zamiast umieszczać go jako inicjator, zaimplementowałbym zadanie Rake, które je uruchamia.

# Rakefile 
desc "Starts the Scheduler worker" 
task :scheduler do 
    require 'path/to/your/scheduler/file' 

    scheduler.join 
end 

Następnie wystarczy uruchomić rake scheduler, aby uruchomić go w tle.


Bonus: Ponieważ Twoja aplikacja potrzebuje teraz 2 procesów obok siebie, użyj Foreman do zarządzania wieloma procesami w aplikacji. Można to zrobić poprzez utworzenie pliku o nazwie Procfile:

# Procfile 
web:  thin start -p 4242 
scheduler: rake scheduler 

Następnie uruchom aplikację z Foremana (koniecznie gem install foreman pierwszy)

$ foreman start 

Będzie to wywołać zarówno procesów jednocześnie.