Капистрано ненавидит Gemspecs - PullRequest
0 голосов
/ 30 ноября 2009

Я развертываю приложение rails на Slicehost, используя Capistrano. Часть процесса развертывания включает в себя восстановление драгоценного камня и его установку.

Развертывание кода на сервере через git scm работает нормально, но по какой-то причине, когда я пытаюсь сделать ...

run 'gem build /my/app/folder/my.gemspec'

... в отдельной задаче в deploy.rb все это идет bboom. Я получаю странную ошибку, сообщая, что файлы в gemspec не являются файлами ...

ERROR:  While executing gem ... (Gem::InvalidSpecificationException)
[ ... , "public/images/admin/navigation_shadow.png", "public/images/admin/new_layout.png", "public/images/admin/buttons_background.png", "public/images/admin/expand.png", "public/images/admin/status_spinner
** [out :: MY.IP.ADD.RESS ] .gif", "public/images/admin/draft_page.png", "public/images/admin/vertical_tan_gradient.png", "public/images/admin/status_top_right.png", "public/images/admin/snippet.png", "public/images/admin/spacer.gif", "public/images/admin/status_bottom_right.png", "public/images/admin/spinner.gif", "CONTRIBUTORS", "script", "script/server", "script/breakpointer", "script/generate", "script/dbconsole", "script/about", "script/spec", "script/runner", "script/process", "script/process/reaper", "script/process/inspector", "script/process/spinner", "script/process/spawner", "script/version", "script/plugin", "script/console", "script/autospec", "script/destroy", "script/cucumber", "script/spec_server", "script/performance", "script/performance/profiler", "s ** [out :: MY.IP.ADD.RESS ] cript/performance/request", "script/performance/benchmarker", "script/extension", "LICENSE", "CHANGELOG", ".gitignore", "bin", "my.gemspec", "config", "config/database.mysql.yml", "config/environments", "config/environments/test.rb", "config/environments/production.rb", "config/environments/development.rb", "config/database.yml" ] are not files

Что странно, потому что та же команда отлично работает, когда я ssh в поле и делаю это вручную, и когда я делаю ....

sh -c 'gem build /my/app/folder/my.gemspec'

, как capistrano оборачивает удаленные вызовы командной строки, и это прекрасно работает, когда я делаю это вручную.

Даже пытался обернуть вызов Kernel.system () в другой файл ruby ​​и вызвать его из deploy.rb, но все равно получил ту же проблему. Сумасшедший.

Интересно, если что-то делать с

** [out :: MY.IP.A.DRES]

строка, добавляемая в вывод через явно случайные интервалы.

1 Ответ

0 голосов
/ 01 декабря 2009

Возможно, что "все работает нормально" не совсем так, вы уверены, что он не выводит STDERR?

Функция out :: IP addr немного странная и ненормальная; Вы также должны подумать, правильно ли установлен ваш PATH, в этом разница между PTY и TTY.

Самый простой способ сделать это (но не идеально):

run('echo $PATH')

против

ssh my.server.addr 'sh -c \'echo $PATH\''

(последнее - это то, что на самом деле делает Кэп.)

Вы также можете попробовать:

run("cd /my/app/folder/ && gem build my.gemspec")

^ один из них будет работать для вас.

...