Pull to refresh

Comments 15

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

что то в статье про это больше нигде не написано, а интересно с какими ьазами работает и как
Для работы с базой есть встроенные task-и «deploy:migrate» и «deploy:migrations», но они реализованы под RoR. При желании их можно переписать для своего фреймворка, если он поддерживает миграции.
А опишите трудности, с которыми вы сталкивались при использовании именно этого деплоера. Или чего вам не хватает в нём, может быть
Сначала трудно было разобраться, как заставить его работать с php. В принципе для текущих задач его возможностей предостаточно. Если в Yii в будущем появятся миграции, было бы круто сделать что-нибудь наподобии capcace, например capyii.
Как-то не разобрался по статье и ссылки capcake выше собственно откуда и куда берутся файлы для деплоя: прямо копируются с /path/deploy/from/ в /path/deploy/to? Тогда непонятно зачем вообще репозиторий нужен. Удаленно на сервере выполняется получение рабочей копии в [deploy_to]/releases/…? Зачем доступ к локальному репозиторию тогда? Если с репозиториями работа идёт, то попадут ли в [deploy_to]/releases/… файлы VCS (и можно ли как-то ограничить список файлов, попадающих в релиз, то есть чтобы в репах были, а в релизе нет). Можно ли настроить работу только с локальным репозиторием или вообще без него (прямо из рабочей копии)?

В общем есть локальный центральный репозиторий (извне не виден), есть рабочая копия — откуда запускать все эти команды или доступ к репозиторию с сервера мастхэв?

Сейчас работает самописный скрипт для деплоя: запускается в рабочей копии (а вообще в любом каталоге, не обязательно под VCS), ставит на сервере заглушку (убирает симлинк из эвиабле_сайтс и рестартует nginx — дефолтный выводит «Упс, обновите страницу чуть позже» на любом урле), рекурсивно копирует (rsync) на сервер всё из каталога (кроме списка exclude), запускает миграции Доктрин, запускает сайт (восстанавливает симлинк, рестартует nginx), пишет «ОК» (или ошибки если не ОК, откатов всяких непредусмотрено, только для миграций в рамках транзакции). Собственно основной алгоритм стянут почти полностью с symfony, но скрипт «костыльный», многое (адреса, явки, пароли) захардкодено для разных проектов разные скрипты.

Capistrano сможет делать всё то же самое без изучения ruby, написания своих плагинов и т. п., в общем малой кровью, скажем полдня чтения доков и полдня экспериментов?

ЗЫ apt-get install ruby rubygems — за это отдельное спасибо, всё как-то не мог понять как ставить приложения, как-то этот момент не поясняется в разных how-to, мудрил с исходниками и как-то неудачно, теперь, может и с redmine разберусь.
*На вопрос «Capistrano сможет делать… малой кровью ...?» достаточно простого ответа: «Да, чуть-чуть мозгов и сможет» или «Нет, без 8 лет работы с руби столь тонкую настройку не сделать»
Да, сможет.
Логики в конфигах capistrano почти нет, там по сути только задание переменных и описание задач.
О режимах деплоя в капистрано по-русски хорошо написано здесь. Если используется репозиторий, служебные файлы(.git, .svn и тп) в релиз не попадут.
Спасибо, за ссылку отдельное, даже про nginx есть :)

А нет, соврал. По умолчанию используется стратегия :checkout, которая сохраняет служебные файлы и директории. Просто на RoR это как-то не особенно важно(до .git, лежащего в корне, никак не добраться. Все запросы роутятся обычно в контроллеры и в директорию public для статики).
На счет доступа к репозитрию и с локального компьютера и с сервера в туториале написано: «This is the repository address for your application, and by default it must be accessible both by your local machine (where you will be deploying from) and your production servers (where you will be deploying to)». То есть по умолчанию доступ должен быть. По поводу того, когда можно ограничиться доступом только с одной машины я ни чего не нашел. Фактически капистрано подключается к серверу, куда надо залить код и делает от туда checkout из репозитория. Перед тем как это сделать, он выполняет команду «git ls-remote :repository» с локальной машины. Для чего он это делает, мне не ясно, буду рад, если кто-нибудь объяснит.
Чтобы не копировать определенные файлы или каталоги, можно в рецепт добавить строку вида
set :copy_exclude, [".git", ".gitignore"]

На остальные вопросы, надеюсь вы нашли ответы в предыдущих комментариях.
Для работы только с локальным git репозиторием использую такой конфиг
deploy.rb


set :application, "app"
set :repository,  "file:///home/user/www/app"
set :scm, :git
role :web, "re.mo.te.ip"  
set :deploy_to, "/remote/path"
set :user, "toor"
set :password, "secret"
set :use_sudo, false
set :deploy_via, :copy         #checks out everything into a temporary directory, zips it up (tgz), and copies the entire thing
set :copy_exclude, [".git", ".gitignore"]

Sign up to leave a comment.

Articles