/ / Aký je najlepší spôsob naplánovania úlohy odosielania e-mailov pomocou služby Ruby on Rails? - ruby ​​na koľajniciach, plánovanie, plánované úlohy

Aký je najlepší spôsob naplánovania úlohy odosielania e-mailov s Ruby on Rails? - ruby ​​na koľajniciach, plánovanie, plánované úlohy

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