Сделать файлы, созданные в фоновом режиме, доступными для загрузки - PullRequest
2 голосов
/ 16 декабря 2011

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

Я хочу внедрить background job, который будет генерировать этот отчет в конце каждого квартала и делать его доступным для загрузки в виде ссылки на странице просмотра.

Каждый квартал длится 3 месяца, например: на March 31st 11:59 PM я хочу, чтобы он генерировал отчет об использовании сайта с 1 января по 31 марта и делал его доступным для загрузки на странице просмотра.

Я предпочитаю использовать whenever gem, если это возможно, поскольку я уже использую его для переиндексации моделей через определенные промежутки времени. Все возможные предложения приветствуются !!

Пожалуйста, помогите мне, как это сделать !!

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

Я бы порекомендовал Gems DelayedJob (2.1 для Rails 3.0+) или Resque для создания фоновых заданий, размещения их в нескольких очередях и последующей их обработки. Есть хорошие Railscasts для обоих.

1 голос
/ 16 декабря 2011

Вы можете добавить класс ReportGenerator и использовать его в Rails Runner. Этот класс будет рассчитывать диапазон дат, генерировать отчет и сохранять в публичной директории вашего приложения. Вы должны заметить, что каждый файл в публичной директории доступен для всех. Если вам не нужны какие-либо полномочия для доступа к этому файлу, вы можете, например, поместить его в другой каталог - не публичный и разослать его через свое приложение (цель авторизации), используя http-заголовок X-Sendfile для Apache.

ReportGenerator.new(:quater => 4).generate

Чтобы узнать, какой у вас кватер:

quaters => {
  1 => "definition of 1st quater (date ranges)",
  2 => "definition of 2nd quater (date ranges)",
  3 => "definition of 3rd quater (date ranges)",
  4 => "definition of 4th quater (date ranges)".
}
quater = Date.today.month / 3
...