Rails: когда-нибудь + delayed_job для оптимизации рейковых задач? - PullRequest
3 голосов
/ 03 июня 2011

Я использую всякий раз, когда для вызова граблей в течение дня, но каждая задача запускает новую среду Rails.Как я могу запускать задачи в течение дня, не перезапуская Rails для каждой работы?

Вот что я придумал, хотел бы получить отзыв об этом ...?

  1. Переформулируйте каждую задачу rake, чтобы она вместо этого была методом в соответствующей Модели.

  2. Используйте гем delayed_job , чтобы назначить низкий приоритет и обеспечить выполнение этих методов асинхронно.

  3. Поручить всякий раз, когда вызывать каждый метод Model.dode вместо вызова грабли

Имеет ли это решение смысл?Поможет ли это избежать запуска новой среды Rails для каждой работы?.. или есть лучший способ сделать это?

-

Running Rails 3

Ответы [ 3 ]

4 голосов
/ 04 июня 2011

Вы, конечно, можете посмотреть в очередь delayed_jobs с помощью cron, а затем иметь одного долго работающего работника delayed_job.

Тогда вы могли бы использовать whenever, чтобы помочь вам создать методы постановки в очередь delayed_job.Вероятно, проще всего иметь в whenever выводе cron небольшой скрипт-обертку, который загружает active_record и delayed_job напрямую, а не весь стек rails.http://snippets.aktagon.com/snippets/257-How-to-use-ActiveRecord-without-Rails

Возможно, вы также захотите посмотреть на clockwork.rb, который представляет собой длительный процесс, который будет делать то же самое, что вы используете для cron (ставя в очередь delayed_jobs): http://rubydoc.info/gems/clockwork/0.2.3/frames

Вы также можете просто попробовать использовать стратегию очередей в ваших delayed_jobs: https://gist.github.com/704047

0 голосов
/ 21 декабря 2016

Прокомментируйте эту строку из schedule.rb

require File.expand_path(File.dirname(__FILE__) + "/environment")

Вместо этого загружайте только необходимые файлы ruby, например, модели в вашем случае.

0 голосов
/ 10 июня 2011

Множество хороших решений этой проблемы, одна из которых я в итоге интегрировал, выглядит следующим образом:

  1. Перенес мой код рейка в соответствующие модели
  2. Добавлен контроллер / код маршрутизациидля вызова методов моделей из браузера
  3. Сконфигурированные cronjobs с использованием гема whenever для запуска command 'curl mywebsite.com/model#method'

Я попытался запустить delayed_job, но идея запуска не понравиласьдругой экземпляр Rails.Мои методы не слишком требовательны к серверу, и приведенное выше решение позволяет мне использовать уже работающую среду Rails.

...