2014-10-02 127 views
1

最近有一個文件上傳超時問題,我的系統上有許多用戶正在經歷這個問題。基本上,用戶全天登錄上傳系統,通常以1-10個文件批量發送通常爲1-3MB的文件。當用戶上傳文件或批處理一段時間時,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 

這裏的一些設置年代laravel .htaccess文件

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()); 
}); 

我能夠刪除所有從我的laravel錯誤日誌中發現「NotFoundHTTPException ...」和「Controller method not found ...」錯誤。但是,文件上傳仍然會隨機失敗,但現在在laravel錯誤日誌中沒有報告錯誤。 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-any-any-meaning [2]:http://stackoverflow.com/questions/6578834/chrome-timeout-ajax-request-after-120-seconds – erickallemeyn 2014-10-03 20:34:51

+0

看來網絡上的其他網站一直沒有收到任何迴應當服務器正在加載時,服務器也在服務器上。我只知道這個網站有加載問題。我相信問題與服務器有關。可能需要將該網絡上的一些網站加載到另一臺服務器上。 – hopefulcd 2014-10-03 21:00:11

回答

1

錯誤消失了!我能夠將錯誤追蹤到一箇舊的apache模塊,該模塊正在請求一個不再存在的文件。在檢查錯誤日誌之後,我注意到Apache正在收到一個信號,導致每分鐘都沒有找到該模塊想要的文件。我很高興現在終於解決了!