KelTanas`s blog

Настройка мониторинга php-fpm через Datadog

Для настройки мониторинга необходимо внести некоторые изменеия в pool, который собираемся мониторить, настройку хоста в nginx и подключить конфиг агенту datadog.

Для начала откроем файл пула и раскоментируем следующие строки:

pm.status_path = /status
ping.path = /ping
ping.response = pong

Создано: 20.07.2016 23:33

Symfony DistributionBundle. Could not open input file: app/console.

Обновляя свою Siteforever CMS до версии 0.8, в которой ядро уже работает на ядре Symfony 2.8, столкнулся с проблемой. Как это выглядит, можно посмотреть на Travis CI. При выполнении composer install получаю ошибку:

  An error occurred when executing the "'cache:clear --no-warmup'" command:  

  Could not open input file: app/console   

Ошибка вызвана post-install-cmd скриптом Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache.

Дело в том, что Symfony 2.8 может работать с путями как в стиле 2.x, так и в стиле 3.x. Второй вариант мне нравится больше и версия CMS 0.8 именно его и использует. Т.е. console она должна искать в папочке bin. Для этого в файл composer.json надо прописать параметр:

  "extra": {
    "symfony-bin-dir": "bin",
  },

Но, почему-то эта настройка не помогает заставить работать DistributionBundle нормально.


Создано: 06.07.2016 13:18

Используем в Ubuntu sudo без пароля

Если вам нужно часто управлять вашим домашним компьютером или сервером, может надоедать постоянно вводить пароль с командой sudo. Решение этого вопроса нашлось на http://askubuntu.com/a/147265.

Достаточно открыть терминал и ввести команду:

sudo visudo

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

Эта команда откроет конфигурацию sudo, в которую внизу нужно прописать:

username ALL=(ALL) NOPASSWD: ALL

где username - это имя вашего пользователя.


Создано: 11.06.2016 12:32

Запуск тестов в selenium на сервере без монитора

Selenium

Перед каждым разработчиком рано или поздно встает вопрос тестирования его кода. При чем unit-тестирование покрывает не всегда и не все нужды. Для более полного обеспечения качества создаваемого проекта приходится прибегать и к приемочному тестированию.

На сегодняшний день дела обстоят более менее не плохо. Есть набивший многим оскомину селениум. Есть Mink Константина Кудряшова, который позволяет писать функциональные/приемочные тесты в достаточно дружелюбном стиле. И при чем в качестве драйвера использовать не только селениум, среди перечня доступных есть вполне достойный безголовый zombie. Но, после моих тестов наиболее точным тестирование оказалось только через селениум. Зомби по каким-то причинам выкидывал ошибки при парсинге jquery.

Но, минус селениума в том, что ему для работы нужен браузер (по традиции firefox). А firefox требует для запуска дисплей. А на моем сервере, который используется для Continuous Integration монитора нет (это же сервер). Решение было найдено в лице утилиты Xvfb, представляющей из себя виртуальный дисплей.


Создано: 17.06.2014 15:39

Сравнение 2х основных утилит для сжатия статических файлов

Решил сравнить способности по сжатию javascript у 2х основных утилит closure compiler от google и yui compressor от yahoo.

Будем сравнивать с несжатой и сжатой версией jquery:

java -jar compiler.jar --js jquery-1.11.1.js --js_output_file=jquery-1.11.1.cc.js
java -jar compiler.jar --compilation_level ADVANCED_OPTIMIZATIONS --js jquery-1.11.1.js --js_output_file=jquery-1.11.1.cca.js
java -jar yuicompressor.jar jquery-1.11.1.js -o jquery-1.11.1.yui.js
jquery-1.11.1.js282766
jquery-1.11.1.min.js95786
jquery-1.11.1.cca.js87933
jquery-1.11.1.cc.js96284
jquery-1.11.1.yui.js107452

Лучше всего сжатие у closure compiler с опцией ADVANCED_OPTIMIZATIONS. На следующем месте идет сжатый jquery от вендоров, так что если под рукой нет компрессора с java, лучше использовать его.

Как ни странно, мой любимый yui compressor на последнем месте. Но, в его защиту можно сказать, что он оставляет все комментарии с копирайтами, удалив которые, наверняка, можно было бы сэкономить еще. А так же, closure compiler не умеет сжимать css а размер его jar-файла 6 856 128 байт, против 891 148 yui, что в 7,69 раз больше.

Так что yui compressor по прежнему остается не заменимой утилитой, которую можно таскать и вместе с проектом в git, а так же сжимать как стили, так и скрипты, пусть и не с максимальной экономией.


Создано: 02.06.2014 14:59

Переименовать файлы в нижний регистр

Переименовать все файлы в текущей и во всех вложенных директориях в нижний регистр:

find ./ -type f | awk '{ print $1 " " tolower($1) }' | xargs -L 1 mv

Харитон Мизгирь пишет: Чтобы обрабатывались пути с пробелами и проч. непечатностями надо использовать конструкцию типа:

find -print0 | xargs -0

Объяснение по поводу параметра -print0 (find'а) и -0 (xargs'а)

В имени файла может попасться символ, который требует экранирования при обработке (single or double quotes, spaces or newlines). print0 заставляет выводить список найденных файлов разделяя их через нуль-символ (\0, в духе языка C, где он используется для декларации конца строки). xargs тоже должен быть готов к такому разделителю, для этого служит -0.

find и xargs по разному себя ведет когда ищут из текущей директории или когда ищут из родительской (в родительской прекрасно обрабатывал директории с пробелами и любыми кавычками, которые находились в дочерней директории). newlines не обрабатывается нигде.


Создано: 27.05.2014 15:34

Обновление Nginx 1.1 на 1.6 в Ubuntu 12.04

Решил обновить Nginx на последнюю стабильную версию, т.к. по умолчанию в Ubuntu 12.04 все еще лежит старьё Nginx 1.1, а на официальном сайте предлагают уже 1.6 и 1.7

Казалось бы, всё просто, как рекомендует официальный сайт:

Скачиваем сертификат и устанавливаем в систему:

wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key

Потом открываем /etc/apt/sources.list

sudo nano /etc/apt/sources.list

и вставляем в конец файла

deb http://nginx.org/packages/ubuntu/ precise nginx
deb-src http://nginx.org/packages/ubuntu/ precise nginx

Далее выполняем обновление и получаем готовый свеженький Nginx:

sudo apt-get update
sudo apt-get dist-upgrade

Но, не тут-то было. Вместо профита получаем ошибку


Создано: 16.05.2014 19:50

Правильная постановка задачи

Правильная постановка задачи - залог успеха Вашего проекта

По произведению Алексея Березина.


Создано: 13.05.2014 11:59

Введение в фреймворк Kriswallsmith Assetic

Пожалуй, одной из самых мощных библиотек для управления статическими файлами (стилями, джава-скриптами, изображениями) через PHP-скрипты является Assetic. Тем не менее, начать с ходу использовать Assetic под силу далеко не каждому профессионалу. Не говоря уже о новичках, для которых серьезным барьером является и английский язык.

Библиотека решает такие задачи, как:

  • Публикация статических фалов, находящихся в модулях за пределами директории веб-сервера
  • Объединение мелких файлов скриптов или стилей в один для ускорения загрузки
  • Встраивание мелких изображений в файлы стилей в кодировке base64 для ускорения загрузки
  • Обработка и компиляция стилей и скриптов из различных языков, таких как less или coffeescript в нативные css и javascript
  • Сжатие стилей и скриптов средствами различных оптимайзеров по вкусу
  • Оптимизация изображений PNG и Jpeg без потери качества

Данный перевод из официальной документации является введением в Kriswallsmith Assetic

Assetic

Assetic - это фреймворк для управления статическими активами для PHP-приложений.

<?php

use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\Asset\GlobAsset;

$js = new AssetCollection(array(
    new GlobAsset('/path/to/js/*'),
    new FileAsset('/path/to/another.js'),
));

// код объединяет файлы при выгрузке
echo $js->dump();

Создано: 28.04.2014 00:45

Перегрев процессора из-за 100% загрузки gvfsd-metadata

На улице наконец установились теплые деньки... так же, как и у моего ноутбука vaio. При чем до такой степени, что печатать что-либо стало не возможно, т.к. руки постоянно потели.

Запустив в консоли команду top, увидел, что почти все ресурсы процессора съедает программа gvfsd-metadata:

~$ top

top - 19:10:37 up  1:22,  2 users,  load average: 1,83, 1,89, 1,91
Tasks: 234 total,   2 running, 232 sleeping,   0 stopped,   0 zombie
%Cpu(s): 29,6 us,  4,0 sy,  0,0 ni, 61,6 id,  4,3 wa,  0,0 hi,  0,5 si,  0,0 st
КиБ Mem:   8157760 total,  5089708 used,  3068052 free,   328028 buffers
КиБ Swap:  8368124 total,        0 used,  8368124 free,  1725240 cached

  PID USER      PR  NI  VIRT  RES  SHR S  %CPU %MEM    TIME+  COMMAND                                                                                                                                                     
 3299 keltanas  20   0  120m 5032 2856 R  77,1  0,1  32:44.84 gvfsd-metadata                                                                                                                                              
 3681 keltanas  20   0 1858m 734m  54m S  17,0  9,2  14:10.69 firefox                                                                                                                                                     
 1715 root      20   0  207m  74m  40m S   7,0  0,9   4:04.32 Xorg                                                                                                                                                        
 3310 keltanas  20   0  738m  21m  13m S   6,3  0,3   3:53.82 unity-panel-ser                                                                                                                                             
 3312 keltanas  20   0  342m 5448 3588 S   4,7  0,1   2:59.51 hud-service                                                                                                                                                 
 3107 keltanas  20   0 1607m 128m  56m S   4,3  1,6   1:46.43 compiz                                                                                                                                                      

Загуглив этот процесс, увидел, что проблема достаточно распространенная. Нашел решение на ubuntu-форумах. Предлагается всего лишь почистить директорию с данными этого процесса:

~$ rm -rf ~/.local/share/gvfs-metadata

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


Создано: 21.04.2014 19:21

Fork me on GitHub