2012-05-25 3 views
1

По крайней мере, это похоже на то, что capistrano терпит неудачу. Это делает его полностью через развертывание и в конце. вот результат.Как я могу заставить Capistrano прекратить сбой при развертывании: create_symlink?

* executing `deploy:create_symlink' 
* executing "rm -f ~/xxx.xx.xx/test/current && ln -s ~/xxx.xx.xx/test/releases/20120525193307 ~/xxx.xx.xx/test/current" 
servers: ["test.xxx.xx.xx"] 
["test.xxx.xx.xx"] executing command 
** [out :: test.xxx.xx.xx] rm: cannot remove `/var/www/vhosts/xxx.xx.xx/test/current': I command finished in 460ms 
*** [deploy:create_symlink] rolling back 
*** no previous release to rollback to, rollback of symlink skipped 
* executing "rm -rf /var/www/vhosts/xxx.xx.xx/test/releases/20120525195909; true" 
servers: ["test.xxx.xx.xx"] 
[test.xxx.xx.xx] executing command 
command finished in 524ms 
failed: "rvm_path=$HOME/.rvm/ $HOME/.rvm/bin/rvm-shell 'default' -c 'rm -f /var/www/vhosts/xxx.xx.xx/test/current && ln -s /var/www/vhosts/xxx.xx.xx/test/releases/20120525195909 /var/www/vhosts/xxx.xx.xx/test/current'" on xxx.xx.xx 

приложение использует Capistrano (2.12.0) Capistrano-Ext (1.2.1) очевидно есть больше камней, просто пытаются поставить то, что кажется уместным, пожалуйста, дайте мне знать, если больше информации будет полезно.

Вот deploy.rb

require "rvm/capistrano" 
require 'bundler/capistrano' 
require 'capistrano/ext/multistage' 

set :stages, %w(staging production) 
set :default_stage, 'staging' 

set :application, 'xxx' 

# trying to not use sudo on the deployment 
#set :use_sudo, false 

#set :copy_exclude, [".git", "spec"] 

set :repository, '~/git/xxx.git' 
set :local_repository, "~/rorwork/xxx/.git" 
set :scm, :git 
set :user, 'xxx' 
set :group, 'xxxx' 
ssh_options[:forward_agent] = true 
set :branch, 'master' 
set :deploy_via, :remote_cache 
set :scm_command, "/usr/local/bin/git" 
set :local_scm_command, :default 
default_run_options[:pty] = true 
set :normalize_asset_timestamps, false #for asset piple 

set :dbuser, 'xxx' 
set :dbpass, 'xxx' 

# if you want to clean up old releases on each deploy uncomment this: 
# after "deploy:restart", "deploy:cleanup" 

# if you're still using the script/reaper helper you will need 
# these http://github.com/rails/irs_process_scripts 

# If you are using Passenger mod_rails uncomment this: 
namespace :deploy do 
    task :start do ; end 
    task :stop do ; end 
    task :restart, :roles => :app, :except => { :no_release => true } do 
    run "#{try_sudo} touch #{File.join(current_path,'tmp','restart.txt')}" 
    end 
end 

и staging.rb

set :domain, 'test.xxx.xx.xx' 

role :web, domain       # Your HTTP server, Apache/etc 
role :app, domain       # This may be the same as your `Web` server 
role :db, domain, :primary => true  # This is where Rails migrations will run 

set :deploy_to, "/var/www/vhosts/xxx.xx.xx/test" 
set :rails_env, 'staging' 
set :rack_env, rails_env 

set :dbname, "xxx_staging" 

#set :bundle_without, [:test, :development, :production] 

я вручную создать 'текущие', 'общая' и 'освобождение' папка в директории и развертывания назначьте соответствующую группу пользователей:. первоначально получал проблемы с разрешениями на dirs, но получил это разобрал. вроде бы, в убытке здесь, много поисков решений нет ничего нет. любые предложения или опыт здесь очень ценятся!

в тестировании cap staging deploy подумал, что я постараюсь на производстве, а также cap production deploy поручает в то же время ... что-то умное о согласованности.

