Как использовать путь в заданиях cron на сервере с несколькими приложениями Rails с разными версиями Ruby - PullRequest
0 голосов
/ 25 февраля 2020

У меня есть сервер с двумя Ruby приложениями на Rails, и каждое из этих приложений работает под разными Ruby версиями. Я использую RVM в качестве Ruby диспетчера версий.

Для обоих приложений запланированы задачи cron, и для создания файла конфигурации cron используется geevereverever, как показано ниже.

При создании В файле cron каждое приложение записывает свой путь с определенным путем к исполняемому файлу Ruby в файле cron.

Может ли это вызвать конфликт? Если да, каков наилучший подход для правильного запуска задач cron обоих проектов?

# Begin Whenever generated tasks for: astego at: 2020-02-20 19:09:55 +0000
PATH=/var/www/astego/shared/bundle/ruby/2.4.0/bin:/home/deploy/.rvm/gems/ruby-2.4.2/bin:/home/deploy/.rvm/gems/ruby-2.4.2@global/bin:/home/deploy/.rvm/rubies/ruby-2.4.2/bin:/home/deploy/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

50 6 * * * /bin/bash -l -c 'cd /var/www/astego/releases/20200220190804 && bundle exec bin/rails runner -e production '\''User.send_birthday_message'\'''

0 4 1 * * /bin/bash -l -c 'cd /var/www/astego/releases/20200220190804 && bundle exec bin/rails runner -e production '\''User.send_last_three_months_unpaid'\'''

# End Whenever generated tasks for: astego at: 2020-02-20 19:09:55 +0000

# Begin Whenever generated tasks for: importador_atual at: 2020-02-19 21:12:31 +0000
PATH=/var/www/importador_atual/shared/bundle/ruby/2.7.0/bin:/home/deploy/.rvm/gems/ruby-2.7.0/bin:/home/deploy/.rvm/gems/ruby-2.7.0@global/bin:/home/deploy/.rvm/rubies/ruby-2.7.0/bin:/home/deploy/.rvm/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

0 23 * * * /bin/bash -l -c 'cd /var/www/importador_atual/releases/20200219211048 && bundle exec bin/rails runner -e production '\''ImportarService.importar'\'''

# End Whenever generated tasks for: importador_atual at: 2020-02-19 21:12:31 +0000

1 Ответ

0 голосов
/ 25 февраля 2020

Задание, выполняемое в crontab, является совершенно отдельной задачей, выполняемой в собственной среде. Можно связать вещи так, чтобы они разговаривали или конфликтовали, но общие приложения не знают друг друга.

Пока ваши Rails-приложения используют отдельные порты сервера и пишут в отдельные файлы, у вас все будет в порядке.

Реальные задачи, которые вы выполняете, - это не то, что мы обычно включаем в cron скрипт; Обычно Rails - это длительная задача, которая не запускается по повторному расписанию. Запуск небольшого запланированного приложения, являющегося частью сайта Rails, обычно выполняется в crontab с использованием rails runner или в качестве задачи Rake. (Я рекомендую первое, но большинство людей, кажется, не знают о его существовании и используют Rake.) Я бы порекомендовал изучить это и решить, правильно ли вы поступите. rails runner упрощает доступ к БД и всем моделям Rails, как и в обычной среде Rails, он просто без головы, что приводит к более легкому коду и более быстрому запуску.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...