Chcel by som naplánovať každodennú úlohu: každý deň o 7.00 hod. Chcem, aby bol odoslaný e-mail (bez zásahu človeka).
Pracujem na rámcoch RoR a zaujímam sa, aký je najlepší spôsob, ako to urobiť?
Počul som o BackgrounDRB, plánovač OpenWFEru alebo veci založené na Cronovi, ale ja som nováčik a nerozumiem, ktorý z nich je pre moju potrebu.
odpovede:
12 pre odpoveď č. 1Ďalšou možnosťou je vytvoriť úlohu rake, ktorá je spustená úlohou cron. Ak to chcete urobiť, vytvorte súbor some_file.rake
a vložte ho do svojho lib/tasks
zložky. Váš súbor môže vyzerať takto:
Rails 2.x:
task :send_daily_mail, :needs => :environment do
Model.send_daily_mail
end
Rails 3.x:
task :send_daily_mail => :environment do
Model.send_daily_mail
end
Potom použite cron na vykonanie tak často, ako sa vám páči:
cd /path/to/app && /usr/bin/rake send_daily_mail
Poznámka: Možno budete musieť dať RAILS_ENV=production
v aplikácii crontab, ak je vaša aplikácia v predvolenom nastavení vo vývojovom režime.
7 pre odpoveď č. 2
Bol som ohromený (a plánovať vyskúšať) rufus-plánovač gem diskutoval v tomto blogovom príspevku
Opisuje niečo takéto:
scheduler = Rufus::Scheduler.start_new
scheduler.every("1m") do
DailyDigest.send_digest!
end
.. čo sa zdá byť dosť jednoduché. Zaujímalo by ma, aké ľahké by bolo pridanie konfigurácie založenej na HTML?
2 pre odpoveď č. 3
BackgroundRB je to, čo používam a funguje to dokonalo. Mám niekoľko e-mailov, ktoré sa odosielajú, generuje BackgroundRB. Mám tiež iné úlohy. Pretože umožňuje naplánované úlohy aj asynchrónne úlohy (úlohy, ktoré trvajú dlhšie ako bežný cyklus odpovedania klient / server).
Používam ho a som s ňou veľmi spokojný.
1 pre odpoveď č. 4
Pridajte metódu triedy do jedného z vašich modelov, ktoré vám to zvládnu. Teraz sa pokúste spustiť túto metódu pomocou bežiaceho skriptu
./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
Uistite sa, že všetko funguje v poriadku. Ak tak urobíme, musíme spraviť príkazy všeobecne tým, že správne nastavíme cestu k projektu.
cd /path/to/my/rails/project && ./script/runner "MyModel.send_daily_mail" RAILS_ENV=production
Teraz prejdite na ľubovoľné náhodné smerovanie a spustite tento príkaz. Ak to beží správne, spustite crontab -e
a vložte príkaz tam do nastavenia, aby sa spustil denne v 7:00. Existuje tona vysvetlenia o cron formáte tam, ak ste pre nich Google a mal by byť celkom jednoduché zistiť.
0 pre odpoveď č. 5
Prejdite s úlohou rake a úlohou cron, ako akceptovanéodpoveď už hovorí. Upozorňujeme však, že aktualizácia samotného súboru cron je manuálna úloha. To môže byť v poriadku, ak ho počas vývoja nemeníte. Inak tu môžete nechať Capistrano to urobiť pre vás: http://push.cx/2008/deploying-crontab-with-your-rails-app