Масштабирование приложения, которое попадает на внешние apis - PullRequest
0 голосов
/ 23 марта 2011

Я использую beanstalkd для фонового процесса API-вызовов в Facebook Graph API, и я хочу, чтобы приложение обновлялось, то есть нажимает Facebook API каждые 10 минут, чтобы получить информацию. Я думал о создании простого скрипта, который загружает необходимую информацию из базы данных (fb ids / urls), ставит задания в очередь в beanstalkd и затем спит в течение 9 минут. Возможно, используйте Бога, чтобы убедиться, что скрипт продолжает работать / перезапускаться, если потребление памяти становится слишком большим.

Затем я начал читать о drbs и подумал, есть ли способ / необходимость их интеграции.

Я спросил в #rubyonrails и получил cron и обычный rb скрипт в качестве двух вариантов. Просто интересно, есть ли лучший способ.

1 Ответ

1 голос
/ 23 марта 2011

Я бы порекомендовал, для простоты настройки, используя delayed_job и cronjob, который вызывает задачу rake, которая имеет дело с очередями заданий.хорошая альтернатива Богу и, кажется, более стабильная и менее требовательная к памяти для мониторинга процессов.

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

namespace :delayed_job do
  def rails_env
   fetch(:rails_env, false) ? "RAILS_ENV=#{fetch(:rails_env)}" : ''
  end

  desc "Stop the delayed_job process"
   task :stop, :roles => :app do
   run "cd #{current_path};#{rails_env} script/delayed_job stop"
  end

  desc "Start the delayed_job process"
    task :start, :roles => :app do
    run "cd #{current_path};#{rails_env} script/delayed_job start"
  end

  desc "Restart the delayed_job process"
    task :restart, :roles => :app do
    run "cd #{current_path};#{rails_env} script/delayed_job stop"
    run "cd #{current_path};#{rails_env} script/delayed_job start"
  end
end

Мне пришлось извлечь эти получатели из гема delayed_job, чтобы они запустились.

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