суббота, 12 марта 2016 г.

Сброс Symfony Lock

Внезапно на Symfony проекте прекратил работу ежеминутный комманд.
В логе сообщалось, что комманд не работает, так как уже запущен экземпляр данного комманда. Это реализуется с помощью стандартного компонента Symfony.

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

Поиски были краткими:

1. ищем реализацию хендлера в ядре симфони

2. так как кастомный путь к локам в хендлер не передавался - ищем лок-файл во временной папке (если никто ничего не менял то это /tmp/)

3. Смотрим, какие файлы есть во временной папке и удаляем нужный.
Название файла, как можно судить из кода на гитхабе формируется из префикса sf, названия лока, переданного в комманд и хеша этого названия.
Таким образом, если ваш лок называется, например my.lock, то найти и удалить надо файл, начинающийся с sf.my.lock

Затем удаляем данный файл и проверяем, как работает комманд.

вторник, 2 февраля 2016 г.

Memcache и expiration time

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

После различных поисков и сравнений версий на серверах бага была обнаружена. Время в Мемкеше отличалось от системного, аж на 14 часов. Неясно почему, но отличалось. Бага решается перезапуском Мемкеша:

>  /etc/init.d/memcached restart

Небольшой скриптец как проверить системное время и время Мемкеша:
$memcache = new Memcache;
$memcache->connect('127.0.0.1', 11211);
$stats = $memcache->getStats();
$mct = $stats['time'];
$curt = time();
echo'<pre>DIFF: ',($mct - $curt),'</pre>';

В идеале должно выводить 0 или -1.

Update: причиной отставания времени считаю уход в спящий режим. После восстановления системы из спящего режима системное время и время сервера Мемкеша различаются (Ubuntu 14.04)

четверг, 8 октября 2015 г.

Mercurial tips

Буквально по крупицам собранные команды, которые часто пригождаются на уровне джуниор:

получим свежие изменения с ремоут репозитория:
> hg pull
перейдем в голову ведущей ветки (пусть это будет master)
> hg up master
создадим веточку для работы
> hg branch MY-BRANCH

четверг, 23 июля 2015 г.

Каноничные SEO-грабли

В процессе длительной поддержки проекта рано или поздно приходится встречаться с доработками по SEO. И если вещи типа "тут нам такой тайтл, тут нам кейворды поменять" еще можно исправить костылями (хотя это тоже не самый лучший вариант), то некоторые запросы от СЕОшников стоило бы продумать заранее.
Ниже небольшая подборочка встречаемых запросов.

пятница, 10 июля 2015 г.

Монтирование с помощью sshfs

В своей обычной работе я использую Geany. Можете плеваться, смотреть свысока и т.д., но пока меня в нем всё устраивает. Даже тот факт, что в Geany никак нельзя открыть файл с ftp или ssh. Это легко решается с помощью sshfs. sshfs позволяет подмонтировать сторонний ресурс как файловую систему и открывать с него файлы из Geany. Краткий алгоритм как все это сделать:

воскресенье, 3 мая 2015 г.

Развертывание проекта на Go в Heroku

В каком-то древнем году я зачем-то зарегистрировался на Heroku.
И с тех пор даже не представлял что там происходит и зачем это мне вообще. Но вот недавно в связи с изучением языка Go (golang) пришлось поискать платформы на которых можно развернуть проект на Go. Помимо Google Application Engine, оказалось, что Heroku тоже поддерживает Go.
И развертывание проекта в инфраструктуру Heroku осуществляется довольно быстро и удобно.

За основу поста взят материал книги Building Web Apps with Go, thanks Jeremy Saenz.

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

вторник, 24 февраля 2015 г.

Модификация капчи

В битриксе описание работы с капчей довольно краткое. Есть метод получения капчи, есть метод проверки, есть несколько методов по установке различных параметров капчи. Но если залезть в код класса капчи, то можно обнаружить, что большинство параметров можно указать с помощью соответствующих настроек модуля main. Причем в открытом доступе (на странице настроек главного модуля) я эти настройки не нашел. В этот раз меня интересовали две из них:

1. CAPTCHA_letters - настройка опредеделяет алфавит символов, которые будут использованы при генерации проверочного кода. Таким образом, можно например сделать вашу капчу на кириллице:
COption::SetOptionString('main', 'CAPTCHA_letters', 'АБВГДЕЖЗИК');
Естественно, шрифт должен быть с поддержкой кириллицы, шрифт битрикса по умолчанию, по-моему, ее не имеет.

2. CAPTCHA_arTTFFiles - настройка определяет шрифты, с помощью которых будет сгенерена картинка капчи. Шрифты ищутся в папке /bitrix/modules/main/fonts/:
COption::SetOptionString('main', 'CAPTCHA_arTTFFiles', 'my_custom_font.ttf');

Ну и чтобы не засорять модуль своими шрифтами можно сделать так:
COption::SetOptionString('main', 'CAPTCHA_arTTFFiles', '../../../templates/my_tpl/fonts/my_custom_font.ttf');
и разместить файл шрифта в шаблоне my_tpl вашего сайта.