2014-10-02 1 views
1

В последнее время проблема с загрузкой файлов была вызвана множеством пользователей в моей системе. В основном, пользователи регистрируются в системе загрузки в течение дня и отправляют файлы, которые обычно составляют 1-3 МБ в партиях, как правило, 1-10 файлов. Когда пользователь загружает файл или пакет в течение определенного времени, загрузка файла для dropzone завершается с сообщением пользователю «Сервер ответил 0 кодом». Иногда эта проблема возникает, но я могу легко реплицировать проблему в любое время, если я попытаюсь загрузить большой файл (ы), который занимает несколько минут для загрузки. До сих пор я искал и пробовал много вещей, но проблема все еще возникает.Laravel, Dropzone.js, время истечения времени загрузки файла Apache

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

Система построена с использованием Laravel PHP, Dropzone.js, Mysql и Apache. Ниже приведена некоторая информация о журналах ошибок, файлах конфигурации и том, что я пробовал.

Вот что Laravel журналы ошибок сообщают после загрузки не удается:

[2014-10-02 15:52:26] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' in /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1429 
Stack trace: 
#0 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1050): Illuminate\Routing\Router->handleRoutingException(Object(Symfony\Component\Routing\Exception\ResourceNotFoundException)) 
#1 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1014): Illuminate\Routing\Router->findRoute(Object(Illuminate\Http\Request)) 
#2 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(576): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) 
#3 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(552): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request)) 
#4 /usr/www/www.example.com/beta/public/index.php(49): Illuminate\Foundation\Application->run() 
#5 {main} [] [] 
[2014-10-02 15:52:29] log.ERROR: exception 'Symfony\Component\HttpKernel\Exception\NotFoundHttpException' with message 'Controller method not found.' in /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php:290 
Stack trace: 
#0 [internal function]: Illuminate\Routing\Controllers\Controller->missingMethod(Array) 
#1 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php(138): call_user_func_array(Array, Array) 
#2 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Controllers/Controller.php(115): Illuminate\Routing\Controllers\Controller->callMethod('missingMethod', Array) 
#3 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(985): Illuminate\Routing\Controllers\Controller->callAction(Object(Illuminate\Foundation\Application), Object(Illuminate\Routing\Router), 'missingMethod', Array) 
#4 [internal function]: Illuminate\Routing\Router->Illuminate\Routing\{closure}(Array) 
#5 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Route.php(80): call_user_func_array(Object(Closure), Array) 
#6 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Route.php(47): Illuminate\Routing\Route->callCallable() 
#7 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Routing/Router.php(1016): Illuminate\Routing\Route->run(Object(Illuminate\Http\Request)) 
#8 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(576): Illuminate\Routing\Router->dispatch(Object(Illuminate\Http\Request)) 
#9 /usr/www/www.example.com/beta/vendor/laravel/framework/src/Illuminate/Foundation/Application.php(552): Illuminate\Foundation\Application->dispatch(Object(Illuminate\Http\Request)) 
#10 /usr/www/www.example.com/beta/public/index.php(49): Illuminate\Foundation\Application->run() 
#11 {main} [] [] 

Вот некоторые настройки для Apache (httpd.conf):

KeepAlive On 
MaxKeepAliveRequests 500 
KeepAliveTimeout 5 
ServerLimit 513 
MaxClients 100 
MaxRequestsPerChild 10000 

Я изменил эти параметры по-разному например, увеличение тайм-аутов/максимальных значений до 500, но все те же результаты. Загрузка не выполняется в определенное время и, похоже, полностью игнорирует эти настройки.

Вот некоторые настройки в php.ini

default_socket_timeout = 500 
mysql.connect_timeout = 500 
max_execution_time = 1200 
max_input_time = 1200 
file_uploads = On 
max_file_uploads = 50 
post_max_size = 2047M 
upload_max_filesize = 2047M 
memory_limit = 258M 

Вот файл .htaccess Laravel

Options -Indexes 

Я также попытался изменения dropzone.js AJAX загрузить код, добавив «xhr.timeout = 4000" . Добавив эту строку в dropzone.js, загрузка будет частично загружена на индикатор выполнения, но тогда она никогда не станет красной и не сработает. Загрузка будет просто вечно приостанавливаться, что заставляет меня думать, что проблема находится где-то на laravel или на сервере, но я не уверен в этом. Без этого кода мне кажется, что запрос AJAX в какое-то случайное время просто отбрасывается сервером/laravel и загрузка файла не выполняется. Что еще более странно для меня, так это то, что эта ошибка совсем недавно начала происходить. Система работала бесперебойно и загружала файлы за несколько месяцев до этого.

Я был бы очень признателен за любые мозговые штурмы, отзывы или помощь по этой проблеме.

Спасибо

UPDATE:

Я добавил эту строку в мой файл filters.php, чтобы увидеть, что недостающее маршрут был ...

App::missing(function($exception) 
{ 
    Log::error('Missing URL was: ' . Request::fullUrl()); 
}); 

Я был в состоянии удалить все Ошибки «NotFoundHTTPException ...» и «Controller method not found ...» из моих журналов ошибок laravel. Тем не менее, загрузка файла по-прежнему не выполняется в произвольное время, но теперь в журналах ошибок larvel не сообщается об ошибках. Запрос на загрузку dropzone ajax просто отбрасывается в случайное время и возвращает код состояния 0.

У кого-нибудь есть идеи, что я должен попробовать, чтобы исправить это?

+0

Я думаю, что ваш запрос ajax истекает. 1) [http://stackoverflow.com/questions/3825581/does-an-http-status-code-of-0-have-any-meaning][1] 2) [HTTP : //stackoverflow.com/questions/6578834/chrome-timeout-ajax-request-after-120-seconds] [2] [1]: http://stackoverflow.com/questions/3825581/ do-an-http-status-code-of-0-have-any-values ​​ [2]: http://stackoverflow.com/questions/6578834/chrome-timeout-ajax-request-after-120-seconds – erickallemeyn

+0

Кажется, что другие веб-сайты в сети не получили ответа fr сервер также, когда страницы загружаются. Я только знал о том, что на одном сайте возникают проблемы с загрузкой. Я считаю, что проблема связана с сервером. Возможно, настало время загрузить некоторые веб-сайты в этой сети на другой сервер. – hopefulcd

ответ

1

Ошибка исчезла! Я смог отследить ошибку до старого модуля apache, который запрашивал файл, который больше не существует. После проверки журналов ошибок я заметил, что Apache каждый день получал сигнал на остановку, вызванный тем, что не нашел файл, который хотел получить модуль. Я очень рад, что это окончательно разрешилось!

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