Anonymous
Типовая ситуация
Вероятно, просто ранее сделанная реализация была сильно усложнена, теперь она не работает. А куда посмотреть, в сторону чего? Редиректы? Или какая-то другая тема?
Артур
Вероятно, просто ранее сделанная реализация была сильно усложнена, теперь она не работает. А куда посмотреть, в сторону чего? Редиректы? Или какая-то другая тема?
Зависит от хостинга, на некоторых можно через панель добавить синонимы, или привязать несколько доменов к одной папке с сайтом, или банально сделать редирект
Anonymous
Зависит от хостинга, на некоторых можно через панель добавить синонимы, или привязать несколько доменов к одной папке с сайтом, или банально сделать редирект
Понятно. Спасибо за подсказку, поизучаю возможности хостинга и вообще эту тему по редиректам поподробнее!
Sergey_K
ладно, в общем ситуация такая: установил rabbitmq и php-amqplib все настроил и работает вроде как нужно далее создал демон который запускает php который в свою очередь слушает все что приходит в очередь и передает в другой класс все задачи, а тот класс уже разруливает содержимое и может запускать разные процессы в зависимости от запроса. Все вроде работает как ожидается, но вот тут и проблема появилась. При запущенном демоне никакие изменения в классах не вызывают эффекта. Нужно перезапускать демон и тогда все ок.
Почти два года прошло )) Петь, вопрос - я правильно понимаю, что без "демонизации" php-скрипта никак не реализовать доставку сообщений по http? Ну то есть мне, по идее, нужно, чтобы на выходе из очереди, например, тупо все данные http запросом шли на вебхук. Допустим, в простом случае, на локалхост, где уже будет вся обработка...
Евгений
некрофил
Pavel
Хотел спросить, а как-то легально можно разрешить дубли? чтобы url для разных поддоменов был одинаковым?
Дима
Хотел спросить, а как-то легально можно разрешить дубли? чтобы url для разных поддоменов был одинаковым?
Поддомены в разных контекстах? У тебя же вроде seodomains, контекст тогда один, вроде сис настройка duplicate_uri_check или как-то так должна тебе помочь
Pavel
Sergey_K
Честно говоря кажется что это микросервисное кунг-фу не для этого чатика)) Тут все очереди сводятся к cron, ручной очереди через modx caсhemanager или Sheduler/Другой компонент очередей
Ну я думаю, что не все тут ограниченные. Мы ж не будем тут детали обсуждать, просто концепт. Пришло время, когда нужны нормальные распараллеливающие решения.
Дима
Ну я думаю, что не все тут ограниченные. Мы ж не будем тут детали обсуждать, просто концепт. Пришло время, когда нужны нормальные распараллеливающие решения.
Я бы местных так не называл))) А то 1234 проклятия не хочется получить, никакой кармы не хватит 😂 Если по теме. Надо перечитать всё что в цитате чтобы понять что ты хочешь сделать? Или в 2х словах объяснишь?
Sergey_K
Я бы местных так не называл))) А то 1234 проклятия не хочется получить, никакой кармы не хватит 😂 Если по теме. Надо перечитать всё что в цитате чтобы понять что ты хочешь сделать? Или в 2х словах объяснишь?
Там ничего не нужно читать вообще - мой вопрос в тексте. Я спрашивал, можно ли нормальным способом осуществлять доставку сообщений из очередей. Речь про "кролика", ну или, может, какой-то альтернативный есть брокер, умеющий http. Мне не нужна гипермасштабируемость, просто хочу уже просто развести все сервисы отправки и пр. Ну и пока хотелось остаться на php. "Нормальный способ" = доставка данных по HTTP на вебхук. Петя делал "костыль" - "демонизированный" php скрипт, что, мне кажется, несколько костыльным способом.
Дима
Там ничего не нужно читать вообще - мой вопрос в тексте. Я спрашивал, можно ли нормальным способом осуществлять доставку сообщений из очередей. Речь про "кролика", ну или, может, какой-то альтернативный есть брокер, умеющий http. Мне не нужна гипермасштабируемость, просто хочу уже просто развести все сервисы отправки и пр. Ну и пока хотелось остаться на php. "Нормальный способ" = доставка данных по HTTP на вебхук. Петя делал "костыль" - "демонизированный" php скрипт, что, мне кажется, несколько костыльным способом.
Честно признаюсь, я с системой не сильно знаком, но тема показалась мне интересной, и я спросил коллегу который рубит в рэббит), и вот тебе решение, которое простое в реализации и правильное для php, и без домонизации: 1) Ставишь supervisord, это демон который запускает произвольные процессы (можно цифрой поставитm сколько надо штук) и перезапускает их когда они дохнут. Это стандартная практика для php и не только, для оборачивания демонов. На случай если они сдохнут 2) Пишешь тупой скрипт (воркер): забрать задание, выполнить, умереть. И в конфиге supervisord ставишь 3-5 копий процесса. Дело в том, что вызов get_from_queue завершится только тогда когда в очереди сообщения либо есть либо появилось после. Тем самым брокер снимает с тебя ответственность по "пингу" очереди и минимизирует лейтенси между тем как его туда положили и тем что ты узнал об этом. Получишь следующие бенефиты: • У тебя ничего не упадет т.к. перезапустится • память не потечет, т.к. процесс живет только на одно сообщение из очереди • У тебя есть хоть какая-то конкурентность из коробки, если первое задание зависло, то как минимум 2 воркера еще работают • На время перезапуска скрипта (а для реббита там время ппц какое ненулевое 150мс) маловероятно что остальные воркеры уже умерли тоже, и задание будет подхвачено с минимальным лейтенси P.S. Первичная задача конечно немного адовая, т.к. AsyncCall есть во всех приличных фреймворках из коробки. Его и используют для сбора заданий из очереди. #highload #очереди #RabbitMQ #уведомления
Дима
Честно признаюсь, я с системой не сильно знаком, но тема показалась мне интересной, и я спросил коллегу который рубит в рэббит), и вот тебе решение, которое простое в реализации и правильное для php, и без домонизации: 1) Ставишь supervisord, это демон который запускает произвольные процессы (можно цифрой поставитm сколько надо штук) и перезапускает их когда они дохнут. Это стандартная практика для php и не только, для оборачивания демонов. На случай если они сдохнут 2) Пишешь тупой скрипт (воркер): забрать задание, выполнить, умереть. И в конфиге supervisord ставишь 3-5 копий процесса. Дело в том, что вызов get_from_queue завершится только тогда когда в очереди сообщения либо есть либо появилось после. Тем самым брокер снимает с тебя ответственность по "пингу" очереди и минимизирует лейтенси между тем как его туда положили и тем что ты узнал об этом. Получишь следующие бенефиты: • У тебя ничего не упадет т.к. перезапустится • память не потечет, т.к. процесс живет только на одно сообщение из очереди • У тебя есть хоть какая-то конкурентность из коробки, если первое задание зависло, то как минимум 2 воркера еще работают • На время перезапуска скрипта (а для реббита там время ппц какое ненулевое 150мс) маловероятно что остальные воркеры уже умерли тоже, и задание будет подхвачено с минимальным лейтенси P.S. Первичная задача конечно немного адовая, т.к. AsyncCall есть во всех приличных фреймворках из коробки. Его и используют для сбора заданий из очереди. #highload #очереди #RabbitMQ #уведомления
Если делаешь это с MODX, тогда @user_unknown_17 с тебя кейс хотя бы короткий на modx.pro 😉 Договорились? А то так и умрёт тут в чатике годное решение. А то нам ещё глобальную систему уведомлений для #minishop3 делать да, коллеги ? @biz87 @ibochkarev @ShevArtV @webinmd 🚀
Sergey_K
Честно признаюсь, я с системой не сильно знаком, но тема показалась мне интересной, и я спросил коллегу который рубит в рэббит), и вот тебе решение, которое простое в реализации и правильное для php, и без домонизации: 1) Ставишь supervisord, это демон который запускает произвольные процессы (можно цифрой поставитm сколько надо штук) и перезапускает их когда они дохнут. Это стандартная практика для php и не только, для оборачивания демонов. На случай если они сдохнут 2) Пишешь тупой скрипт (воркер): забрать задание, выполнить, умереть. И в конфиге supervisord ставишь 3-5 копий процесса. Дело в том, что вызов get_from_queue завершится только тогда когда в очереди сообщения либо есть либо появилось после. Тем самым брокер снимает с тебя ответственность по "пингу" очереди и минимизирует лейтенси между тем как его туда положили и тем что ты узнал об этом. Получишь следующие бенефиты: • У тебя ничего не упадет т.к. перезапустится • память не потечет, т.к. процесс живет только на одно сообщение из очереди • У тебя есть хоть какая-то конкурентность из коробки, если первое задание зависло, то как минимум 2 воркера еще работают • На время перезапуска скрипта (а для реббита там время ппц какое ненулевое 150мс) маловероятно что остальные воркеры уже умерли тоже, и задание будет подхвачено с минимальным лейтенси P.S. Первичная задача конечно немного адовая, т.к. AsyncCall есть во всех приличных фреймворках из коробки. Его и используют для сбора заданий из очереди. #highload #очереди #RabbitMQ #уведомления
Из коробки в php нет AsyncCall ) Если бы он был, то очереди вообще не нужны были бы - я про задачи уровня послать почту при размещении заказа. Сейчас процесс тормозится в основном процессом отправки. Я сделал свой почтовый сервер - будет много быстрее, но хочется все же распараллелить такие вещи.
Sergey_K
Если делаешь это с MODX, тогда @user_unknown_17 с тебя кейс хотя бы короткий на modx.pro 😉 Договорились? А то так и умрёт тут в чатике годное решение. А то нам ещё глобальную систему уведомлений для #minishop3 делать да, коллеги ? @biz87 @ibochkarev @ShevArtV @webinmd 🚀
В modx такое делать крайне геморно. У меня поддомен endpoint.* на Slim. Там в том числе дергаются запросами по крону всякие штуки и очереди тоже будут там. Будет просто секмент обработки/рассылки и все.
Николай
Александр
Ребят, кто может помочь из кода <div class="swiper-wrapper"> [[!pdoResources? &parents=`[[*id]]` &tpl_1=`tpl.projectCart1` &tpl_2=`tpl.projectCart2` &tpl_3=`tpl.projectCart3` &tpl_4=`tpl.projectCart4` &tpl_5=`tpl.projectCart5` &tpl_6=`tpl.projectCart6` &tpl_7=`tpl.projectCart7` &includeTVs=`location,projectArea,cartimg` &limit=`7` &sortby=`{ "menuindex":"ASC" }` ]] </div> {if [[getChildCount? &parent=`[[*id]]`]] > 7} <div class="swiper-wrapper"> [[!pdoResources? &parents=`[[*id]]` &tpl_1=`tpl.projectCart1` &tpl_2=`tpl.projectCart2` &tpl_3=`tpl.projectCart3` &tpl_4=`tpl.projectCart4` &tpl_5=`tpl.projectCart5` &tpl_6=`tpl.projectCart6` &tpl_7=`tpl.projectCart7` &includeTVs=`location,projectArea,cartimg` &limit=`7` &offset=`7` &sortby=`{ "menuindex":"ASC" }` ]] </div> {/if} {if [[getChildCount? &parent=`[[*id]]`]] > 14} <div class="swiper-wrapper"> [[!pdoResources? &parents=`[[*id]]` &tpl_1=`tpl.projectCart1` &tpl_2=`tpl.projectCart2` &tpl_3=`tpl.projectCart3` &tpl_4=`tpl.projectCart4` &tpl_5=`tpl.projectCart5` &tpl_6=`tpl.projectCart6` &tpl_7=`tpl.projectCart7` &includeTVs=`location,projectArea,cartimg` &limit=`7` &offset=`14` &sortby=`{ "menuindex":"ASC" }` ]] </div> {/if} сделать цикл на феном с таким вызовом рабочим? В идеале что-бы он проверял количество и останавливался как только кол-во выводов привысило кол-во товаров
Александр
В общем хочу такой вызов в красивый вид динамический привести, а мозгов пока не хватает
Александр
Или мб кто-то мне даст документацию мб какую почитать надо для такой задачки?
Николай
Он пошутил. Какой "менеджер очередей"? Кролик?
Нет более приземленный в рамках MODX В него уже один встроен так то
Николай
Ну и компоненты есть
Николай
Я просто искренне не понял о чем разговор
Николай
и зачем это в MODX
Sergey_K
Николай
MODX для собирателей сайтов в основном
Николай
Какие очереди в рамках модх? Есть описание?
https://modzone.ru/blog/2020/07/25/queues-in-modx-out-of-the-box/
Дима
Из коробки в php нет AsyncCall ) Если бы он был, то очереди вообще не нужны были бы - я про задачи уровня послать почту при размещении заказа. Сейчас процесс тормозится в основном процессом отправки. Я сделал свой почтовый сервер - будет много быстрее, но хочется все же распараллелить такие вещи.
Ну свой почтовый сервер уменьшает задержку с ~3-30 сек до 1< сек. А вообще мы кроном отправляем раз в минуту, но конечно иногда хочется и быстрее, особенно когда клиент на телефоне, говорит "щас я тут корзину в интернет-магазине набрал, отправлю в виде заказа и обсудим некоторые позиции".
Дима
https://modzone.ru/blog/2020/07/25/queues-in-modx-out-of-the-box/
Крутая статья, видел. Получается modRegistry в текущем контексте как бы замена RabiitMQ. Но... (цината из статьи) «Чтобы на фронте быстро вернуть запрос пользователю, все сложные задачи помещаются в очередь для последующей обработки в Cron.»
Николай
Если говорить плюс минус о коробочных решениях То я делаю в таких случаях так. Отправка всех данных ставится в очередь. Там и письма и СМС и CRM и прочие уведомления. Каждая задача раз в минуту срабатывает через CRON А для особо нетерпеливых случаев в админке вешается кнопка отправить немедленно. Ну и когда надо заказ сразу приходит
Sergey_K
Ну свой почтовый сервер уменьшает задержку с ~3-30 сек до 1< сек. А вообще мы кроном отправляем раз в минуту, но конечно иногда хочется и быстрее, особенно когда клиент на телефоне, говорит "щас я тут корзину в интернет-магазине набрал, отправлю в виде заказа и обсудим некоторые позиции".
Ну да - локал деливери решает. И без авторизации. Вопрос еще в том, что свой почтовый сервер позволяет фильтровать и парсить письма на лету и настраивать это. Например, мне АльфаБанк присылает письма о приходе на счет. API у них нет нихрена, но парсинг писем = автоматическая смена статуса. Не надо лазать по банк-клиенту. Ну а СДЭК присылает, что "неправильный телефон" - у меня само читает аттач, выуживает номер заказа и пишет клиенту "перейдите по ссылке, чтобы ввести верный номер". Потом пакует в экселину и отправляет в сдэк письмом с аттачем (им так надо). В общем, постфикс это тоже интересно.
Николай
Ребятки - вы ж в чате MODX. Это штучные реализации. Тут у людей проблемы как данные из таблички вытащить, да как на фронт вывести
Sergey_K
https://modzone.ru/blog/2020/07/25/queues-in-modx-out-of-the-box/
Дядь, ну ты издеваешься? Крон раз в минуту? Какие же это очереди ) У меня вон API с алиэкспрессом, там соединяется с 8 попытки. Крон раз в минуту обрушает все на свете жестоко ) Ну и представь бота в телеге, который лупит сообщения со скоростью раз в минуту )))
Andrew
Ребят, привет! У нас тут кто-то был с Белорусии! Помогите получить информацию по организации
Николай
Самый дешевый хостинг без доступа к SSH даже ничего другого и не способен дать
Sergey_K
Я выше уже ответил. MODX это не та система где нужны более сложные решения
Ну да - боты в телегу это же сложное решение ) Тут глупо что-то босуждать
Sergey_K
Самый дешевый хостинг без доступа к SSH даже ничего другого и не способен дать
А модх это система для людей с самым дешевым хостингом? ну хорош...
Николай
А модх это система для людей с самым дешевым хостингом? ну хорош...
А ты вообще читаешь здесь переписки? Ну реально пишут ведь про такие хостинги. Да и другие проблемы у людей - я ж говорю - тут до таблички в DB достучатся не могут порой
Дима
Честно признаюсь, я с системой не сильно знаком, но тема показалась мне интересной, и я спросил коллегу который рубит в рэббит), и вот тебе решение, которое простое в реализации и правильное для php, и без домонизации: 1) Ставишь supervisord, это демон который запускает произвольные процессы (можно цифрой поставитm сколько надо штук) и перезапускает их когда они дохнут. Это стандартная практика для php и не только, для оборачивания демонов. На случай если они сдохнут 2) Пишешь тупой скрипт (воркер): забрать задание, выполнить, умереть. И в конфиге supervisord ставишь 3-5 копий процесса. Дело в том, что вызов get_from_queue завершится только тогда когда в очереди сообщения либо есть либо появилось после. Тем самым брокер снимает с тебя ответственность по "пингу" очереди и минимизирует лейтенси между тем как его туда положили и тем что ты узнал об этом. Получишь следующие бенефиты: • У тебя ничего не упадет т.к. перезапустится • память не потечет, т.к. процесс живет только на одно сообщение из очереди • У тебя есть хоть какая-то конкурентность из коробки, если первое задание зависло, то как минимум 2 воркера еще работают • На время перезапуска скрипта (а для реббита там время ппц какое ненулевое 150мс) маловероятно что остальные воркеры уже умерли тоже, и задание будет подхвачено с минимальным лейтенси P.S. Первичная задача конечно немного адовая, т.к. AsyncCall есть во всех приличных фреймворках из коробки. Его и используют для сбора заданий из очереди. #highload #очереди #RabbitMQ #уведомления
@user_unknown_17 есть дополнение к вышесказанному: #RabbitMQ не нужен и возможно даже вреден для таких задачек, т.к. он слишком сложный и требует ресурсов для себя и установку либ для пхп Без либ можно обойтись каким нибудь beanstalkd, с либами можно сделать на #redis например, редис обычно в проектах появляется раньше рэббита (а ещё он есть на простых хостингах типа #beget и включается там галочкой) и пока его хватает можно ничего и не использовать другого ну или если не хочется ставить отдельных серверов для очередей то можно сделать на #zeromq, который сам себе сервер на php
Sergey_K
А ты вообще читаешь здесь переписки? Ну реально пишут ведь про такие хостинги. Да и другие проблемы у людей - я ж говорю - тут до таблички в DB достучатся не могут порой
Я знаю уровень среднего разработчика модх ) Я написал выше про это. Теперь что? Надо быть убогим и жить в коробочке?
Дима
Тут я с @biz87 очень согласен, лучше будет (и это важно) не заводить технологический стэк в дебри
Artem
Warning: array_merge(): Argument #2 is not an array in www/core/xpdo/xpdo.class.php on line 341 Fatal error: Class 'xPDODriver_' not found in www/core/xpdo/xpdo.class.php on line 1884 В чем может быть ошибка после переноса? конфиг перепрописал все, базу залил, кэш почистил, залил обновленную версию и при нажатии установить вот такое вылазит
Artem
2.8.4
Artem
Кодировку БД и сопоставление проверь, и версия php какая?
через расширенную установку нормально обновилось через обычную не хотел
Артур
Господа, кто-нибудь знает как это исправить?
Anton
Господа, кто-нибудь знает как это исправить?
С телефона когда открываешь такую картинку, реально как телеграмму читать
Артур
Евгений
Евгений
может порт не тот, может еще что-то
Артур
Maxim
Почему админка modx не предлагает обновить pdoTools?
Иван
modx.com / modstore
Maxim
modstore
Иван
modstore
MODX 3?
Maxim
283
Maxim
или он только для 3?
Иван
Maxim
это упустил...
Anonymous
Здравствуйте. Нужно скопировать один ресурс. И поместить его в другой контекст. Проблема в том, что у этого ресурса ооочень много дочерних ресурсов. И при копировании они изменят свой alias. Мне нужно, чтобы alias не менялся. Как мне скопировать ресурсы без изменения alias?
Николай
Так внутри их много
Ну как бы если говорят о ресурсе и тем более его копировании речь идет об одной строке базы данных обычно.
Anonymous
Заморозь урл и пропиши им статичный урл
Для всех заморозить. Всем прописать статичный URI. Скопировать. Потом разморозить (уже у 2 пачек ресурсов). Как-то сложновато... Я думал, может, плагин можно написать, который вешается на OnResourceDuplicate
Pavel
Всегда при парсинге только с замороженными урлами и переносил, т.к. динамические урлы у modx'a - зло априори и никогда не уверен на 100% что билдер алиаса все правильно сделает и половину материалов не отвалится при переносе
Pavel
Господа верстальщики) Как сделать подобную анимацию? Интересует эффект, который формируется при возвращении элемента в исходное (как желе).