пытается предотвратить передачу заданий в очереди с помощью ViewComposer в laravel с использованием pm2.
Проблема: setCookie не был применен, потому что (я думаю) нет сеанса от доступа к внешним вызовам (pm2).
позвольте мне объяснить:
также делюсь с вами этой частью моего приложения.
У меня есть работа в очереди, которая отправляет динамические электронные письма(шаблоны и параметры почты) в моем ServiceController , также, когда я возвращаюсь к любому из них, я делюсь необходимыми данными со всеми представлениями, поэтому я создал ViewComposer , вызываемый любым представлением (*)в AppServiceProvider , внутри этого ViewComposer , я использую черту, которая также использует много черт, для сбора данных, которые мне нужны для представлений.
, когдаЯ перемещаюсь в своем приложении, все выглядит нормально.
при реализации любой задачи, которая использует задания в очереди, в моем случае отправка электронного письма:
при запуске php artisan queue: работа все работает фия тоже получаю письма.
НО
- , когда я использую pm2 deamon, который вызывает те очереди, которые он запускаетисключение: ( setCookie не был применен ), связанный с этой чертой, которую я использую в view composer.
Я знаю, что мне сложно это объяснить, но я действительноздесь нужна помощь.
вот мой код:
1. AppServiceProvider
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\Schema;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
Schema::defaultStringLength(191);
}
public function boot()
{
view()->composer('*',
'App\Http\ViewComposers\MasterComposer');
}
}
2. WebsiteComposer:
namespace App\Http\ViewComposers;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache;
use App\Website;
use other_traits;
trait WebsiteComposer
{
use other_traits;
protected function Get_Website(Request $request)
{
//some code by calling other traits;
// $results= get client websitestuff;
$this->website= $results;
}
}
3. MasterComposer:
namespace App\Http\ViewComposers;
use Illuminate\View\View;
use Illuminate\Http\Request;
class MasterComposer
{
use WebsiteComposer;
public $web=[];
public function __construct()
{
}
public function compose(View $view)
{
//to prevent external views( email templates located in
//views/emails from passing by getting website process...
if(!starts_with($view->getName(), 'emails'))
{
//here where exception fired using pm2
$this->Get_Website(request());
$this->web=$this->website;
}
View::share('website', $this->web);
}
}
4. ServiceContorller:
(начало процесса)
// POST PROCESS then Calling this function :
public function EmailDispatcher($data,Request $request)
{
//some code...
dispatch(function () use ($data) {
dispatch(new GuestMailerJob($data));
});
return redirect('somview');
}
5. GuestMailerJob:
namespace App\Jobs;
use App\Mail\GuestMailer;
// needed uses...
class GuestMailerJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable,
SerializesModels,GuestMailer;
protected $data;
public $tries = 3;
public $timeout = 10;
public function retryUntil()
{
return now()->addSeconds(12);
}
public function __construct(Array $data)
{
$this->data=$data;
}
public function handle()
{
$this->sendEmail($this->data);
}
}
6. GuestMailer:
namespace App\Mail;
use Illuminate\Http\Request;
use Mail;
trait GuestMailer
{
protected function sendEmail(array $all)
{
$toview = array(
'title' => $all["title"],
'other_attributes' => $all["other_attributes"]
);
Mail::send( [$all["template"]=> $all['view']],$toview,
function ($message) use($all)
{
$message->from( $all['from'],$all['nameFrom'] );
$message->subject( $all['subject'] );
//other params...
}
});
}
}
7. исполняемый файл pm2: mail-worker.yml
//located in: (/prod)
//mail-worker.yml content:
apps:
- name: mail-worker
script: artisan
exec_mode: fork
interpreter: php
instances: 1
args:
- queue:work
- --tries=1
- --sleep=1
8: ремесленник Очистка
all php artisan cleaners are implemented
ex : php artisan clear-compiled
php artisan queue:restart
9: pm2 Конфигурация:
pm2 start mail-worker.yml
pm2 monit
10 - состояние pm2:
id name mode reload status cpu memory
0 mail-worker fork 1 online 0% 6.5mp
работает с php artisan queue: работа / прослушивание, но с pm2 здесь исключение.
pm2 Результат:
Whoops \ Run :: handleError ("Метод trait setCookie не был применен,
/app_base_path/PRODMAAN/vendor/filp/whoops/src/Whoops/Run.ph x Whoops \Run :: handleShutdown () [internal]: 0
failed_Jobs result:
Подсветка \ Queue \ MaxAttemptsExceededException: App \ Jobs \ GuestMailerJob имеетБыла предпринята попытка слишком много раз или слишком долго. Возможно, задание ранее было приостановлено.
В чем проблема?
Спасибо за любые советы по поводуструктура кода тоже.