Ruby on Rails: управление заданиями Cron с помощью Mina и Whenever - PullRequest
0 голосов
/ 10 октября 2018

Я пытаюсь перенести изменения, в том числе спецификации заданий Cron, используя Whenever, на работающий сервер, используя Mina.

Я использовал статью здесь какруководство к тому, что мне нужно добавить в мои текущие deploy.rb для настройки заданий cron на сервере

В статье предлагается:

# Whenever tasks in config/deploy.rb
desc "Update cron jobs"
task :update_cron_jobs => :environment do
    queue "bundle exec whenever --update-crontab --set 'path=#{app_root_directory}/current/'"
    queue %[echo "-----> Updated Whenever cron jobs."]
end

Здесь есть несколько ловушек: 1) Нам нужно присвоить идентификатору уникальное имя (обычно мы выбираем имя нашего приложения).Это важно, так как поведение Everyever по умолчанию заключается в использовании текущего пути, который, в случае развертывания Mina, уникален при каждом развертывании.Поэтому, если вы не устанавливали идентификатор, каждый раз, когда вы вызываете: update_cron_jobs, на сервере будут создаваться дублированные задания cron, поскольку всякий раз, когда вы не сможете идентифицировать ранее созданные им задания cron.(Один из наших производственных серверов умер таким образом ... :() Каждый раз, когда вы развертываете через Mina, Mina помещает ваш код в новую папку / release /, а затем, если развертывание прошло успешно, Mina будет использовать символическую ссылку # {app_root_directory} /текущая в новую папку выпуска. Символьная ссылка похожа на ярлык или указатель, указывающий на другое местоположение. 2) Всякая командная строка фактически выполняется из папки / Releases /, поэтому мы хотим явно указать путь для генерируемых заданий cron (--set 'path = # {app_root_directory} / current /').Это создает более согласованные и стабильные задания cron.3) Убедитесь, что вы правильно установили # {app_root_directory} в своем сценарии развертывания Mina.

Как только у нас появится задача, мы можем легко добавить ее в сценарий развертывания Mina.Просто добавьте строку invoke: update_cron_jobs в ваш config / deploy.rb, как показано ниже: desc «Развертывает текущую версию на сервере.»

task :deploy => :environment do
    deploy do
        invoke :'git:clone'
        invoke :'deploy:link_shared_paths'
        invoke :'bundle:install'
        invoke :'rails:db_migrate'
        invoke :'rails:assets_precompile'
        invoke :'update_cron_jobs' # <-- NEW LINE
        to :launch do
            queue "mkdir -p #{deploy_to}/#{current_path}/tmp"
            queue "touch #{deploy_to}/#{current_path}/tmp/restart.txt"
        end
    end
end

Когда я пытаюсь реализовать эти изменения, я получаюряд ошибок / проблем:

queue "bundle exec whenever --update-crontab --set 'path=#{app_root_directory}/current/'"

Я предполагаю, что это следует настроить, в моем случае я буду использовать уже определенную переменную :deploy_to (set :deploy_to, "/home/#{fetch(:user)}/app")

queue "bundle exec whenever --update-crontab --set 'path=#{fetch(:deploy_to)}/current/'"

После внесения изменений, приведенных выше, я получаю сообщение об ошибке, указывающее, что queue не является распознанной командой.

Может ли кто-нибудь поделиться аналогичной задачей из файла deploy.rb или предложить, как это сделать?Я должен пересмотреть это, пожалуйста?

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