Динамическое создание файла часов (или любого файла) во время развертывания Rails на Heroku

Я использую гем Clockwork для планирования заданий в приложении Rails, развернутом с Heroku.

Для незнакомых это в основном читает из clock.rb файл в корне вашего приложения..

# config.rb

# Schedule every Monday @ 13:00 UTC
every(1.week, "some description", at: "Monday 13:00", tz: "UTC"){
  `rake clock_tasks:my_task`
}

... и есть специальный Dyno, который запускает процесс синхронизации.

# Procfile
...
clock: bundle exec clockwork clock.rb
...

Ну, что, если я не хочу жестко кодировать файл часов? Я хотел бы иметь возможность генерировать clock.rb динамически используя ERB при запуске приложения. Это дает мне возможность планировать или не планировать определенные задачи на основе конфигураций среды и т. Д.

  1. Позволяет ли Heroku "записывать" файл в любой точке вашей локальной файловой системы, чтобы я мог сгенерировать и записать clock.rb файл на этапе инициализации?

  2. Есть ли способ отложить выполнение запуска динамо с bundle exec Команда до ПОСЛЕ того, как я создал clock.rb файл? Я мог бы начать с поддельного / пустого файла, а затем заполнить новый во время инициализации, но мне все еще нужен был бы способ, чтобы часы могли его снова поднять, перезапустив bundle exec clockwork... команда.

Любые другие креативные решения приветствуются.

Спасибо!

1 ответ

Решение

Вы config.rb это просто рубин Там нет необходимости ERBОбычный рубин в сочетании с ENV переменных должно быть достаточно, чтобы решить вашу проблему:

# Schedule every `ENV['schedule_time']` (with fallback if empty)
schedule_time = ENV['schedule_time'].presence || 'Monday 13:00'
every(1.week, "some description", at: schedule_time, tz: "UTC") {
  `rake clock_tasks:my_task`
}

Или вы можете написать что-то вроде этого:

if ENV[`foo`]
  # config bar
else
  # config baz
end

Возможно, вы захотите прочитать разделы "Конфигурация" и "Конфигурация" о том, как устанавливать и читать переменные среды в Heroku.

Другие вопросы по тегам