+0

Если вы нашли решение самостоятельно, вы также можете разместить его здесь в качестве ответа и принять его. – ZelluX

ответ

6

UPDATE: Нашел

Удаление «текущий» каталога и позволяя Capistrano создать «текущую» символическую ссылку на последнюю версию фиксированной его.

Я попробую немного разобраться. Я на самом деле создавал «текущие» папки и, например, «mkdir current». который просто мешает капистрано создавать символические ссылки. попробуйте, создайте папку под названием «bob», затем в том же каталоге создайте символическую ссылку «bob» и укажите ее где-нибудь, она, вероятно, поместит символическую ссылку «bob» в каталог «bob».

Когда я удалил 'current' 'shared' и т. Д., Каталоги, capistrano могли создать «текущие» и другие необходимые символические ссылки. Таким образом, конкретное удаление «текущей» директории позволило capistrano создать «текущую» символическую ссылку, которая просто указывает на последнее развертывание в директории «релизы».

Обратите внимание на следующую ошибку, которая также находится в вопросе.

** [out :: test.xxx.xx.xx] rm: cannot remove `/var/www/vhosts/xxx.xx.xx/test/current': I command finished in 460ms 

Причина, по которой это не удалось. Я создал папку с именем current. это проблема. он НЕ должен быть каталогом, он должен быть символической ссылкой, которую создает capistrano.

Создав эти папки, он сломал развертывание. Удаление этих папок позволило capistrano создать символические ссылки с тем же именем. С тех пор плавный парус.

+0

Я не понимаю вас решение :(У меня такая же проблема – Will

+0

@ Если я обновил ответ выше, надеюсь, что добавит немного ясности в то, что я пытаюсь объяснить. – DetDev

+0

Не понял ваше решение. .. –

0

Я просто отследил подобную проблему.

Вот ошибка первая ошибка у меня была:

cap aborted! Errno::ECONNREFUSED: Connection refused - connect(2) for "{my-ip-address}" port {my-ssh-port}

Я также хотел бы получить эту подобную ошибку:

Tasks: TOP => git:create_release (See full trace by running task with --trace) The deploy has failed with an error: #<Errno::ECONNREFUSED: Connection refused - connect(2) for "my-ip-address" port {my-port}>

Оказывается, это была проблема с одновременной SSH сессий, как на моем сервере работает Fail2Ban. Для того, чтобы решить, что я просто сделал следующее:

редактировать Острога, который содержит конфигура протокол SSH

$ sudo nano /etc/fail2ban/jail.local 

искать [SSH] и множество разблокированы = ложное найти [SSH-ддос] и множество разблокированы = ложный

Не забудьте перезапустить fail2ban после ваших изменений и открытым SSH (если то, что вы используете)

$ sudo service fail2ban reload 
$ sudo /etc/init.d/ssh reload 

Ее стоит отметить, что connecti on будет отказано на разных этапах (задачах) в развертывании. Например, после перезагрузки и быстрого bundle exec cap production deploy:check все оказалось прекрасным. Затем я попытался развернуть и получить ту же ошибку, но во время выполнения другой задачи. Я также использую UFW, который я отключил и повторно включил без проблем. UFW не было причиной вышеупомянутой проблемы.

После того, как я решил эту проблему, Capistrano не смог бы создать символическую ссылку из текущего каталога до последней версии. Ошибка ниже:

Tasks: TOP => deploy:symlink:release The deploy has failed with an error: #<SSHKit::Command::Failed: rm exit status: 1 rm stdout: Nothing written rm stderr: Nothing written > ** Invoke deploy:failed (first_time) ** Execute deploy:failed

После прочтения широко, изменения версии sshkit, понижая Capistrano, исключая драгоценные камни, и т.д., я вышел в мой корневой документ и перечислил содержимое каталога ls -la я заметил, что каталог current был не в группе пользователя развертывания, я удалил текущую папку (sudo rm -rf current), и все сработало нормально. Удачи.

Смежные вопросы