Stephen Berezuev 5 9 074
- Default City
- PHP, Symfony, Go
- Зарегистрирован 4 года назад
Создаем файл ~/.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
}