Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5.x » Авторизация на сайте через бота Telegram (как на storebot.me) » 23.12.2017 00:23:50

Не знаю насколько правильная схема реализации получилась, но сделал по следующему принципу, возможно кому то пригодится: 

На странице логина происходит постоянный опрос бекенда ajax-запросами на предмет наличия в кеше ключа, который сохраняется в кеш в момент обработки сообщения о логине телеграм-боту при обработке веб-хука. В свою очередь, в контроллере который обрабатывает ajax-запросы от страницы логина, и происходит принудительная авторизация с помощью Auth::loginUsingId. После авторизации контроллер возвращает ответ, который говорит JS-скрипту обновить страницу и прекратить опрос, таким образом получаем схему работы, полностью аналогичную  storebot.me. Код не привожу так как пока не все дописал, но по данному принципу реализовать будет не сложно.
Тем не менее, вопрос касательно других вариантов реализации, возможно более правильных, остается актуальным.

#2 Laravel 5.x » Авторизация на сайте через бота Telegram (как на storebot.me) » 22.12.2017 20:23:27

Ivan_Garbera
Ответов: 1

Привет. Буду признателен за подсказку, как реализовать схему авторизации на сайте через бота Telegram , как это сделано на storebot.me. В данный момент основная сложность с тем, что не знаю, как привязать к сессии неавторизованного пользователя , например, принудительный вызов авторизации юзера по айди,  который вызывается в обработке команды боту :

\Illuminate\Support\Facades\Auth::loginUsingId(1);

Чтобы после того, как юзер отправит боту команду (например /start ), он мог вернуться на сайт, и оказаться уже залогиненым  под пользователем, для которого вызывалась принудительная авторизация по айди в обработке команды боту.
P.S. https://telepass.me пожалуйста не предлагайте - в данный момент он не работает, не удается даже в их системе авторизоваться.

Буду благодарен за любую помощь или примеры реализации.

#3 Re: Laravel 5.x » Странности с одновременным выполнением задач из очереди » 01.03.2017 07:00:05

Спасибо. Перевел очереди beanstalk, пока полет нормальный и с моим конфигом. Если будут проблемы то попробую queue:work --daemon

#4 Laravel 5.x » Странности с одновременным выполнением задач из очереди » 28.02.2017 22:07:45

Ivan_Garbera
Ответов: 2

Доброго времени суток.
Если кто сталкивался, прошу помочь со следующей проблемой - есть необходимость одновременного выполнения определения определенного числа задач из очереди, например - 8.
В конфиге супервизора есть опция numprocs=8 , и сразу при старте супервизора все прекрасно - 8 задач одновременно начинают обрабатываться. В дальнейшем же одновременно выполняется от 1 до 3 задач, но не 8: https://scr.pics/Monosnap_2017-02-28_21-06-38.png

Конфиг супервизора:

[program:laravel-worker]
#process_name=%(laravelWorker)s_%(1)02d
process_name=%(program_name)s_%(process_num)02d
command=/usr/bin/php71 /home/www-data/domains/app/artisan queue:listen --timeout=0 --tries=5
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/home/www-data/domains/app/laravelWorker.log

Запущено при этом как и следует, 8 обработчиков очереди:

www-data 23569  0.6  0.1 451852 28972 ?        S    21:43   0:08 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 23883  0.5  0.1 451520 28260 ?        S    21:52   0:04 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 24892  0.6  0.1 451852 28676 ?        S    21:57   0:02 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 24910  0.7  0.1 451852 28676 ?        S    21:58   0:02 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 25001  0.7  0.1 451520 30292 ?        S    22:00   0:01 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 25005  0.7  0.1 451520 30300 ?        S    22:00   0:01 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 25010  0.7  0.1 451520 29412 ?        S    22:00   0:01 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5
www-data 26444  1.8  0.1 451520 28540 ?        S    22:03   0:01 /opt/remi/php71/root/usr/bin/php artisan queue:work  --once --queue=default --delay=0 --memory=128 --sleep=3 --tries=5

Но реально выполняется только от 1 до 3 задач одновременно. При этом если перезапустить супервизор то их снова будет одновременно выполняться 8. Сами задачи же выполняются нормально, без ошибок и тд.

Эту проблему наблюдаю уже не на первом проекте, возникает она у меня на разных проектах с разным характером задач  в очереди - от простейших до сложных, но сейчас возникла очень большая необходимость в одновременном выполнении определенного числа задач.

Почему так происходит? Как сделать так, чтобы стабильно одновременно выполнялось нужное количество (8) задач из очереди?

#5 Re: Laravel 5.x » Глобальные переменные для multisite-приложения на Laravel » 21.05.2016 02:30:49

Нашел решение, написал свой Middleware , повесил его на группу роутов и в middleware  получаю и шарю нужные переменные, типа так:

        View::share('menu', $menu);

Плюс - сразу в middleware можно и закешировать нужные данные чтобы не получать их каждый раз.

#6 Laravel 5.x » Глобальные переменные для multisite-приложения на Laravel » 20.05.2016 22:16:22

Ivan_Garbera
Ответов: 1

Доброго дня.

Пока новичок в Laravel и PHP в целом. Пишу  приложение, которое рассчитано на работу с большим количеством доменов/поддоменов, логика такая:

При обращении к сайту определяется домен/поддомен, далее из базы данных берутся определенные данные в зависимости от домена : шаблон, который определен для  сайта в базе - например для site.ru это ../resources/views/templates/shab1, для site2.ru это shab2 и т.д, также если обращение идет по поддомену - выбираются опциональные данные для поддомена (региональная версия сайта, например moscow.site.ru - услуги в Москве).  Также в зависимости от домена из базы выбирается контент для сайта, динамическое меню и так далее.

Логику работы вижу так - нужно как-то глобально определять для домена, по которому пользователь обращается к приложению, нужные данные из базы  - шаблон, данные для меню, контент и тд, и далее уже работать с этими данными в  соответствующих контроллерах и шаблонах, чтобы каждый раз в каждом контроллере не определять домен и нужные для него данные.

Вопрос - каким образом это будет правильнее всего сделать? Насколько понимаю, нужно написать сервис-провайдер для получения данных для домена, который будет инициироваться один раз. Как этот сервис-провайдер вызвать, чтобы не обращаться к роутам?
Возможно подскажете примеры мультисайтовых приложений с подобной логикой работы, на реализацию которых можно посмотреть как на пример?

Подвал раздела