git clone --mirror <url_old_repo> . git remote add new-origin <url_new_repo> git push new-origin --mirrorУзнать больше
git clone --mirror <url_old_repo> . git remote add new-origin <url_new_repo> git push new-origin --mirrorУзнать больше
Кейс: в таблице (InnoDB) 39 записей на 65KB, а места на диске таблица занимает 2,6G:
user@site:~# du -sh /var/lib/mysql/site/* | grep b_composite_page 16K /var/lib/mysql/site/b_composite_page.frm 2,6G /var/lib/mysql/site/b_composite_page.ibd
Почему так? Как почистить место?
Узнать большеРешение одним запросом:
DELETE o FROM table as o INNER JOIN ( SELECT element_id, MAX(id) as max_id FROM table GROUP BY element_id HAVING COUNT(*) > 1 ) as r ON o.element_id = r.element_id WHERE o.id < r.max_id
В MySQL есть замечательная функция FIELD(). С её помощью, например, можно сортировать результаты выборки, зная точный порядок элементов.
Например, SELECT FIELD('c', 'a', 'b', 'c', 'd', 'e');
вернёт 3.
Понадобилась точно такая же функция, но в SphinxQL. Так в итоге родился плагин для Sphinx, о котором я расскажу в заметке.
Узнать большеСегодня столкнулся с проблемой, что при установке пакета, apt стал падать с ошибкой о нехватке места на диске.
Команда df -h при этом показывала, что место-то есть и его хватает.
Узнать большеПри добавлении любого пакета, командой composer require, композер стал валиться с ошибкой.
Гуглились в основном решения с указанием файлов сертификатов в php.ini в опциях openssl.cafile и curl.cainfo.
Мне помогло простое решение:
Узнать большеBitbucket Pipelines — это CI/CD система для проектов в Bitbucket Cloud.
В этой заметке покажу лишь пример файла bitbucket-pipelines.yml, для запуска авто-тестов Codeception.
Узнать большеЕсли мы хотим записать xml-строку в логи с помощью пакета monolog, то строка запишется в одну строку с пробелами между xml-узлов.
Код решает эту проблему:
dlog( sprintf('xml response: "%s"', trim( call_user_func( function (\SimpleXMLElement $xml) { $dom = new \DOMDocument('1.0'); $dom->preserveWhiteSpace = false; $dom->loadXML($xml->asXML()); return $dom->saveXML(); }, $xml ) )) );
Под катом объяснение и пример.
Узнать большеНаписал класс-хелпер, в котором набор методов-аналогов классов CSaleOrder и CSaleOrderPropsValue с логированием ошибок, успешного сохранения, бэктрейсом. Для логирования используется логгер monolog.
Доступны методы:
\Olegpro\Helpers\OrderHelper::cancelOrder($orderId, string $value, string $comment = '', $silenceMode = true): bool \Olegpro\Helpers\OrderHelper::setOrderPropertySingle($orderId, $code, $value, $silenceMode = true): bool \Olegpro\Helpers\OrderHelper::setOrderPropertyMultiply($orderId, array $values, $silenceMode = true): bool \Olegpro\Helpers\OrderHelper::setOrderField($orderId, $fieldName, $fieldValue, $silenceMode = true): bool \Olegpro\Helpers\OrderHelper::setShipmentField($orderId, string $deliveryCode, string $fieldName, $fieldValue, $orderDeliveryId = null, $silenceMode = true): bool
Все методы подразумевают использование вне цикла сохранения заказа (внутри каждого используется \Bitrix\Sale\Order::save). Это важно учитывать или можно получить циклический вызов обработчиков ядра (но если сильно надо — то можно и обойти).
У всех последним параметром есть $silenceMode = true. Если его передать в false, то будет выкинуто исключение OrderHelperException.
С хелпером OrderHelper этих мамонтов можно забыть:
А скрипт под катом.
Узнать больше