Как обрабатывать трудоемкие задачи в стеке Laravel + Forge + DigitalOcean? - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть приложение, которое с помощью maatwebsite/laravel-excel lib импортирует файл Excel с данными о сотрудниках. На каждой импортированной строке приложение создает нового пользователя. После этого он выбирает всех созданных пользователей и отправляет им электронную почту с временными учетными данными.

Контроллер. php

public function import(Request $request) {
        ini_set('max_execution_time', '0'); 

        $import = new EmpImport();
        try {
            $import->import($request->file('file'));
        }catch (\Maatwebsite\Excel\Validators\ValidationException  $e){
            return back()->withErrors('Error: '.$e->getMessage());
        }

        $users = User::whereDate('created_at',Carbon::today())->whereNotNull('temp_pass')->get();
        $when = Carbon::now();
        if (count($users) > 0){
            foreach ($users as $user){
                $emp   = $user->emp;
                $error = null;

                if (!$emp->contact->exists() || $emp->contact->email == null)
                    continue;

                try{ 
                    $error = Mail::to($emp->contact->email)->later($when->addSeconds(5), new AccountCreated($emp,$user->temp_password));
                }catch (\Exception $e){
                     $error = $exception);
                }

                if ($error === null){
                    $user->temp_password = null;
                    $user->save();
                }
            }
        }

        ini_set('max_execution_time', '30'); 

        return back();
    }

Работает нормально со 100 строками но когда файл Excel стал 1k + Nginx начал давать мне 504 Gateway Timeout error, поэтому я изменил его конфигурации на:

fastcgi_read_timeout 300; 
fastcgi_send_timeout 300;

Но при следующей попытке он показал 502 bad gateway: (....

...