2015-12-31 49 views
1

我已經在VPS上部署了我的Rails應用程序。我有一個上傳csv文件並根據文件行創建記錄的功能。我在ActiveAdmin中使用此功能。Rails - 無法從VPS上的csv文件創建記錄

上傳按鈕的點擊我呼籲通過Ajax調用import_csv方法。

的方法如下:

collection_action :import_csv, method: :post do 
    CSV.foreach(params[:file].path, headers: true) do |row| 
     item = Item.where(code: row["code"]).first || Item.new 
     row["status"] = row["status"].downcase if row["status"] 
     row["created_by"] = current_user.get_name 
     row["modified_by"] = current_user.get_name 
     item.attributes = row.to_hash 
     item.save! 
    end 
    render text: { success: "Successfully imported" }.to_json 
end 

那麼成功,我得到了警覺"Successfully imported",如果有任何錯誤,我得到它在Ajax調用的錯誤塊設定的"Something went wrong."警報。

現在的問題是:

我無法通過的項目模型CSV文件創建記錄。我的CSV文件包含近70k行。我能夠創建高達7500的記錄。 如果我在CSV文件中放入7501行,我得到的警報爲"Something went wrong"

此外在日誌中我看不到任何錯誤。事實上,如果有7501行,我甚至看不到import_csv方法的請求。

這隻發生在VPS上。在本地開發和生產模式下,我能夠創建所有70k記錄。

任何人都可以幫忙嗎?我如何跟蹤實際導致錯誤的內容?

編輯:

在CSV文件時,我可以把7500行和創建記錄。下次我再次上傳一個包含7500行的文件併成功創建記錄。

在同一時間,我無法將大於7500的行放入文件中以創建記錄。

+1

在'日誌/ production.log'檢查服務器日誌,應該有一個例外。 – Jeiwan

+0

我提到過,在日誌中沒有看到任何異常的問題。 '也在日誌中我看不到任何錯誤。事實上,如果有7501行,我甚至不能看到命中import_csv方法的請求。# –

+0

2建議:1)嘗試將包含block的整個'CSV.foreach'包裝在'begin..rescue..end ',趕上例外並將其打印到日誌中。 2)使用CSV創建7500個項目,然後轉到rails控制檯並嘗試手動創建一個。 – Jeiwan

回答

1

最後得到了錯誤的線索在瀏覽器控制檯:Failed to load resource: the server responded with a status of 413 (Request Entity Too Large)

的Nginx是造成這個問題。要解決此,我不得不設置

client_max_body_size 10M;

在nginx的配置文件爲:

server { 
     listen  80; 
     server_name IP-Address; 
     location/{ 
      root /home/deploy/repos/application-name/public; 
      passenger_enabled on; 
      rails_env production; 
      client_max_body_size 10M; 
     } 
    ...... 
} 
相關問題