2014-10-02 2 views
1

최근에 시스템의 많은 사용자가 겪고있는 파일 업로드 시간 초과 문제가있었습니다. 기본적으로 사용자는 하루 종일 업로드 시스템에 로그온하고 대개 1 ~ 10 개 파일의 일괄 처리로 각각 1 ~ 3MB의 파일을 보냅니다. 사용자가 특정 시간 동안 파일 또는 배치를 업로드하면 dropzone에 대한 파일 업로드가 "서버가 0 코드로 응답 한"사용자에게 보내는 메시지와 함께 실패합니다. 이 문제는 가끔씩 만 발생하지만 업로드하는 데 몇 분이 걸리는 대용량 파일을 업로드하려고하면 언제든지 문제를 쉽게 복제 할 수 있습니다. 지금까지 많은 것을 수색하고 시도했지만 문제는 여전히 발생합니다.Laravel, Dropzone.js, Apache File Upload Timeout

업로드가 성공하면 파일이 서버의 위치에 저장되고 각 파일에 대한 정보가 데이터베이스에 저장됩니다.

시스템은 Laravel PHP, Dropzone.js, Mysql 및 Apache로 빌드됩니다. 아래는 오류 로그, 구성 파일 및 내가 시도한 것에 대한 정보입니다. 여기

오류 로그를 업로드 한 후보고하는 laravel이 실패 무엇 : 나는 다른 방법으로 이러한 설정을 변경 한

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

:

여기
[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} [] [] 

아파치에 대한 몇 가지 설정을 (을 httpd.conf)의 timeouts/maxclients를 500으로 늘리는 것과 같지만 여전히 동일한 결과가 나타납니다. 특정 시간에 업로드가 실패하고 이러한 설정을 완전히 무시한 것 같습니다.

여기

나는 또한 AJAX는 "xhr.timeout = 추가하여 코드를 업로드 dropzone.js을 변경하려 한 laravel htaccess로 파일

Options -Indexes 

여기

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 

php.ini 파일에서 일부 설정 것입니다 4000 "입니다. 이 줄을 dropzone.js에 추가하면 업로드가 진행률 막대에 부분적으로 업로드되지만 빨간색으로 변경되지는 않습니다. 업로드가 영원히 멈출 것입니다. 문제는 Laravel 또는 서버의 어느 위치에 있다고 생각하게되지만이 시점에서는 확실하지 않습니다. 이 코드가 없으면 임의의 시간에 AJAX 요청이 server/laravel에 의해 삭제되고 파일 업로드가 실패한 것처럼 보입니다. 더 이상 나에게 이상한 것은이 오류가 최근에 일어나기 시작했다는 것입니다. 이 시스템은 매월 원활하게 파일을 업로드하고 실행하기 시작했습니다.

이 문제에 대해 브레인 스토밍, 의견 또는 도움을 주시면 감사하겠습니다.

감사합니다

업데이트 : 누락 된 경로가 무엇인지 ...보고 내 filters.php 파일에이 줄을 추가

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

나는 모든을 제거 할 수 있었다 "NotFoundHTTPException ..."및 "Controller method not found ..."오류가 발생했습니다. 그러나 파일 업로드는 여전히 임의의 시간에 실패하지만 이제는 오류 로그에 오류가보고되지 않습니다. dropzone ajax 업로드 요청은 임의의 시간에 삭제되고 상태 코드 0을 반환합니다.

누구나 다음 문제를 해결하기 위해 시도해야 할 사항이 있습니까?

+0

아약스 요청 시간이 초과되었습니다. 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/ http-status-code-of-0-have-any-meaning [2] : http://stackoverflow.com/questions/6578834/chrome-timeout-ajax-request-after-120-seconds – erickallemeyn

+0

네트워크의 다른 웹 사이트가 응답을받지 못하는 것 같습니다 fr 페이지가로드 될 때 서버도 옴 나는이 웹 사이트에 문제가있는 것을 알고있었습니다. 문제는 서버와 관련이 있다고 생각합니다. 이 네트워크의 일부 웹 사이트를 다른 서버로로드 밸런싱 할 때가 있습니다. – hopefulcd

답변

1

오류가 사라졌습니다! 더 이상 존재하지 않는 파일을 요청한 이전 아파치 모듈로 오류를 추적 할 수있었습니다. 오류 로그를 확인한 후 아파치가 모듈이 원했던 파일을 찾지 않아 매분마다 시스템 종료 신호를 받는다는 것을 알게되었습니다. 나는 이것이 이제 마침내 해결되었다는 것을 매우 기쁘게 생각합니다!