Capistrano чаще всего используется с Ruby-on-rails, предназначение данного пакета в удаленном развертывании приложений — которое сводится к выполнению заданных команд по SSH на удаленных серверах. Рассмотрим как на базовом уровне работать с Capistrano Rails.
При установке Ruby в домашнем каталоге пользователя создается Gemfile. Чтобы ставить нужные гемы затем достаточно его редактировать и перечитывать. Установим Capistrano (все действия от имени непривилегированного пользователя)
mcedit Gemfile
gem 'Capistrano'
bundle
capify .
Команда добавляет нужные файлы, вывод следующий
[add] writing `./Capfile'
[add] writing `./config/deploy.rb'
[done] capified!
Инструкции Capistrano Rails и их исполнение
Инструкции и настройки пакета находятся в созданном файле config/deploy.rb, редактируем его добавляя первую инструкцию
mcedit config/deploy.rb
task :hello do
puts «hello world»
end
Чтобы выполнить нужно ввести в консоли имя задачи после команды cap
cap hello
Или то же самое через bundle
bundle exec cap hello
Одну инструкцию Capistrano можно вызывать внутри другой
mcedit config/deploy.rb
task :hello do
puts «hello world»
goodbye
end
task :goodbye do
puts «goodbye world»
end
Сейчас выполнив кап-файл увидим и приветствие и прощание
bundle exec cap hello
Можно сделать то же иначе
mcedit config/deploy.rb
task :hello do
puts «hello world»
#goodbye
end
task :goodbye do
puts «goodbye world»
end
after :hello, :goodbye
Вновь обращаемся к файлу и видим hello world и goodbye world
bundle exec cap hello
Можно задать переменную и подставлять ее в команды (в примере — recipient)
mcedit config/deploy.rb
set :recipient, «Ruby»
task :hello do
puts «hello #{recipient}»
#goodbye
end
task :goodbye do
puts «goodbye #{recipient}»
end
after :hello, :goodbye
bundle exec cap hello
hello Ruby
Так на базовом уровне задаются инструкции на локальной машине, чтобы выполнять их на удаленном сервере нужно дополнить файл deploy.rb
mcedit config/deploy.rb
server «123.123.123.123», web
set :user, «programmer»
#web здесь это — роль
set :recipient, «Ruby»
task :hello do
puts «hello #{fetch(:recipient, «World»)}»
run «echo 'Hello World' > ~/hello»
#goodbye
end
task :goodbye do
puts «goodbye #{recipient}»
end
after :hello, :goodbye
При выполнении cap hello команда отправится на сервер с указанным адресом и выполнится от имени пользователя deployed
cap hello
Можно проверить все ли прошло так, как задумывалось авторизовавшиьс на сервере и просмотрев содержимое файла /home/programmer/hello (hello в домашнем каталоге пользователя)
mcedit config/deploy.rb
server «123.123.123.123», web
set :user, «programmer»
set :recipient, «Ruby»
default_run_options[:pty] = true
#if it requests for a password it will pass it to the shell
task :hello do
puts «hello #{fetch(:recipient, «World»)}»
run «#{sudo} cp ~/hello /hello»
#goodbye
end
task :goodbye do
puts «goodbye #{recipient}»
end
after :hello, :goodbye
Роли в CAPISTRANO и работа с несколькими серверами
Можно работать с несколькими серверами .при этом их обычно разделяют по выполняемым ролям на web-сервер, app — сервер приложений, db — сервер баз данных. Роли могут разделяться между машинами или выполняться одной из них.
mcedit config/deploy.rb
server «123.123.123.123», :web, :app, :db, primary: true
set :user, «programmer»
#or like this:
#server :web, «123.123.123.124»
#server :app, «123.123.123.124»
#server :db, «123.123.123.124», primary: true
#set :user, «programmer»
set :recipient, «Ruby»
default_run_options[:pty] = true
#if it requests for a password it will pass it to the shell
task :hello, roles: :db do
puts «hello #{fetch(:recipient, «World»)}»
run «#{sudo} cp ~/hello /hello»
#goodbye
end
task :goodbye do
puts «goodbye #{recipient}»
end
after :hello, :goodbye
Проект развивается и скачать его можно с github
В cap файл можно внести и более содержательные инструкции — например, указания на необходимость установки пакетов
require 'capistrano/deploy'
Затем, как всегда, нужно выполнить команду cap с именем инструкции.
Capistrano может использоваться не только с приложениями на Ruby, но и с PHP.