Для получения полного доступа
зарегистрируйтесь.

Stephen Berezuev    5   4 865


Видимо, пользователь решил о себе ничего не говорить.
  • Default City
  • PHP, Symfony, Go
  • Зарегистрирован 3 года назад
Профиль завершён на 70 %
70 %

Установка:

Создаем файл ~/.git-templates/hooks/pre-commit со следующим кодом:

#!/usr/bin/env bash

# Check if you have 'WIP' markers in code before commit to prevent debug code and info on remote git.
if grep -i -n 'wip' `git diff HEAD --cached --name-only`; then
    read -p "You're about to add a WIP commit, do you want to run the CI? [y|n] " -n 1 -r < /dev/tty
    echo
    if echo $REPLY | grep -E '^[Nn]$' > /dev/null; then
        echo "[skip ci]" >> $1
    fi
fi

В консоли выполняем:

git config --global init.templatedir '~/.git-templates';
chmod a+x ~/.git-templates/hooks/*

Затем, в директориях уже скачанных репозиториев выполняем: git init

Et voila! Tеперь, когда будете добавлять какую-то временную заглушку или дебаг в код, указывайте в комментарии @wip и при попытке закоммитить такой код гит выдаст предупреждение.

Для разработки активно использую docker-compose. Иногда необходимо снести все содержимое докера (для выкатывания новой версии с нуля). Для этого я держу у себя следующий шелл-скрипт:

docker-compose down --rmi all -v --remove-orphans;
docker-compose rm -f -s -v;
docker network rm `docker network ls -q`;
docker rm -f `docker ps -qa`;
docker rmi -f `docker images -q`;
[[ "$0" = "$BASH_SOURCE" ]] && exit 1 || return 1 # handle exits from shell or function but don't exit interactive shell

ВНИМАНИЕ: Запускать аккуратно, ибо выпиливает без предупреждения все контейнеры, образы, сети и тома докера.

В процессе выполнения иногда кидает ошибки о том, что нечего удалять - это нормально.

В MongoDB отвратительный полнотекстовый поиск. Для индексации и поиска можно использовать Sphinxsearch. В интернете есть несколько вариантов, как это сделать (при помощи PHP, mongoexport --type=csv, etc).

Но, как показала практика, когда колличество документов в коллекции измеряется миллионами и они собираются из разных источников, перечисленные методы либо вообще не работают (сфинкс ломается о различные спец.символы), либо просто виснут. Самым быстрым и надежным способом в итоге оказалось генерировать индекс силами самого сфинкса.

Ниже пример. Сразу предупрежу, что я специально отказался от использования XML DOM в пользу скорости.

//echo header
print("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
    + "<sphinx:docset>\n"
    + "    <sphinx:schema>\n"
    + "      <sphinx:field name=\"content\"/>\n"
    + "    </sphinx:schema>\n");
    
//echo posts
db.posts.find().forEach( function(post) {
	print('<sphinx:document id="' + post._id.valueOf() + "\">\n"
    + '    <content>' + doc.content.toString().replace(/[><]/g,'') + "</first_name>\n" //обязательно убирайте символы < и >
    + "</sphinx:document>\n");
}

print("</sphinx:docset>");

Если в _id у вас не только цифры (а по умолчанию, если вы ничего не присваиваете в _id, это так и будет), то стоит добавить счетчик i++ вместо post._id.valueOf()

Ну и, исходник в сфинксе:

source sourcename
{
    type = xmlpipe2
    xmlpipe_command = mongo databasename --quiet /path/to/jsfile.js
    xmlpipe_field_string = content
}