Динамическое создание файла часов (или любого файла) во время развертывания 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 при запуске приложения. Это дает мне возможность планировать или не планировать определенные задачи на основе конфигураций среды и т. Д.
Позволяет ли Heroku "записывать" файл в любой точке вашей локальной файловой системы, чтобы я мог сгенерировать и записать
clock.rb
файл на этапе инициализации?Есть ли способ отложить выполнение запуска динамо с
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.