У меня есть приложение для рельсов, работающее на Heroku. Я пытаюсь добавить функцию, которая позволяет пользователям загружать некоторые из своих данных в формате CSV. Файлы CSV являются большими (~ 1-2 МБ), и они медленно генерируются. Чтобы не связывать свои веб-диноды, я передаю запрос на загрузку на рабочие динамики (используя Resque) и собираю CSV. Мой рабочий-реск выглядит примерно так.Как отправить данные клиенту от работника-спасателя?
class Downloader
def self.perform(ids_to_download)
models = Model.where(:id => ids_to_download)
csv_data_for_client = models.to_csv
end
end
Мне интересно, как лучше отправить файл csv клиенту, который его запросил.
Если этот код был в контроллере Rails, это может быть выполнено просто с send_data csv_data_for_client
. Тем не менее, этот подход, похоже, не работает из рабочего Resque.
От исследования SO и в других местах в Интернете, кажется, у меня есть несколько вариантов.
- Отправьте данные непосредственно из рабочего Resque (Хотя я не уверен, если это возможно)
- Сохранить данные в Heroku файловой системы, восстановить его в контроллере, а затем отправить его с
send_data
- Сохраните его в базу данных (PostgreSQL), получить его в контроллере, а затем использовать
send_data
Может кто-нибудь дать советы на лучший способ продолжить? Благодарю.
Просто загрузите с помощью Paperclip и, если он настроен для загрузки на S3, он также должен сохранить ссылку на файл в базе данных. Я так старался, что он работает как шарм. –
Huh. Круто. Я никогда не слышал о Паперклипе. Я посмотрю. –