Il lavoro di Cron non funziona in When gem

Ho un’applicazione che contiene un sacco di attività, e ogni giorno voglio eseguire un cron job che crea un DayTask per ogni attività nel database. Un’attività ha_qualvolta DayTasks e questi daytasks sono ciò che gli utenti controlleranno ogni giorno. Sto usando il gem di sempre, ma non sembra funzionare affatto. Qualche idea?

config / schedule.rb

every 1.day, :at => "12:01am" do runner "Task.generate_tasks_for_day" end 

Task.rb

  def generate_tasks_for_day Task.all.each do |task| task.day_tasks.create(:target_date => Date.today) end end 

risultato dell’esecuzione del comando ‘when when’

 1 0 * * * /bin/bash -l -c 'cd /home/grant/rails_projects/GoalTwist && script/rails runner -e production '\''Task.generate_tasks_for_day'\''' 

Nota: ho cambiato i tempi in config / schedule.rb ogni volta che voglio testarlo.

Finalmente ho risolto come eseguire la gem ogni volta. Funziona bene in produzione, ma non in modalità sviluppo (penso che per lavorare bene in modalità dev devi fare qualche trucco).

Quindi, questi sono i processi da fare:

  1. installa la gem
  2. scrivi il tuo file scheduler.rb
  3. spingere al server remoto
  4. accedere al server remoto (ad esempio con ssh )
  5. vedi se ogni volta è buono caricato eseguendo nel terminale: whenever
  6. aggiorna quando crontab eseguendo: whenever --update-crontab
  7. riavviare il server crontab (ad esempio nel server Ubuntu): sudo service cron restart
  8. controlla se crontab è implementato correttamente sul server: crontab -l

Questo è tutto!

Personalmente, preferisco impostare i miei crons direttamente dal server:

  1. Modifica il crontab: crontab -e
  2. Aggiungi il mio cron (ad esempio ogni giorno alle 5:00 AM – può essere leggermente diverso per i server non basati su Linux):
    0 5 * * * /bin/bash -l -c 'cd /path_to_my_app/current && RAILS_ENV=production bundle exec rake my_cron_rake'
  3. Controlla se implementato correttamente: crontab -l
  4. Fatto

Devi effettivamente registrare il lavoro con crontab eseguendo:

whenever --update-crontab

Inoltre, se stai cercando di ottenere processi in esecuzione localmente, aggiungi :environment => "development" all’attività

runner "MyTask.some_action", :environment => "development"

Prova ad eseguire il comando generato ogni volta direttamente dal terminale o aggiungi la seguente riga [email protected] al tuo crontab.