Я только что впервые завершил установку капистрано. Большая часть всего оставлена с настройками по умолчанию, я настроил свой сервер, его аутентификацию и удаленную папку, а также доступ к моему репозиторию git.
Я использую capistrano для развертывания php-кода на моем сервере.
cap staging deploy и cap production deploy, но они запускают каждую команду дважды. Иногда возникают проблемы, когда эти задачи выполняются на сервере слишком быстро, возвращая коды ошибок, что останавливает процесс развертывания.
пример моего вывода при запуске cap staging deploy
DEBUG[47ecea59] Running /usr/bin/env if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi on ftp.cluster013.ovh.net
DEBUG[47ecea59] Command: if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi
DEBUG[c450e730] Running /usr/bin/env if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi on ftp.cluster013.ovh.net
DEBUG[c450e730] Command: if test ! -d ~/www/test_server/repo; then echo "Directory does not exist '~/www/test_server/repo'" 1>&2; false; fi
Он делает то же самое с каждой отдельной задачей, кроме той, которую я определил сам (в моем deploy.rb я определил задачу: set_distant_server, которая перемещает файлы с информацией о сервере)
Я почти уверен, что что-то упустил во время начальной настройки.
Вот мой capfile с настройками по умолчанию:
# Load DSL and Setup Up Stages
require 'capistrano/setup'
# Includes default deployment tasks
require 'capistrano/deploy'
# Includes tasks from other gems included in your Gemfile
# require 'capistrano/rvm'
# require 'capistrano/rbenv'
# require 'capistrano/chruby'
#require 'capistrano/bundler'
#require 'capistrano/rails/assets'
#require 'capistrano/rails/migrations'
# Loads custom tasks from `lib/capistrano/tasks' if you have any defined.
Dir.glob('lib/capistrano/tasks/*.rake').each { |r| import r }
Далее следует мой файл deploy.rb: # config действителен только для Capistrano 3.1 lock '3.2.1'
set :scm, :git
set :application, 'Application name'
# I use token authentification
set :repo_url, 'https://XXXXXXXXXXX:@XXXXXXX.git'
set :role, 'web'
# Default value for :log_level is :debug
set :log_level, :debug
set :tmp_dir, 'www/test_server/tmp'
set :keep_releases, 8
role :deploy_server, "XXXuser_name@XXXX_server"
task :set_distant do
on roles(:deploy_server) do
execute 'echo ------------******* STAGING *******------------'
execute 'cp ~/www/test_server/current/access_distant.php ~/www/test_server/current/access.php'
execute 'cp ~/www/test_server/current/session_distant.php ~/www/test_server/current/session.php'
end
end
after "deploy:finished", :set_distant
Вот мой staging.rb, намного короче:
server 'XXX_server', user: 'XXXuser_name', roles: %w{web}, port: 22, password: 'XXXpassword'
set :deploy_to, '~/www/test_server'
set :branch, 'staging'
И мой production.rb очень похож:
server 'XXX_server', user: 'XXXuser_name', roles: %w{web}, port: 22, password: 'XXXpassword'
set :deploy_to, '~/www/beta/'
Я почти уверен, что пропустил шаг во всех предпосылках, чтобы он работал нормально. Я новичок в рубине, в драгоценных камнях и очень давно не использую оболочку.
Кто-нибудь понимает, почему эти команды запускаются дважды, и как я могу это исправить?
Заранее большое спасибо.
Дополнительная информация: Версия Ruby: ruby -v ruby 2.1.2p95 (2014-05-08, редакция 45877) [x86_64-darwin13.0]
Версия Capistrano: cap -V Версия Capistrano: 3.2.1 (Версия граблей: 10.1.0)
Я не создавал и не настраивал Gemfile, я понимал, что он не нужен в Capistrano 3. В любом случае, я бы не знал, как это сделать.