Скрипт для поддержания распределения PHP кода по серверам.

Beavis

Banned
dimagolov
можно попробовать из доктрины выдрать этот функционал)
 

MiksIr

miksir@home:~$
dimagolov
http://www.mysqldiff.org/
http://software.adamspiers.org/wiki/mysqldiff

-~{}~ 09.10.09 16:53:

Я для postgres использую apgdiff
 

dimagolov

Новичок
спасибо, как я понял, надо тянуть удаленную структуру данных на свой хост, тут делать diff и получать патч, после чего накладывать на удаленный сервер?
 

Alexandre

PHPПенсионер
можно все это делать удаленно.

у меня была идея в свн хранить дифы...

но трудно перейти например с версии 2->5
должен быть переход 2->3->4->5
 

MiksIr

miksir@home:~$
Я это делаю при сборке пакета. Есть эталонная база, есть рабочая... собирая пакет делается дифф. Когда пакет выкатывается на продакшн, диф наносится как на продакшн базу, так и на эталонную.
 

Resha

Новичок
Apache Ant + crontab. На центральном сервере должен быть доступ к шеллу, на остальные антом заливать по ФТП. Если полноценный доступ к шеллу есть на всех серверах, то равноценным по грамотности будет использование svn + crontab.

Писать свои примочки можно тогда, когда о вышеозначенных вещах никогда не слышали (я так делал 4 года назад). Но теперь-то вы уже точно о них слышали ;)
 

Alexandre

PHPПенсионер
Писать свои примочки можно тогда, когда о вышеозначенных вещах никогда не слышали
все используют промышленные решения,
вопрос в том как их оптимальнее использовать.

-~{}~ 12.10.09 14:43:

Я это делаю при сборке пакета. Есть эталонная база, есть рабочая...
да, похожее решение было у нас с тестовой платформой:
есть эталонная БД, есть тестовая БД...
 

Resha

Новичок
Автор оригинала: Alexandre
можно все это делать удаленно.

у меня была идея в свн хранить дифы...

но трудно перейти например с версии 2->5
должен быть переход 2->3->4->5
Для этого можно использовать ветки (бранчи). В production-ветку код кидать толко после полной отладки.

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

Да, кстати, есть же команда, которая делает DIFF между конкретными ревизиями. У нас так апдейт-пакеты создаются.
Вроде бы так: svn diff -r$1:$2 --summarize, где $1, $2 - номера ревизий.
 

Alexandre

PHPПенсионер
Resha для того чтоб быть на танке...
речь идет о дифах БД, реализованных в ввиде ALTER/CREATE/DROP TABLE
 

Resha

Новичок
Ок, понятно.

У нас это реализовано в виде ORM с логгированием определенных видов запросов в sql-файлы. Файлы лежат в svn и включаются в описанный мной svn diff. При обновлении, последовательно запускаются все новые sql-файлы. Это на стороне ядра.
 

KolyaA

Новичок
Apache Ant + crontab. На центральном сервере должен быть доступ к шеллу, на остальные антом заливать по ФТП. Если полноценный доступ к шеллу есть на всех серверах, то равноценным по грамотности будет использование svn + crontab.

Писать свои примочки можно тогда, когда о вышеозначенных вещах никогда не слышали (я так делал 4 года назад). Но теперь-то вы уже точно о них слышали ;)
Попробовал, поставил Ant.
Пока не вижу в чём преимущество писания антовского build.xml перед написанием тех же команд самому на пхп. Да, там код по-короче получается, но в его правилах ещё разобраться надо. И в своём велосипеде я сам, как надо могу делать, а в анте только по шаблону. Особенно это напрягает при работе с кодировками, которая там, кажется, не до конца налажена.
 

tiger-nick

Новичок
Личный опыт рекурсивного обновления файлов:

Извращался в локальной сети (8-компьютеров), мой комп был за сервера, был еще один ПК, в котором лежала общедоступная папка, куда народ скидывал всякий мусор.
Поставил задачу отслеживать в этой папке изменения, к примеру ставим интервал времени 1час и сканировал все доступные дирректории (порядка 1000-5000 папок и 10000-100000 файлов разного размера и содержания)... Писал на PHP на скорую руку, ипользовал функцию "glob()" для чтения дирректорий и "filemtime()" для получения даты изменения, сравнивал дату с выбранной, если она оказывалась больше, то путь к файлу заносился в массив или выводился в окно браузера...

Что получилось в итоге:

Компьютер, на котором находилась "отшареная" папка встал наглухо :) (оказался слабоват Celeron 1,5GHz, 256Mb DDR), мой компьютер испытывал "капитальные лаги", итогом стало то, что Apache отвалился...

2я попытка оказалась более удачной, для теста выбрал одну поддиректорию (20-40 папок 100-1000 файлов) все сработало на отлично, времени заняло приблизительно 15 секунд...

Какие сделал выводы:

Лучше написать скрипт для загрузки/перезаписи/удаления файлов и записывать действия в файл, а потом не сканировать все дирректории, а считывать изменения из файла (или БД) когда это потребуется

Как это поможет при решении задачи топика?

Если сделаете выбор в сторону самописного скрипта, то можно попробовать использовать файловый менеджер на одном сервере, написанный на PHP с небольшей модернизацией, а именно запись в файл/БД списка проводимых изменений (изменение/удаление/загрузка файлов). Потом при помощи дополнительного скрипта считать изменения подключится по ftp к остальным серверам и выполнить теже действия.

В качестве итога

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

fixxxer

К.О.
Партнер клуба
tiger-nick
>>>, ипользовал функцию "glob()" для чтения дирректорий и "filemtime()" для получения даты изменения, сравнивал дату с выбранной
о господи, кто то еще не знает про rsync?
 
  • Like
Реакции: AmdY

tiger-nick

Новичок
tiger-nick
>>>, ипользовал функцию "glob()" для чтения дирректорий и "filemtime()" для получения даты изменения, сравнивал дату с выбранной
о господи, кто то еще не знает про rsync?
Ну мы люди отмороженные! :)

На самом деле просто надобности небыло, цели такой не стояло...
А вот ради интереса попробовать - это пожалуйста, посмотреть что будет :)

Я вроде так и написал:
Извращался в локальной сети
Кстати, на самом деле, я думаю поставленная тема очень интересная
 

MiksIr

miksir@home:~$
Тема то интересная, но только в ракурсе опыта использования существующих систем непрерывной интеграции. А детские велосипеды к ней отношения не имеют, тем более с квадратными колесами.
 
Сверху