проблема: аяяй, чекаут кода (таски setup, update_code, rollback_code, and symlink) пытается выполняться во всех ролях!! (на мейл сервере, на MySQL сервере и т.д. )
решение: прописываем у таких ролей :no_release => true
role :mail, config_production[:mail][:host], :no_release => true
role :solr, config_production[:solr][:host], :no_release => true
role :db, config_production[:db][:host], :no_release => true
проблема: не можем выполнить удаленную команду, т.к. не можем даже влогиниться (начиная от версии Capistrano 2.1)
решение: Начиная с версии 2.1, капистрано больше не запрашивает pty в каждой команде. Проблема в том, что на некоторых системах (на Соляре точно, проверено) некоторые команды (svn, passwd) автоматически впадают в неинтерактивный режим.
# по умолчанию оно false
default_run_options[:pty] = true
проблема: я хочу получить данные коннекта к базе от пхпшного приложения в руби, и юзать для сетапа чего-нибудь, и пусть мне дадут готовый хеш решение: (для Symfony)
php кусок
руби кусок (получаем настоящий юзабельный тру-хеш с символами в кач. ключей)
# Get DB conf
desc "Get DB connection hash"
task :db_get_conf, :roles => :web do
enc = ""
run "cd #{app} && php deploy-db-sendconf.php" do |channel, stream, data|
enc = data
raise data if stream == :err
end
# base64decode & convert to hash from YAML
YAML.load enc.unpack("m")[0]
end
авторизация (ручками)
# restart apache webserver
desc "Restart the web server"
task :restart, :roles => :web do
sudo "svcadm restart svc:/network/http:cswapache2" do |ch, stream, out|
ch.send_data "#{sudo_password}\n" if out =~ /^Password:/
raise out if stream == :err
end
end