Rails3 отложенная загрузка ftp - PullRequest
0 голосов
/ 17 июня 2011

Мне нужен способ реализовать отложенные загрузки FTP на разные серверы в приложении Rails3. Это будет сценарий:

  1. Пользователь создает папку, полную файлов и подпапок, с помощью простой Rails3 CMS (DONE)
  2. Когда пользователь заканчивает свою работу, он нажимает кнопку развертывания.
  3. Система берет управление и сохраняет запрос пользователя.
  4. Систен возвращает управление пользователю, таким образом он может работать с другими вещами.
  5. Одновременно система инициирует 10 FTP загрузок из той же папки.
  6. Когда загрузка завершится, она сохранит где-то свой статус.
  7. Пользователь может в любое время просмотреть состояние развертывания, перейдя на определенную страницу.

Размер загружаемых папок будет от 600Mb до 1Gb . Они будут содержать изображения в формате PNG, небольшие фильмы в формате mp4 и файлы xml.

Веб-сервер и весь ftp-сервер будут находиться в одной сети, в одной подсети. На данный момент нет необходимости в дополнительной безопасности. Я совершенно новичок в асинхронных или отложенных заданиях. Приложение будет иметь только одного или двух пользователей: не нужно обрабатывать много запросов на развертывание одновременно.

Как я могу выполнить эту задачу? Если вам нужна дополнительная информация, пожалуйста, спрашивайте в комментариях.

1 Ответ

1 голос
/ 17 июня 2011

После того, как вы настроили delayed_job, вы можете установить метод для выполнения в фоновом режиме, пока вы занимаетесь своими делами.В этом случае метод развертывания всегда будет в фоновом режиме, установленном handle_asynchronously.

class UploadStatus < ActiveRecord::Base

  def deploy
     # write your ftp loop here
     # periodically update this model in the db with the status
  end
  handle_asynchronously :deploy

end

Теперь вы можете просто вызвать @upload_status.deploy(), и он будет работать в фоновом режиме.

Вы также можете написать метод задания, но я думаю, что он имеет больше смысла в классе ActiveRecord, поскольку вы будете обновлять состояние развертывания.

...