2015-06-15 3 views
0

У меня есть приложение Django, развернутое с помощью Passenger (я не выбирал mod_wsgi, потому что mod_passenger уже существует и используется). Когда я загрузил файл MP3 (900 kB), Google Chrome отображает загрузку%, которая достигла 100% довольно быстро, но затем она навсегда осталась на результирующей странице. База данных (содержащая метаданные файла) не показывает ничего загруженного.Загрузка файла Django навсегда с Phusion Passenger

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

Мой конфиг: Django 1.8, Apache 2.4, Ubuntu 14,04

+0

Совместное использование настроек Django и журналов для пассажиров будет полезно ответить. – moonstruck

+0

Я не могу найти журналы для пассажиров, только журналы ошибок/доступа apache, которые не показывают ничего общего. Это не приложение rails, а приложение django, в корневом каталоге которого нет подкаталога журнала – cpliu338

+0

Я могу найти /tmp/passenger.1.0.1354/generation-1/buffered_uploads, который принадлежит www-данным и имеет разрешение drwx --- --- Временная метка этого каталога отражает время, которое я загружаю, но контент всегда пуст в течение времени, затраченного на загрузку большого файла. – cpliu338

ответ

1

Passenger автора здесь. Попытайтесь установить значение параметра__диска__диска на более высокое значение, что может дать вам представление о том, почему это происходит.

Я не знаю, какую версию Passenger вы используете, но в версии 5, цикл обработки запроса Passenger выглядит следующим образом:

  1. Apache получает запрос. Как только заголовки завершены, он пересылает запрос процессу сервера Пассажира, одновременно передавая тело запроса процессу сервера Пассажира.
  2. Процесс сервера Пассажира обрабатывает весь запрос, включая тело. Эта буферизация происходит во временном файле, который немедленно откладывается.
  3. Как только буферизация завершена, процесс сервера Passenger пересылает запрос (включая тело) в приложение Django. Затем пассажир ожидает, что приложение будет генерировать ответ.
  4. Процесс сервера Passenger передает ответ от приложения Django на Apache. Здесь нет блокирующей буферизации.
  5. Apache передает ответ от процесса сервера Passenger клиенту. Здесь нет буферизации.

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

Обратите внимание, что в более ранних версиях Пассажира цикл обработки запросов отличается. Мой совет относится только к версии 5.

+0

Мой пассажир: ruby-пассажир: amd64/trusty 4.0.37-2 Я установил уровень журнала 4, и я подготовлю отрывок error.log, который я опубликую в следующем комментарии. – cpliu338

+0

Выдержка из журнала находится в https://drive.google.com/file/d/0B-EFDVFnXfbtZXR2bnhmUG5FLWc/view?usp=sharing – cpliu338

+0

В файле журнала не указано ничего плохого. Все запросы обрабатываются почти мгновенно. Какое время ответа вы испытываете? – Hongli