*/ ?>

Démonické procesy a Rails

V minulém článku jsem vysvětlil, jak na démony v Ruby. Dnes vám ukážu využítí takového démona v Ruby on Rails aplikaci. Co takový démon dělá, je docela jedno. Řekněme, že si chceme pro účely statistiky uchovávat počet článků v nějakém blogovacím systému.

# post_counter.rb
#!/usr/bin/ruby
# pokud není nastavený environment tak nastav na development
ENV['RAILS_ENV'] ||= 'development'
# načtení environmentu - prakticky nám nabootuje Rails
require File.join(File.dirname(__FILE__), '..', 'config', 'environment')

log_file = File.join(File.dirname(__FILE__), '..', 'log', 'post_count.txt')
begin
  file = File.open(log_file, 'w+')
  loop do
    count = Post.count
    file.puts "V systému je #{count} článků."
    file.flush
    sleep(60)
  end
ensure
  file.close if file
end

Důležité jsou tu první řádky skriptu, kde zajistíš nabootování Rails aplikace k aktuálnímu procesu a dostaneš tak přístup k veškeré funkcionalitě Rails. Skript ale příliš démonický není a proto je potřeba vytvořit ještě spouštěcí skript, který už nám démona vytvoří.

# lib/post_counter_ctl.rb
require 'rubygems'
require 'daemons'
dir = File.dirname(__FILE__)
log = File.join(dir, '..', 'log')
opts = {
  :app_name => "post_counter_daemon", # název démona
  :dir_mode => :normal, # interpretuj :dir jako normální cestu
  :dir => log, # logy a výstup ukládej sem
  :log_output => false, # zahazuj výstup skriptu
  :backtrace => true, # pokud sript spadna zaloguj vyjímku
  :multiple => false, # pouze jedna instance
  :monitor => true # pokud spadne spusť jej znovu
}
counter = File.join(dir, "post_counter.rb")
Daemons.run(counter, opts)

Tento skript už stačí jenom spustit pomocí:

$ ruby lib/post_counter_ctl.rb start

Díky :monitor => true máš zaručeno, že když nastane nějaká chyba a démon spadne, bude pak nastartován znova.

Kód k článku si můžeš stáhnout z githubu http://github.com/honzasterba/dobrykod/tree/master/demonicke-procesy-v-rails

  1. Démonické procesy v Ruby
  2. Deployment Ruby On Rails jednoduše
  3. Refaktoring iterátoru
  4. Asociativní hledání
  5. Začínáme s Git

Zverejnené 1.11.2008
v kategórii Ruby on Rails.

Nálepky:
, ,

Autor článku

Honza Štěrba, http://honzasterba.cz

Su z Moravy. Pracuju v Sun Microsystems. Programování mě baví.

Vyjadri sa

Tvůj komentář se zobrazí, až ho některý z adminů schválí. Zveřejňovat budeme pouze hodnotné komentáře, které se přímo týkají tématu.


O projekte

Tento projekt vznikol, pretože všetky odborné weby sajú a my sme tým pádom nemali kde publikovať svoje články.