вторник, 13 января 2015 г.

Установка Gearman на Ubuntu

Проблема:

Старые версии Ubuntu не содеждат последние Gearman библиотеки. Если вы попробуете установить PHP расширение для Gearman на Ubuntu, то получите ошибку. Далее приведены шаги по установке Gearman библиотех и PHP расширения на Ubuntu 10.04 LTS и следующие версии.

Добавляем PPA репозиторий для получения последней версии libgearman:

$ sudo apt-add-repository ppa:gearman-developers
$ sudo apt-get update
$ sudo apt-get install libgearman7 libgearman-dev

Устанавливаем Job Server:

$ sudo apt-get install gearman-job-server

Устанавливаем PHP расширение с помощью PECL:

$ sudo pecl install gearman

Активируем PHP расширение:

$ echo "extension=gearman.so" | sudo tee /etc/php5/conf.d/gearman.ini

Тестируем:

Все готово для тестирования. Для этих целей можно использовать пример с официального сайта Gearman:
http://gearman.org/examples/reverse/
Читать далее

понедельник, 22 декабря 2014 г.

pkill: "Убийство" процессов по шаблону

Последние пару недель много работаю с Gearman, поэтому приходится "убивать" много процессов.

Например, у нас есть 3 запущенных php скрипта (в нашем случае 3 воркера)
$ ps aux | grep worker.php
isydorenko       8045   1.1  0.0  2578728   3784 s001  S     4:09PM   0:01.13 php worker.php
isydorenko       8037   1.0  0.1  2578728   5228 s001  S     4:09PM   0:01.13 php worker.php
isydorenko       8047   1.0  0.0  2578728   3772 s001  S     4:09PM   0:01.14 php worker.php
isydorenko       8089   0.0  0.0  2432784    628 s001  S+    4:15PM   0:00.00 grep worker.php

То есть мне нужно 3 раза запустить утилиту kill
$ kill -9 8045
$ kill -9 8037
$ kill -9 8047

Я быстро устал "килять" каждый процесс и нашел утилиту pkill, которая "киляет" процессы по шаблону
$ pkill -9 -f worker.php

Читать далее

пятница, 19 декабря 2014 г.

tail: Отображение данных, находящихся в конце нескольких файлов

Мы знаем о применении утилиты tail для отображения данных, находящихся в конце файла:
$ tail - f system.log

Но ее можно использовать для нескольких файлов:
$ tail - f *.log

В этом случае утилита показывает название файла и текст, который был туда записан.
Читать далее

понедельник, 15 декабря 2014 г.

Magento: Как очистить DB Connections при форке процесса

На данный момент работаю над интеграцией Gearman в Magento. Для создания child-процессов использую PCNTL PHP extension. Все шло гладко, но при тестировании я столкнулся с ошибкой "SQLSTATE[HY000]: General error: 2006 MySQL server has gone away". Проблема в том что при инициализации Magento приложения DB connections кешируются в Mage_Core_Model_Resource::$_connections и будут использоваться для всех форков родительского скрипта. Решение проблемы очень простое –– в дочернем скрипте необходимо удалить 'core/resource' из реестра:

/**
 * Reset DB connections for preventing "SQLSTATE[HY000]: General error: 2006 MySQL server has gone away"
 *
 * @return $this
 */
protected function _resetDbConnections()
{
    Mage::unregister('_singleton/core/resource');
    return $this;
}

Читать далее

воскресенье, 15 июня 2014 г.

Magento: Как добавить во flat таблицу аттрибут с собственной source моделью

Для добавления атрибута продукта во flat таблицу достаточно выполнить следующие действия:
1. Включить для атрибута настройку "Used in Product Listing"
2. Выполнить полный реиндекс catalog_product_flat

Но это не работает если вы создаете атрибут с собственной source моделью. Чтобы сделать это нужно выполнить несколько дополнительных действий:
1. Добавить в source модель функцию getFlatColums() с описанием вашего атрибута. Да да, именно getFlatColums, а не getFlatColumns (привет core разработчикам Magento).
/**
 * {@inheritdoc}
 */
public function getFlatColums()
{
    return array($this->getAttribute()->getAttributeCode() => array(
        'type'      => 'tinyint',
        'unsigned'  => true,
        'is_null'   => true,
        'default'   => null,
        'extra'     => null
    ));
}

2. Добавить функцию getFlatUpdateSelect()
/**
 * {@inheritdoc}
 */
public function getFlatUpdateSelect($store)
{
    /** @var $attr Mage_Eav_Model_Resource_Entity_Attribute */
    $attr = Mage::getResourceSingleton('eav/entity_attribute');
    return $attr->getFlatUpdateSelect($this->getAttribute(), $store);
}

После этих действий не забываем выполнить полный реиндекс catalog_product_flat.
Читать далее

воскресенье, 6 апреля 2014 г.

Вышла beta-версия MAMP для Windows

Я не раз упоминал что не люблю смешивать рабочее окружение и среду для программирования, стараюсь максимально разделить их – например, вынести на виртуалку. Но если выбирать среди сборок, то здесь лидирует MAMP. Программа очень мощная, гибкая, богатая на настройки. Например, она содержит несколько версий PHP (5.2.x, 5.3.x, 5.4.x, 5.5.x) и позволяет настроить отдельную версию для каждого хоста. То есть, один локальный сайт может работать с PHP 5.3.x, а другой c PHP 5.5.x. Согласитесь, очень удобно. Раньше это удовольствие было доступно только для Mac OS X, но пару дней назад вышла beta-версия для Windows. Рекомендую посмотреть и попробовать.
Читать далее

вторник, 25 марта 2014 г.

Узнать время выполнения скрипта

Если вам нужно анализировать время выполнения скрипта (крон, индекс и т.д.), рекомендую посмотреть в сторону команды time
$ time php -f indexer.php

Читать далее