2015-09-22 3 views
0

Мне нужно отправить клиентам необработанные электронные письма через мое приложение rails.Отправить данные большого размера с помощью Rails

Когда они нажимают на ссылку, открывается новая страница, и они должны иметь возможность видеть исходный код электронной почты. У меня много случаев, когда электронные письма действительно большие (даже 40/50 мб), и для отправки его требуется много времени. E.G.

У меня есть электронное письмо с 3 вложениями, общий размер 30 мб. Мой метод управления занимает 700 мс для его обработки и для получения исходного источника с сервера imap, но в broswer он занимает до 5 секунд. (От 2,5 до первого байта, 2,5 для загрузки).

Прямо сейчас я просто отправлю строку с помощью метода рендеринга. Есть ли способ лучше? где я теряю все это время?

Чтобы быть более ясным:

Со словом «отправить» Я имею в виду, когда сервер должен «отправить» исходный код в браузере, так что Суер может визуализировать его

+0

* «Мне нужно отправить [...] сырые электронные письма» * - ваши клиенты действительно хотят видеть исходный код электронной почты? – Stefan

+0

есть. И вообще, та же проблема связана с вложениями ... как я могу сделать приложение для загрузки с рельсами? – ciaoben

ответ

0

насчет хранения насадок на ваш сервер и включите в электронную почту только ссылки на эти вложения? Таким образом, ваши электронные письма будут невероятно быстрыми, и клиенты могут загружать приложения отдельно. Если вы не хотите хранить файлы на своем сервере, вы можете использовать Amazon S3 или другое облачное хранилище (в наши дни их много).

Чтобы облегчить загрузку файлов, я бы рекомендовал вам библиотеку carrierwave, Amazon S3 Интеграция идет из коробки.

0

Я хотел бы предложить вам использовать Отложенную Работу: https://github.com/collectiveidea/delayed_job или Sidkiq: https://github.com/mperham/sidekiq

Когда работа находится в состоянии обработки, можно отметить, что электронную почту, как Sending.... и когда фоновая работа закончена, Вы можете пометить его как Sent

Надеется, что это помогает

+0

Возможно, я плохо объяснил свою проблему, когда слово «отправить» я имею в виду, когда сервер должен «отправить» исходный код в браузер, чтобы суфер мог визуализировать его. – ciaoben

+0

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

+0

Да ... часть приема уже сделана. Теперь у меня есть base64-кодировка файла и вы хотите, чтобы пользователь мог его загрузить. – ciaoben

0

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

Это сложно с серверами на стойке, поэтому у Rails могут возникнуть проблемы с этим подходом.

Другой подход - попытаться разделить исходный источник на куски и запросить каждый кусок с помощью Ajax.

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

Если бы я пытался решить проблему, я бы рассмотрел решение Ajax, которое позволило бы мне использовать IMAP's partial fetch feature, упомянутый в it's RFC.

Можно написать простой API-интерфейс на стороне сервера, который извлекает часть сообщения электронной почты или возвращает сигнал, когда загрузка не загружается, и использовать Javascript для запроса данных с сервера до тех пор, пока не вернется «больше данных» значение получено.

Это позволит вам отображать загруженные данные по мере их получения.

Смежные вопросы