These are chat archives for LaravelRUS/chat

19th
Mar 2017
JhaoDa
@jhaoda
Mar 19 2017 11:37
Философский вопрос, котоны. Допустим, не хочется юзать в контроллерах метод модели findOrFail, ибо смешение зон ответственности.
Но сохранить его поведение, которое throw (new ModelNotFoundException)->setModel(get_class($this->getModel()));, хотелось бы
Шо делать? Каждый раз писать это руками — бред. Сделать хэлпер по аналогии с abort? Или метод в базовом контроллере?
Раньше у меня это репозиторий делал, но это всё равно смешение зон отвественности
Igor Markin
@markinigor
Mar 19 2017 11:54
@jhaoda А если прям отдельный класс сделать Finder один для всех моделей и через него искать, в нем же при желании заодно проводить авторизацию?
JhaoDa
@jhaoda
Mar 19 2017 11:54
@markinigor это делает репозиторий
Igor Markin
@markinigor
Mar 19 2017 11:56
@jhaoda я чет подумал ты от них отказаться хотел, или только один метод из них вынести хочешь?
JhaoDa
@jhaoda
Mar 19 2017 11:56
@markinigor только выкидывание исключений
Igor Markin
@markinigor
Mar 19 2017 11:59
@jhaoda тогда я голосую за хелпер, мало ли может тебе не в контроллерах это потребуется
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 14:40
Всем привет. Разбираюсь с отправкой email с использованием очереди. Laravel 5.4. Сделал Mailable класс, который реализует интерфейс ShouldQueue. Добавляю письмо в очередь "Mail::to($subscriber->email)->send($message);" - всё хорошо, всё работает. Но если при отправлении письма возникает исключение, то в таблице jobs начинает увеличиваться значение поля attempts текущей задачи вплоть до 255, при этом в логах собирается большое количество записей "SQLSTATE[22003]: Numeric value out of range: 1264 Out of range value for column 'attempts' at row 1". Если после этого добавить новое письмо в очередь, то эта новая задача не обрабатывается. Всё это нормальное поведение? Переполняется счётчик попыток выполнения, потом вообще ничего не обрабатывается. Между попытками нет никакого временного интервала.
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:12
Если вручную ограничить количество попыток при вызове воркера, то всё нормально, не считая, что лог опять завален исключениями "не существует таблица failed_jobs" (если мне не нужна эта таблица, можно ли обработать эти исключения, чтобы они не захламляли лог?)
Отсюда выплывает ещё один вопрос. В документации в разделе про очереди говорят, что можно установить количество попыток в самом классе (поле $tries). Установил это поле в своём Mailable классе. Но ограничение не работает. Значит для добавления задачи через Mail это не работает?
Всё это кино происходит на Windows.
JhaoDa
@jhaoda
Mar 19 2017 15:17
@Dimsanchuk «если мне не нужна эта таблица» — ты прям уверен, что у тебя никогда задания в очереди не зафейлятся, а если и зафейлятся, то и хер с ними?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:19
Нет. Такая информация нужна. Но всё же интересует, можно ли обработать это исключение?
JhaoDa
@jhaoda
Mar 19 2017 15:20
@Dimsanchuk зачем?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:21
Академический интерес, так сказать)
JhaoDa
@jhaoda
Mar 19 2017 15:23
@Dimsanchuk указывай ник того, кому пишешь
@Dimsanchuk академический интерес удовлетворяется чтением доки РНР про исключения и их перехват
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:26
@jhaoda хорошо, с этим понятно. Меня больше интересует ситуация с переполнением attempts. По этому вопросу что-нибудь подскажешь?
JhaoDa
@jhaoda
Mar 19 2017 15:29
@Dimsanchuk ну очевидно же, что задание фейлится. Где и как — из твоего описания не ясно.
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:32
Фейлится, где и как - неважно. Да, я не дописал. Если указано ограничение tries, то после всех попыток задание удаляется из jobs. А если нет ограничения, то оно так и висит в jobs с attempts = 255.
JhaoDa
@jhaoda
Mar 19 2017 15:33
@Dimsanchuk и?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:34
@jhaoda и после этого новые задачи не обрабатываются.
JhaoDa
@jhaoda
Mar 19 2017 15:34
Я не понимаю, что ты хочешь в итоге? Проблему решить или чтобы счетчик попыток писался до миллиарда?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:36
@jhaoda во-первых, хочу разобраться. Во-вторых, решить проблему. Если не указано количество попыток выполнения задачи, то 1) новые задачи не обрабатываются, 2) старая задача так и остаётся в jobs с переполненным счётчиком и не переносится в failed_jobs.
JhaoDa
@jhaoda
Mar 19 2017 15:51
@Dimsanchuk предлагаю вдуматься в слово «очередь»
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:54
@jhaoda вдумался)) Так вот касательно моего предыдущего сообщения снова повторю изначальный вопрос: "Это нормальное поведение?" Или может быть я что-то где-то неправильно сделал?..
JhaoDa
@jhaoda
Mar 19 2017 15:55
@Dimsanchuk что именно «нормальное поведение»?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:56
@jhaoda После потраченных попыток (без ограничения - 255) удалять задачу из jobs и помещать в failed_jobs.
JhaoDa
@jhaoda
Mar 19 2017 15:57
@Dimsanchuk ну так ты укажи, сколько попыток
Ларавел не умеет угадывать, сколько сегодня попыток ей делать
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:58
Если можно не указывать, значит должно работать и без этого. Разве не логично?
JhaoDa
@jhaoda
Mar 19 2017 15:58
@Dimsanchuk можно. Оно и работает. Поставь в миграции для поля attempts не tinyInteger, а bigInteger и радуйся
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 15:59
@jhaoda Как же оно работает, если после переполнения счётчика новые задачи не обрабатываются?
@jhaoda и что, biginteger не переполнится?
JhaoDa
@jhaoda
Mar 19 2017 16:00
@Dimsanchuk переполнится, но не скоро :)
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 16:00
))) Это уже не серьёзно)
JhaoDa
@jhaoda
Mar 19 2017 16:01
@Dimsanchuk ты не понимаешь, да? Ларавель не решает за тебя, сколько попыток делать, это фрейм, а не CMS
И у неё нигде нет константы МАКСИМУМ_ПОПЫТОК_ЕСЛИ_ГЛУПЫЙ ЮЗЕР_ЗАБЫЛ_УКАЗАТЬ_ИХ_КОЛИЧЕСТВО_ЯВНО
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 16:03
@jhaoda я прекрасно это понимаю. Не понимаю почему ничего не написано, что нужно ОБЯЗАТЕЛЬНО указывать количество попыток выполнения задачи, иначе ваша очередь накроется медным тазом.
JhaoDa
@jhaoda
Mar 19 2017 16:03
@Dimsanchuk не нужно их обязательно указывать. Ты доку-то про очереди всю читал или нет?
Можно и в самой задаче проверять, сколько раз она выполнилась. И это может меняться от задачи к задаче, какие тут могут быть общие правила «выполнять все задачи максимум 129 раз, если не указано явно»?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 16:05
@jhaoda всю читал.
JhaoDa
@jhaoda
Mar 19 2017 16:06
@Dimsanchuk ну так тебе дали целых ТРИ способа указать/проверить максимальное число попыток, но ты все их игнорируешь и хочешь что бы оно как-нить само?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 16:09
@jhaoda Для меня было удивительно, что Ларавел не обрабатывает автоматически переполнение attempts. Это меня смутило и я подумал, что сам где-то накосячил.
JhaoDa
@jhaoda
Mar 19 2017 16:10
@Dimsanchuk откуда ларавел знать, когда наступает переполнение?
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 16:10
@jhaoda в лог записать исключение значит может, а обработать не может?
JhaoDa
@jhaoda
Mar 19 2017 16:11
@Dimsanchuk в лог пишется исключение PDO
Dmitry Shumelchuk
@Dimsanchuk
Mar 19 2017 16:23
@jhaoda спасибо за уделённое время.
KarmaBot
@KarmaBot
Mar 19 2017 16:23
Спасибо (+1) для @jhaoda принято! Текущая карма +1470.
Artem Bogomolov
@TheDeveloperTom_twitter
Mar 19 2017 18:56
Кто-то пишет на Django? Сори за оффтоп
Kirill Nesmeyanov
@SerafimArts
Mar 19 2017 19:10
@TheDeveloperTom_twitter это как раз не оффтоп