Поиск машины развертывания, в которой вы находитесь, в коде (Rails) - PullRequest
0 голосов
/ 23 августа 2010

Мое приложение rails развернуто на нескольких машинах.Мне нужно, чтобы на каждой машине выполнялись разные задания cron (если все они запустят работу, это будет катастрофой).Как мне сообщить моему сценарию, на каком компьютере он находится в данный момент?

Я использую гем всякий раз и собираюсь добавить условие в расписание.

Мой deploy / production.rb

role :memcache, "123.compute-1.amazonaws.com"
role :web,      "456.compute-1.amazonaws.com"
role :db,       "789.amazonaws.com"
role :misc,     "789.amazonaws.com"

Что мне нужно сделать:

if machine is db, email report every day on db capacity

if machine is xxx, do xxx...

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Просто пришлось много поохотиться и поэкспериментировать, но, думаю, я понял, как этого добиться.Создайте отдельные файлы конфигурации для каждой роли / сервера, на котором вам нужен crontab.Затем определите только нужные задачи в каждом файле конфигурации.Наконец, что-то вроде этого в вашем deploy.rb:

namespace :deploy do
  desc "Update the db crontab file"
  task :update_db_crontab, :roles => :db do
    run "cd #{current_path} && whenever -fconfig/schedule_db.rb --set environment=#{rails_env} --update-crontab #{application}_db"
  end
  desc "Update the app crontab file"
  task :update_app_crontab, :roles => :app do
    run "cd #{current_path} && whenever -fconfig/schedule_app.rb --set environment=#{rails_env} --update-crontab #{application}_app"
  end
end

after "deploy:symlink", "deploy:update_db_crontab"
after "deploy:symlink", "deploy:update_app_crontab"
1 голос
/ 23 августа 2010

Вы можете настроить задачи capistrano так, чтобы они выполнялись только для определенных ролей (я предполагаю, что вы используете capistrano из вызовов role).

Например:

task :db_cron_jobs, :only => :db do
  # Use deprec recipes to update crontab
  deprec2.update_user_crontab('cron_user', @daily 'send_out_emails_command')
end
after 'deploy:setup', 'db_cron_jobs' 

task :web_cron_jobs, :only => :web do
  # Other automated tasks
end
after 'deploy:setup', 'web_cron_jobs'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...