Я использую интересный подход: проверка (и обновление) выполняется в совершенно отдельном каталоге (возможно, на совершенно отдельной машине), а затем код копируется туда, где веб-сервер прочитает его с помощью rsync. Правило --exclude в командной строке rsync используется, чтобы не копировать директории .svn (и CVS), а --delete-excluded гарантирует, что они будут удалены, даже если они были скопированы ранее.
Поскольку и svn update, и rsync выполняют инкрементную передачу, это довольно быстро даже для крупных сайтов. Это также позволяет вам иметь ваш репозиторий за брандмауэром. Единственное предостережение заключается в том, что вы должны переместить все каталоги с файлами, сгенерированными на сервере (например, каталог files / в Drupal), в место за пределами целевого каталога rsync (rsync перезапишет все при таком использовании) и символическую ссылку на него. должен быть создан в исходном каталоге rsync. В исходном каталоге rsync могут быть и другие файлы без контроля версий (например, файлы конфигурации для конкретной машины).
Полный набор параметров rsync, которые я использую,
rsync -vv --rsh='ssh -l username' -rltzpy --exclude .svn/ --exclude CVS/ --exclude Attic/ --delete-after --delete-excluded --chmod=og-w,Fa-x
Даже тогда, для обеспечения избыточности, у меня все еще есть правило конфигурации, предотвращающее доступ к .svn, скопированное из правила по умолчанию Debian, которое предотвращает доступ .ht * (.htaccess, .htpasswd).
person
CesarB
schedule
18.10.2008