Как разместить изображения непосредственно на s3 в приложении heroku из запроса json? - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть приложение rails, размещенное на heroku, и мобильное приложение, созданное на Rhodes.

Я хочу отправить изображения из мобильного приложения в мое приложение rails, используя запрос HTTP POST. Поскольку heroku не позволяет вам хранить файлы, я использую amazon s3.

Я не могу отправить файл из heroku на s3, потому что это занимает более 30 секунд и вызывает тайм-аут. Я видел множество примеров загрузки файла прямо на s3, когда у пользователя есть форма, но в этом случае это явно не сработает.

Я попытался использовать предложение здесь:

rails 3, heroku, aws-s3, просто пытается загрузить в S3 файл, отправленный по почте (http / multipart) в наше приложение

но я все еще получаю таймаут 503 запроса.

Я не хочу вставлять в приложение ключи amazon s3.

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

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

Ответы [ 2 ]

2 голосов
/ 26 мая 2012

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

Некоторые другие люди говорят, что " Тайм-аут Heroku - это сложная штука, с которой вам нужно обойтись. Прямая загрузка на S3 - единственный вариант, требующий какой-то обработки после загрузки " Поэтому я рекомендую сделать следующее:

Возможно, это не решение, но оно может быть очень полезным, оно было для меня в приложении Rails:

Рабочие Dynos, фоновые задания и очереди

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

Привет!

0 голосов
/ 12 июня 2012

Итак, я наконец понял, как это сделать.

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

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

Тогда мне просто нужно было общаться между двумя приложениями на rails.

Я знаю, что это не самое лучшее / масштабируемое / элегантное исправление, но оно выполнило свою работу, и это главное в итоге!

...