AddThis Smart Layers

вторник, 12 октября 2010 г.

Как подключиться к MSSQL серверу из PHP

У нас появилась задача - подключаться из Magento к удаленному MSSQL серверу и тянуть с него некие данные.
Так как Magento стоит на Linux сервере, это оказалось не такой уж простой задачкой.


Нужно было установить расширение, которое позволяло бы PHP подключаться к MSSQL.
Так как Magento основана на Zend Framework, родным для нее будет подключение при помощи PDO_DBLIB драйвера, который, разумеется никогда на Linux серверах по умолчанию не устанавливается.

Чтобы установить этот драйвер для начала нужно установить сам PDO модуль. С ним проблем не возникло и при помощи

pecl install pdo
он успешно установился.

А вот
pecl install pdo_dblib
начал ругаться.

Сначала на то что он не может запустить компилятор.

Решил эту проблему радикально:

mount -o remount,exec,suid /tmp
mount -o remount,exec,suid /var/tmp

На этом он не успокоился и стал требовать чтобы был установлен пакет FreeTDS

С ним прошло все более ли менее гладко и встал он куда ему и указали.

Очередная попытка установить pdo_dblib снова не увенчалась успехом, конфигурационный файл ни в какую не хотел видеть где установлен FreeTDS, даже когда ему прописывали путь в ключе.

Помогло это:
touch {path}/freetds/include/tds.h
touch {path}/freetds/lib/libtds.a

Теперь снова нашлась причина чтобы не установиться. Видите ли ему версия PDO не нравится.

Решилось просто:

pecl install -n pdo_dblib
т.е. с игнорированием зависимости от версии PDO.

Только после этого этот несчастный драйвер позволил себя сконфигурировать и установить.

Танцы с бубном продолжались не менее 4 часов. Подопытный сервер практически не пострадал, за исключением того, что в процессе пришлось перекомпилировать apache+php чтобы убить "родную" поддержку PDO, с которой PDO_DBLIB ни в какую не хотел дружить и в последствии установить PDO через Pecl. После перекомпиляции apache нужно заново переконфигурировать Nginx. Но это уже мелочи жизни :-)

Апдейт: Данная шпаргалка действительна для PHP 5.2.x. Для PHP 5.3.x. есть новая шпаргалка, там процесс настройки сильно отличается.

понедельник, 27 сентября 2010 г.

Восстановление большой базы данных MySQL из дампа

На днях нужно было локально, в Windows, запустить рабочую копию сайта клиента. После всех чисток, объем базы данных составлял "всего" 1.5 гига.
Так как локально стоит Wamp, из доступных средств для заливки sql дампа такого размера был только phpmyadmin. Тот же EMS MySQL Manager даже слышать не хотел ничего о том чтобы открыть 1.5 гиговый скрипт.

вторник, 13 апреля 2010 г.

В поисках 503 ошибки

Пара клиентов часто жалуются на 503 ошибку (service unavailable) при заходе на свои сайты.
Поверхностное изучение показало что ошибка может быть из-за того что с одного IP было слишком много соединений.
В принципе, так как на сервере стоит Nginx, то в теории может такое быть, так как все запросы Apache поступают от него с одним и тем же IP.

Копнув глубже понял, что nginx тут не причем.
В конце концов дождался момента когда в очередной раз стала появляться ошибка 503 и полез смотреть error_log апача. И вот что там было:

Request exceeded the limit of 10 internal redirects due to probable configuration
error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.

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

вторник, 16 марта 2010 г.

Облака, белогривые лошадки...

Решил поближе познакомиться с технологиями Cloud Computing.
Для этого подписался на Amazon Web Services и на Rackspace Cloud.
Для теста загрузил все файлы шаблона одного из наших сайтов, Magento-Israel на "облако" Amazon S3.
Все изображения из каталога товаров забросил на "облако" Rackspace при помощи расширения One Pica Image CDN.

Была еще идея базу данных тоже сделать облачной, но это выходит экономически невыгодно для такого маленького сайта.

Следующим этапом будет тестирование облачных серверов. Хочу сделать кластер из трех серверов, DNS, MySQL и Apache+Nginx.