محمدرضا فلکی
2 سال پیش توسط محمدرضا فلکی مطرح شد
2 پاسخ

ارسال جاب ها بدون کامند

سلام به همگی
من میخوام وقتی ادمین روی ارسال جاب ها کلیک کرد همشون ارسال بشن و ارسال هم میشن ولی دیگه اون صفحه کار نمیکنه
چرا؟ چونکه در حالت معمولی وقتی شما بخوای هندلش کنی از این دستور استفاده میکنی queue:work
ولی من گفتم چیکار کنم که وقتی کلیک شد روی دکمه این اتفاق بیفته
;Artisan::call('queue:work --timeout=5') اومدم از این کد استفاده کردم
و فکر کردم که بعد ۵ ثانیه اوکی میشه ولی صفحه یهو هنگ کرد

public function send()
{
    Artisan::call('queue:work --timeout=5');
    return response()->json([
        "status" => true,
        "message" => "پیامک با موفقیت ارسال شد",
    ]);
}

اگر راهی هست که بدون کامند یا دستور بشه هندلش کرد ممنون میشم راهنمایی کنید


ثبت پرسش جدید
محمدحسن یگانه
تخصص : Full-Stack Web Developer Freel...
@mhyeganeh 2 سال پیش مطرح شد
2

روشی که پیاده کردید خیلی اشتباهه و باعث میشه با هر بار اجرای متد، یک worker برای اجرای صف‌هاتون ایجاد کنید. بدون اینکه تکلیف worker های قبلی مشخص شده باشه و همین موضوع هم باعث بالا رفتن مصرف منابع و در نهایت هنگ کردن سیستم و پروژتون میشه.

طبق مستندات لاراول، برای کار کردن با سیستم صف بندی لازمه که شما دستور queue:work رو در حال اجرا داشته باشید. تو حالت لوکال و زمانی که دارید توسعه میدید که کافیه دستور رو در یک صفحه اختصاصی ترمینال وارد کنید و اجازه بدید در حال اجرا باقی بمونه. و هر وقت نیاز شد قطعش کنید و دوباره اجراش کنید.

اما در حالت production و زمانی که روی سرور قرار می‌دهید چون نمیشه چنین کاری رو بصورت دستی انجام داد، باید از ابزارهایی استفاده کنید که وظیفه این رو دارند که مطمئن باشند که این دستور همیشه در حال اجرا باقی خواهد ماند. حتی زمانی که سرور ریستارت میشه یا ...
یکی از این ابزارها و معروف ترینش supervisor هست که نحوه نصب و تنظیماتش رو مستندات لاراول هم ذکر شده:
https://laravel.com/docs/master/queues#supervisor-configuration

فقط توجه داشته باشید که برای راه اندازی اصولی queue ها و supervisor نیازمند دسترسی به کامندلاین دارید و به همین خاطر احتمالا هاست اشتراکی انتخاب مناسبی برای این کار نباشه.


محمدرضا فلکی
تخصص : Learning Laravel
@m.reza6920 2 سال پیش آپدیت شد
0

خیلی ممنونم اقای @mhyeganeh
درستش کردم یعنی فایل های لازم رو ایجاد کردم و ادرس های درست رو جایگزین کردم و دستور های لازم رو در ترمینال زدم
ولی وقتی متد ارسال خوانده میشه چیو بهش پاس بدم
چون کلاسی در کار نیست که من در کنترلر صدا بزنم پس چجوری انجام میشه؟

منظورم اینه که وقتی ادمین روی دکمه ارسال جاب ها میزنه و وقتی این متد خوانده میشه تکلیف چیه؟

public function send()
{

    return response()->json([
        "status" => true,
        "message" => "پیامک با موفقیت ارسال شد",
    ]);
}

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام