Я не веб-программист, но понемногу приходится этим заниматься. Есть сайт на drupal, это не так уж важно, но друпал — довольно большой сам по себе, и файлов в нем очень много. Плюс на сайте лежат еще всякие файлы, их много и некоторые из них довольно большие, общей суммой всё это под полгигабайта.
С маленькими сайтами я делал так: брал тотал коммандером копировал весь сайт к себе на компьютер, из phpMyAdmin делал копию базы, загружал эту копию в локальную базу. Запускал локальный сервер. Редактировал, что нужно, отлаживал, потом копировал обратно. Всё это копирование занимало совсем немного времени. Да и базу обратно не надо было перегружать обычно. Сейчас же даже скопировать весь сайт не считая статических файлов уже занимает весьма прилично времени (часы) из-за того, что много файлов и тотал коммандер на этом сильно тормозит. Копию базы делать тоже неудобно через phpMyAdmin.
Хотелось бы одной двумя кнопками получить заархивированную копию сайта (причем некоторые каталоги исключить) и копию базы. И обратно всё это тоже быстро восстановить. Shell доступ в данном случае есть, но не умею я *nix командной строкой пользоваться, а во вторых на другом хостинге, где
то тоже всё актуально нету его.
Здравствуйте, Рома Мик, Вы писали:
РМ>Я не веб-программист, но понемногу приходится этим заниматься. Есть сайт на drupal, это не так уж важно, но друпал — довольно большой сам по себе,
Как мне рассказывал один знакомец:
Терминология:
сайт — исходники + БД в настроенном виде
продакшен — сайт на сервере, то что доступно публично
тест environment — нечто у девелопера на машине. Часто присвоить версию не представляется возможным, т.к. часто берутся только части проекта.
svn — сорцконтрол
Workflow примерно такой:
1. Очень общо, в сорцконтроле исходники организованы так:
\VerXXX
Dev\ — девелоперская версия, то, над чем ведется работа и то куда делается чекин
Prod\ — сюда мерджится код из Dev когда пройдено тестирование.
2. На сервере работает скриптик, который при появлении изменений в \VerXXX\Prod обновляет сайт. Т.о. когда определенный набор фич создан и протестирован, манагер или тим лид мерджит из Dev в Prod, после чего проект обновляется скриптом. Понятно что там при необходимости обновление БД было, но это уже детали.
3. При обновлении структуры базы, а далее раз в неделю — делается выгрузка базы на сервер. Девелопер берет ее просто копированием. Взяв последнюю версию исходников он должен влить еще и выгрузку базы, чтобы синхронизироваться с изменениями базы.
Вобщем, по кругу: (имплементация -> (тестирование -> багфикс -> чекин в Dev) x N) x K -> мердж в Prod) x Ver
Таким образом копируются только изменения и всегда при появлении каких-то критикал багов в свежем проде можно вернуться к прошлой версии, опять же без аврала. У них так была работа построена со всеми проектами.
Если руки золотые, не важно из какого места они растут.
Здравствуйте, servancho, Вы писали:
S>1. Очень общо, в сорцконтроле исходники организованы так: S> \VerXXX S> Dev\ — девелоперская версия, то, над чем ведется работа и то куда делается чекин S> Prod\ — сюда мерджится код из Dev когда пройдено тестирование.
А с чем мерджить? Продакшн версию кто-то кроме разработчиков править может чтоли?
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, servancho, Вы писали:
S>>1. Очень общо, в сорцконтроле исходники организованы так: S>> \VerXXX S>> Dev\ — девелоперская версия, то, над чем ведется работа и то куда делается чекин S>> Prod\ — сюда мерджится код из Dev когда пройдено тестирование.
К>А с чем мерджить? Продакшн версию кто-то кроме разработчиков править может чтоли?
У сайта кроме кода есть еще и контент, и они не очень-то разделены.
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, Курилка, Вы писали:
К>>Здравствуйте, servancho, Вы писали:
S>>>1. Очень общо, в сорцконтроле исходники организованы так: S>>> \VerXXX S>>> Dev\ — девелоперская версия, то, над чем ведется работа и то куда делается чекин S>>> Prod\ — сюда мерджится код из Dev когда пройдено тестирование.
К>>А с чем мерджить? Продакшн версию кто-то кроме разработчиков править может чтоли? РМ>У сайта кроме кода есть еще и контент, и они не очень-то разделены.
Переведи?
У тебя файл может быть под контролем системы контроля версий и не быть подконтрольным одновременно?
svn update (или другая VCS) проапдейтит мне только то, что надо проапдейтить, или есть что-то о чём я не подозреваю?
На самом деле проблема в том, что сайт на хостинге живет своей жизнью, отдельной от того, что у разработчика. И копирования информации оттуда сюда (как и наоборот) дорогая операция. И не доступная svn. Т.е. мы можем взять из svn текущую продакшен версию, но заливать на сайт ее придется руками, в течение часа-двух. И нельзя гарантировать что найте именно то, что в svn, т.к. там информацию меняют редакторы, по идее только в БД, но я в этом на 100% не уверен на самом деле. Но даже если и только в БД, всё равно проблема, т.к. например у нас могла поменяться структура БД и если мы вначале обновим файлы, а потом БД будет какое-то время рассинхронизация одного и другого. Друпал может перевести сайт в выключенное состояние, когда он на все запросы показывает "зайдите попозже", но такое обновление занимает слишком много времени, чтобы так делать. О чем собственно и был вопрос, как это всё обновить побыстрее.
Здравствуйте, Рома Мик, Вы писали:
РМ>Я не веб-программист, но понемногу приходится этим заниматься. Есть сайт на drupal, это не так уж важно, но друпал — довольно большой сам по себе, и файлов в нем очень много. Плюс на сайте лежат еще всякие файлы, их много и некоторые из них довольно большие, общей суммой всё это под полгигабайта.
Я живу вот как. Копирую весь проект к себе на локал и работаю с ним: делаю правки, тестирую, а потом выкладываю в svn. Но svn доступен только для теста. Тоесть, как только правки выложил в svn, то сразу обновляется веб-директория обновленными файлами. Для прода это не актуально. Так вот. На прод выкладываю только те файлы которые были изменены. Нету нужды кидатся туда-сюда огромным количеством траффика. Если произошли изменения в базе данных, то делаю прямо на проде соответсвующие sql-запросы и жизнь продолжается. Да, конечно, есть промежуток времи в котором код пытаеться выполнить такие sql-запросы которые еще не могут выполниться корректно так как база не обновлена. Но эти все операции можно делать вне бизнес время, тогда, когда сайтом пользуется минимальное количество пользователей. И если вы будете делать это очень редко, вплоть даже с использованием странички что-то вроде "Site under constuction" то, надеюсь, пользователи вам простят.
PM>И нельзя гарантировать что найте именно то, что в svn, т.к. там информацию меняют редакторы, по идее только в БД, но я в этом на 100% не уверен на самом деле.
Всё-таки очень полезно быть уверенным на все 100% когда дело имеешь с таким вот случаем...
*nix команды вам очень пригодятся. Если есть время, советую подучить. Очень економит время и крайне удобно. Например, приходится иногда закачивать или скачивать даже несколько мегабайт но большого количества файлов. Я сначала архивую их в один файл и только потом скачиваю. Если есть shell то архивую в tar: tar -cf archive.tar some_folder/. Если нету shell'a, то иногда удается воспользоваться вот каким ухищрением. Пишу php-сприпт которые выполняет эту же самую shell-команду:
<?php
`tar -cf archive.tar some_folder`
?>
И потом спокойно скачиваю целый архив. Огромная економия времени! Только жаль что не всегда включен режим в котором есть возможность выполнить shell-команды из скрипта. Но есть еще один вариант. Поставщики хостинг-услуг часто используют разные инструменты для управление хостингом. Среди таких инструментов можно вспомнить cpanel, у которой есть в стандартном наборе функция делающая backup. Делаю бекап и потом скачиваю.
Раньше приходилось жить с другим большим проектом. Так вот проблема была в том что его прямо по ftp редактировали несколько программистов. Но в этом случае пытались разделить функциональность таким образом чтобы их части не пересекались. SVN не было. Сделал локальный сервер, с которым работал некоторое время, но так как файлы постоянно обновлялись, локальная версия постоянно делалась неактуальной. Да, вот тогда и у самого гудела голова от вопроса как же сделать так чтобы всем было хорошо. Вопрос так и не решил, а работали вот как. Если нужно что-то поправить, делали бекап файла который нужно поменять, у себя или прямо на ftp, редактировали, проверяли всё ли впорядке и там образом разрабатывался сайт...
Здравствуйте, TheOldMan, Вы писали:
TOM>Я живу вот как. Копирую весь проект к себе на локал и работаю с ним: делаю правки, тестирую, а потом выкладываю в svn. Но svn доступен только для теста. Тоесть, как только правки выложил в svn, то сразу обновляется веб-директория обновленными файлами. Для прода это не актуально. Так вот. На прод выкладываю только те файлы которые были изменены.
А можно поподробнее вот эти моменты. Во-первых как так сделано, что из svn сразу веб-директория обновляется? Я так понимаю, что это на тестовом локальном сервере, который на том же компьютере или в любом случае рядом. Скрипт какой-то запускается руками? Или как-то можно сделать чтоб само при коммите?
Какая-то автоматизация определения какие файлы были изменены есть или глядится в логи svn и определяется?
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, TheOldMan, Вы писали:
РМ>А можно поподробнее вот эти моменты. Во-первых как так сделано, что из svn сразу веб-директория обновляется?
Это сделано с помощью svn hook'ов, которые могут выполнятся, например, после комита и копировать файлы в определенное место.
РМ>Я так понимаю, что это на тестовом локальном сервере, который на том же компьютере или в любом случае рядом.
Нет, не рядом. Но на той же машине что и SVN репозиторий.
РМ>Скрипт какой-то запускается руками? Или как-то можно сделать чтоб само при коммите? РМ>Какая-то автоматизация определения какие файлы были изменены есть или глядится в логи svn и определяется?
Здравствуйте, TheOldMan, Вы писали:
РМ>>Какая-то автоматизация определения какие файлы были изменены есть или глядится в логи svn и определяется? TOM>Всё автоматизировано.
А как?
Здравствуйте, Рома Мик, Вы писали:
РМ>Здравствуйте, TheOldMan, Вы писали:
РМ>>>Какая-то автоматизация определения какие файлы были изменены есть или глядится в логи svn и определяется? TOM>>Всё автоматизировано. РМ>А как?
Здравствуйте, Рома Мик, Вы писали:
РМ>Я не веб-программист, но понемногу приходится этим заниматься. Есть сайт на drupal, это не так уж важно, но друпал — довольно большой сам по себе, и файлов в нем очень много. Плюс на сайте лежат еще всякие файлы, их много и некоторые из них довольно большие, общей суммой всё это под полгигабайта.
а может следовать рекомендациям разработки под Друпал?
по правилам разработанные / доработанные модули должны содержаться в отдельной папке — так что необходимость таскать кучу гигабайт туда-сюда отпадет. Да и базу таскать туда сюда не надо будет, если будете разрабатывать в Друпаловой идеологии.
Многие и рады были бы испытать когнитивный диссонанс, но нечем.