Capistrano не работает для нескольких хостов - PullRequest
6 голосов
/ 27 апреля 2010

Я в недоумении, и после поиска морей (читай: Интернет) решений, у меня не останется ничего, кроме как взяться за стек. любая помощь приветствуется.

У меня есть capistrano, работающий локально для развертываний в нескольких различных средах. (Я на Windows 7, FWIW). Все было хорошо, пока мне не потребовалось развернуть на нескольких серверах приложений за одно развертывание.

Обычно, когда я звоню cap deploy, меня запрашивают мою ssh-фразу. У меня работает ssh-agent (git никогда не приставает к моему проходу), но, несмотря на это, Capistrano всегда меня раздражал после каждого развертывания. Несмотря на это, он всегда работал при развертывании на ОДНОМ хосте.

Теперь, когда я пытаюсь выполнить развертывание на нескольких серверах одновременно, он запрашивает мою фразу-пароль, которая выглядит несколько раз:

(ips удален ME)

servers: ["redacted", "redacted"]<br />
Enter passphrase for ~/.ssh/id_rsa: Enter passphrase for ~/.ssh/id_rsa: 

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

connection failed for: <one of the server ips> (NoMethodError: undefined method `overwrite' for nil:NilClass)

И это конец.

  1. Я могу "без пароля" использовать ssh на серверах, на которых я развертываюсь, очень хорошо.
  2. Я почти уверен, что ssh-agent запущен, так как я могу нажимать Git без ввода пароля каждый раз
  3. Использование параметра forward_agent в cap deploy не работает.
  4. Это моя роль:
    role :app, "ip 1 removed", "ip 2 removed"
  5. Если я установил default_run_options[:max_hosts] = 1, он работает нормально, но запрашивает мою фразу-пароль для каждого отдельного соединения с каждым хостом, на котором я развертываю ... что в итоге очень много.

По сути, я ищу что-то из нижеперечисленного (но не ограничиваясь этим): - «Ты никогда не исправишь это на окнах» - «Вот как вы получаете НАСТОЯЩЕЕ без пароля пароль развертывания в Capistrano» - "Вы пропустили эту настройку / функцию?" - «У меня есть камень, который может починить все что угодно, ты можешь позаимствовать его» * ​​1033 *

Спасибо!

Ответы [ 4 ]

0 голосов
/ 09 марта 2012

У меня была почти идентичная проблема (на Ubuntu 10.04), за исключением того, что вместо получения ошибки connection failed for... она просто сидела бы и ничего не делала, пока я не нажму CTRL + C.

Решением было ручное добавление моего SSH-ключа в мой набор ключей, набрав ssh-add /path/to/my/private/key. Он попросил у меня пароль, который я ввел. Тогда я смогу запустить cap production invoke COMMAND="hostname" и cap production deploy, даже не введя свой пароль.

У меня есть ssh_options[:forward_agent] = true набор.

0 голосов
/ 29 сентября 2010

Я действительно столкнулся с той же проблемой и исправил ее (на самом деле исправил), указав "default_run_options [: max_hosts] = 1" и используя ssh-agent для кэширования моей фразы-пароля. Это НЕ идеальное решение, и основная проблема остается скрытой под поверхностью.

0 голосов
/ 16 ноября 2010

вы пытались использовать putty-agent для хранения паролей ssh?

возможно, не прямой ответ, но вы можете установить msysgit и выбрать msysgit для полного добавления в PATH, также выберите использование putty-agent для аутентификации.

0 голосов
/ 25 июня 2010

На что установлена ​​пользовательская переменная? выполните простую команду invoke из каталога с Capfile, которую следует попытаться выполнить на каждом сервере в списке. Это успешно соединяется?

cap invoke COMMAND="echo 'Hello World'"

Если это не сработает, скорее всего, ваш пользователь отличается от вашего ssh-агента без пароля. Вы также можете просмотреть журналы SSH на сервере и узнать, можете ли вы сказать, какой агент на самом деле пытается подключиться неудачно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...