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

dimagolov
можно попробовать из доктрины выдрать этот функционал)
 
dimagolov
http://www.mysqldiff.org/
http://software.adamspiers.org/wiki/mysqldiff

-~{}~ 09.10.09 16:53:

Я для postgres использую apgdiff
 
спасибо, как я понял, надо тянуть удаленную структуру данных на свой хост, тут делать diff и получать патч, после чего накладывать на удаленный сервер?
 
можно все это делать удаленно.

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

но трудно перейти например с версии 2->5
должен быть переход 2->3->4->5
 
Я это делаю при сборке пакета. Есть эталонная база, есть рабочая... собирая пакет делается дифф. Когда пакет выкатывается на продакшн, диф наносится как на продакшн базу, так и на эталонную.
 
Apache Ant + crontab. На центральном сервере должен быть доступ к шеллу, на остальные антом заливать по ФТП. Если полноценный доступ к шеллу есть на всех серверах, то равноценным по грамотности будет использование svn + crontab.

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

-~{}~ 12.10.09 14:43:

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

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

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

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

Да, кстати, есть же команда, которая делает DIFF между конкретными ревизиями. У нас так апдейт-пакеты создаются.
Вроде бы так: svn diff -r$1:$2 --summarize, где $1, $2 - номера ревизий.
 
Resha для того чтоб быть на танке...
речь идет о дифах БД, реализованных в ввиде ALTER/CREATE/DROP TABLE
 
Ок, понятно.

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

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

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

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

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

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

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

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

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

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

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

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

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

Ну мы люди отмороженные! :)

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

Я вроде так и написал:
Извращался в локальной сети

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