ThuisBalletje
TrainingenBalletje
ConsultancyBalletje
Blog Balletje
Rails En Cron
15-01-2008

Met Rake en Cronnix

Er zijn van die terugkerende taken die het uiteindelijk verdienen om in een cronjob te eindigen. Maar hoe gaan we die maken en aanroepen in rails?


De cronjobs zelf gaan we lekker simpel maken in Cronnix. Dit is een programma op de Mac waar je snel een nieuwe job kan aanmaken, bewerken of uitzetten. Werkt prima. Alle mogelijkheden van cron instellingen gaan we niet bespreken in dit artikel, maar ik plaats een link.

We gaan het zo opzetten dat het in development werkt zodat je het kan testen. Als het allemaal naar behoren werkt kan het in production gebruikt worden. We gaan uit van de veronderstelling dat je met een nieuwe grote applicatie gaat beginnen en gelijk kiest voor:

config.action_controller.session_store = :active_record_store

Wat we willen bewerkstelligen is een simpele rake cronjob die elk kwartier onze sessions database wist in development. De rake task is heel simpel, maar kijk voor meer uitleg → hier

desc 'Wis Alle Sessies'

task :wis_alle_sessies => :environment do

CGI::Session::ActiveRecordStore::Session.delete_all

end

Dat is stap 1. Nu deze task toekennen aan een cronjob.

Dowload Cronnix en start het programma op. Deze zal opstarten met een scherm waarin jij als huidige gebruiker te zien bent. We kunnen ook de systeemcrontab openen maar dat is niet nodig.


textmate

Klik op Nieuw om een nieuwe job te maken.

Neem de instellingen over van het onderstaande scherm.


textmate

En klik op Nieuw en we hebben een nieuwe job.


textmate

Wat ontbreekt is elk kwartier en de opdracht. Wijzig de minuten zoals hieronder door te dubbelklikken op min en voer */15 in.


textmate

In het begin bij testen zet je het natuurlijk op */1

Nu komt de opdracht die ingevuld moet worden om de rake task te starten. We dubbelklikken in het opdracht veld en de cursor verschijnt. Het is nu van belang dat je eerst cd doet naar het volle pad van je applicatie. Bij mij is dat bijvoorbeeld:

cd /Users/rails/apps/demo/

Als je zeker wilt zijn gewoon naar de root van je app cd'en en dan:

> pwd

en dat kopieren. Vervolgens moeten we opgeven dat rake deze taak gaat uitvoeren. En standaard heeft cron geen idee waar rake zich bevind. Dus dat moeten we in het pad opgeven.

In mijn installatie is rake te vinden in: /usr/local/bin/rake

Maar misschien is dat bij jou anders. Doe het volgende om dat te vinden:

> which rake

/usr/local/bin/rake

We hebben nu alle componenten om de opdracht af te maken. Zorg er voor dat je rake task werkt zonder cron want anders errors uiteraard.

De opdracht is als volgt, en alles is op één regel:

cd /Users/rails/apps/demo/ && /usr/local/bin/rake RAILS_ENV=development wis_alle_sessies

TIPS voor de hand liggend uiteraard, maar niet vergeten op bewaar te klikken na wijzigingen in Cronnix. Het groene gedeelte is waar jouw pad komt natuurlijk. Verder eventueel het pad van rake aanpassen als dat anders is. Ook er erg in hebben dat je de demo app misschien verwijderd dus cronjob afvinken. En verder even het logvenster naar voren halen en command-K en kijken of er elke minuut wat in de logs veranderd. Oh ja, en niet in paniek raken als je terminal opstart en je ziet verschijnen: You have new mail. Die ontvang je van cron. Kijk in de links voor meer info. RAILS_ENV=development is het al default maar ik heb het er in gezet zodat je het alleen nog maar hoeft te veranderen in production als alles werkt op je lokale machine.