Каждый раз, когда гем запускает задания cron на Heroku

Я создал приложение, в котором используется драгоценный камень when. Драгоценный камень создает рабочие места cron. Я заставил его работать локально, но, похоже, не могу заставить его работать на кедре героку. Какая команда для этого?

Бег:

heroku run whenever --update-crontab job1

не работает


person AdamT    schedule 23.12.2011    source источник


Ответы (4)


Краткий ответ: используйте надстройку планировщика: http://addons.heroku.com/scheduler

Длинный ответ: когда вы выполняете героку-бег, мы

  1. раскрутить дино
  2. поместите свой код на это
  3. выполните свою команду, дождитесь ее завершения
  4. выбросить дино

Любые изменения, внесенные вами в crontab, будут немедленно удалены. Все эфемерно, вы не можете редактировать файлы на heroku, просто запустите новый код.

person Will    schedule 23.12.2011
comment
что делать для длительных задач? (на выполнение уходит часы) - person slykat; 19.12.2012
comment
это нормально, у вас будет 24 часа, чтобы завершить это - person Will; 20.12.2012
comment
@Will, но приложение должно генерировать какой-то вывод хотя бы раз в час, верно? (Подключения к одноразовым динамометрическим станциям будут закрыты после одного часа бездействия (как на входе, так и на выходе).) - person fearless_fool; 22.02.2013
comment
Это для веб-дино. У выходящего веб-динамометра нет запрета на запуск надстройки планировщика, запускающей одноразовый run в вашем приложении. Это ничем не отличается от выполнения heroku run <your job>. Он использует тот же API. - person Will; 22.02.2013
comment
Вы полностью используете планировщик (имеется в виду другой код для локального, а не для производственного), или вы просто используете его всякий раз, когда у вас установлена ​​надстройка планировщика? - person ajbraus; 08.08.2013
comment
В документации по планировщику указано, что это «лучший сервис», что означает отсутствие гарантия, что ваша задача будет запущена. Если вам нужно что-то более надежное - например, мне для обработки платежей - попробуйте процессы часов . - person Scott Fister; 02.09.2013
comment
Так действительно ли планировщик Heroku делает ненужным всякий раз, когда Gem при развертывании приложения rails на Heroku? Особенно, когда у вас есть простые задания cron? Я бы подумал, что использование планировщика эффективно делает драгоценный камень «Всякий раз» бесполезным или я что-то упускаю? - person JCC; 01.03.2014
comment
@JCC, вы это подтвердили? По моему опыту, это точное заявление о том, что gem всякий раз бесполезен в продакшене при использовании Heroku Scheduler. Однако он по-прежнему может быть полезен для управления в более низких, локальных средах (dev). - person karns; 22.01.2020

Вам необходимо добавить надстройку Heroku Scheduler.

Вы можете добавить его прямо со своей панели управления или с помощью следующих команд:

  1. установите add-on:

    heroku addons:create scheduler:standard
    
  2. Создать рейк-задачу в lib/tasks

    # lib/tasks/scheduler.rake
    task :send_reminders => :environment do
      User.send_reminders
    end
    
  3. Запланировать работу

    • Visit Heroku Dashboard
    • Откройте свое приложение.
    • Выберите Планировщик из списка add-ons.
    • Нажмите Добавить задание, введите задачу и выберите периодичность.

      например Добавьте rake send_reminders, выберите "Daily" и "00:00", чтобы напоминания отправлялись каждый день в полночь.

Heroku добавить задачу cron

person Deepak Mahakale    schedule 28.09.2016

В других ответах указано, что вы должны использовать надстройку Heroku Scheduler, и она действительно может запускать фоновые задачи, но не поддерживает гибкость cron.

Есть еще одно дополнение, называемое Cron To Go, которое может запускать ваши задания на одном -off дино с гибкостью cron. Вы также можете указать часовой пояс для своей работы и получать уведомления (по электронной почте или через веб-перехватчик) при сбое, успешном выполнении или запуске задания.

(Полное раскрытие информации - я работаю в компании, которая создала и управляет Cron To Go)

person SNeumann    schedule 10.05.2021

Если хотите:

  • Используйте 1_
  • Запускать задачи каждую минуту (не 10 мин)
  • Не волнуйтесь о динамометрических часах

Это было мое решение, позволяющее запускать задания каждую минуту - при условии, что задача выполняется менее чем за 60 секунд.

task start_my_service: :environment do
  1.upto(9) do |iteration|
    start_time = DateTime.now
    Services::MyService.call
    end_time = DateTime.now
    wait_time = 60 - ((end_time - start_time) * 24 * 60 * 60).to_i
    sleep wait_time if wait_time > 0
  end
end
person whodini9    schedule 07.10.2020