Лучшая практика для Приложения для направляющих для выполнения долгой задачи в фоновом режиме?

Я решил это, поставив следующее на моей странице login.php.

<script type="text/javascript">
    if (top.location.href.indexOf('login.php') == -1) {
        top.location.href = '/login.php';
    }
</script>
32
задан 7 revs, 2 users 59% 20 February 2009 в 17:10
поделиться

11 ответов

плагин Workling позволяет Вам планировать фоновые задачи в очереди (они выполнили бы долгую задачу). С версии 0.3 можно попросить у рабочего ее состояния, это позволило бы Вам отображать некоторые изящные индикаторы выполнения.

Другая замечательная функция с Workling - то, что асинхронный бэкенд может быть переключен: Вы можете, использовал DelayedJobs, Икра (классическое ветвление), Скворец...

24
ответ дан 27 November 2019 в 21:04
поделиться

У меня есть сайт очень большого объема, который генерирует много больших файлов CSV. Они иногда занимают несколько минут для завершения. Я делаю следующее:

  • у меня есть таблица заданий с деталями требуемого файла. Когда пользователь запрашивает файл, запрос входит в ту таблицу, и пользователь взят к "странице" состояния заданий, которая перечисляет все их задания.
  • у меня есть задача граблей, которая выполняет все выдающиеся задания (метод класса для модели Job).
  • у меня есть отдельная установка направляющих на другом поле, которое обрабатывает эти задания. Это поле просто делает работы и не доступно для внешнего мира.
  • На этом отдельном поле, крон прогоны задания все выдающиеся задания каждые 60 секунд, если задания все еще не работают от последнего вызова.
  • страница состояния задания пользователя автообновляется для проявления состояния задания (который обновляется полем заданий, когда задание запускается, выполнение, затем закончилось). После того как задание сделано, ссылка появляется в файл результатов.

Это может быть слишком мощно, если Вы просто планируете иметь одно или два выполнения за один раз, но если Вы хотите масштабироваться... :)

6
ответ дан 27 November 2019 в 21:04
поделиться

вызов./script/runner в фоновом режиме работал лучше всего на меня. (Я также делал поколение PDF.) Это походит на наименьший общий знаменатель, также будучи самым простым для реализации. Вот рецензия моего опыта .

4
ответ дан 27 November 2019 в 21:04
поделиться

Простое решение, которое не требует никаких дополнительных Драгоценных камней или плагинов, состояло бы в том, чтобы создать пользовательскую задачу Граблей для обработки поколения PDF. Вы могли смоделировать процесс поколения PDF как конечный автомат с состояниями такой, поскольку отправил , обработка и завершенный , которые хранятся в таблице базы данных модели. Первоначальный Запрос HTTP к приложению направляющих просто добавил бы, что запись на таблицу с отправила состояние и возврат.

было бы задание крона, которое выполняет Вашу пользовательскую задачу Граблей как отдельный процесс Ruby, таким образом, основное приложение направляющих незатронуто. Задача Граблей может использовать ActiveRecord для нахождения всех моделей, которые имеют , отправил состояние, измените состояние на обработка и затем генерируйте связанный PDFs. Наконец, это должно установить состояние на завершенный . Это позволяет Вашим вызовам Ajax в рамках приложения для направляющих контролировать состояние процесса поколения PDF.

при помещении задачи Граблей в [1 113] your_rails_app/lib/tasks затем, это имеет доступ к моделям в рамках приложения направляющих. Скелет такого pdf_generator.rake был бы похож на это:

namespace :pdfgenerator do
  desc 'Generates PDFs etc.'
  task :run => :environment do

    # Code goes here...
  end
end

, Как отмечено в Wiki, существует несколько оборотных сторон к этому подходу. Вы будете использовать крон для регулярного создания справедливо, для процесса тяжеловеса Ruby и синхронизации заданий крона была бы нужна тщательная настройка, чтобы гарантировать, что у каждого есть достаточное количество времени для завершения, прежде чем следующий придет. Однако подход прост и должен удовлетворить Ваши потребности.

2
ответ дан 27 November 2019 в 21:04
поделиться

я использую Windows Vista 64 бита для моей машины разработки; однако, моя производственная машина является Ubuntu 8.04 LTS. Я должен рассмотреть переключение на Linux для моей машины разработки? Будут решения представили работу над обоими?

Вы рассмотрели под управлением Linux в VM сверху Vista?

1
ответ дан 27 November 2019 в 21:04
поделиться

Это действительно походит на что-то, что у Вас должно быть выполнение фонового процесса, а не экземпляр приложения (пассажир/полукровка, какой бы ни Вы используете) как тот способ, которым Ваше приложение может остаться делающим, что это, как предполагается, делает, служа запросам, в то время как фоновая задача некоторого вида, Workling хорош, обрабатывает перемалывание чисел. Я знаю, что это не занимается проблемой прогресса, но если не абсолютно необходимо, чтобы я думал, что это - маленькая цена для оплаты.

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

1
ответ дан 27 November 2019 в 21:04
поделиться

Я использую Фоновое задание ( http://codeforpeople.rubyforge.org/svn/bj/trunk/README ) для планирования задач. Я создаю небольшой сайт администрирования, который позволяет администраторам сайта выполнять все виды вещей Вы, и я работал бы из командной строки от хорошего веб-интерфейса.

0
ответ дан 27 November 2019 в 21:04
поделиться

Существует совершенно новое Growl4Rails..., который является для этого определенного варианта использования (среди других также).

http://www.writebetterbits.com/2009/01/update-to-growl4rails.html

0
ответ дан 27 November 2019 в 21:04
поделиться

Я знаю, что Вы сказали, что не волновались по поводу стороны клиента, но я думал, что Вы могли бы найти это интересным: Growl4Rails - уведомления о стиле Рычания, которые были разработаны для в значительной степени, что Вы делаете оценку по примеру, что они используют.

0
ответ дан 27 November 2019 в 21:04
поделиться

Я использовал икра прежде и определенно рекомендовал бы это.

Невероятно простой настроить (который не много других решений), и работает хорошо.

0
ответ дан 27 November 2019 в 21:04
поделиться

Выезд BackgrounDRb, это разработано для точно сценария, который Вы описываете.

я думаю, что это было вокруг некоторое время и довольно зрело. Можно контролировать состояние рабочих.

Это - довольно хорошая идея разработать на той же платформе разработки как Ваша продуктивная среда, особенно при работе с направляющими. Предложение для выполнения Linux в VM является хорошим. Выезд Sun xVM для программного обеспечения виртуализации С открытым исходным кодом.

0
ответ дан 27 November 2019 в 21:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: