2016-01-06 3 views
0

После установки нового драгоценного камня, Slackistrano к уже успешно развернута приложению с Capistrano, наши развертывания начали неудачу из-за ошибками во время рек активов: прекомпиляция или грабель БД: мигрировать задачиошибка SSHKit во время развертывания Capistrano из приложения Rails

cap aborted! 
SSHKit::Command::Failed: rake stdout: Nothing written 
rake stderr: Nothing written 
/Users/pete/.rvm/gems/ruby-2.2.2/gems/sshkit-1.3.0/lib/sshkit/command.rb:94:in `exit_status=' 

Эта ошибка, очевидно, не очень полезна.

Если я запустил cappedano task cap, то создав активы: прекомпиляция, это сработает.

Так что же здесь происходит?

Есть несколько других решений для отказов SSHKit во время развертывания крышек, но большинство из них были для развертывания в первый раз и не работали для меня.

ответ

0

Вот как я выяснил решение (после длительного вытягивания волос).

Я знал, что это был, вероятно, новый камень, который вызывал проблему. Поэтому я пошел в исходный код для sshkit/command.rb и вывел команду, которую он пытался выполнить на удаленном сервере.

Затем я вошел в удаленный сервер и запустил его вручную и получили следующий результат:

$ cd /home/web/sites/site.com/releases/20160106224143 && (RAILS_ENV=production ~/.rvm/bin/rvm default do bundle exec rake db:migrate) 
rake aborted! 
NoMethodError: undefined method `each_pair' for "slack:deploy:updating":String 
/home/web/sites/site.com/shared/bundle/ruby/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1602:in `compile!' 
/home/web/sites/site.com/shared/bundle/ruby/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1344:in `add_filter' 
/home/web/sites/site.com/shared/bundle/ruby/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1331:in `before' 
/home/web/sites/site.com/shared/bundle/ruby/2.2.0/gems/sinatra-1.4.6/lib/sinatra/base.rb:1989:in `block (2 levels) in delegate' 
/home/web/sites/site.com/shared/bundle/ruby/2.2.0/gems/slackistrano-1.0.0/lib/slackistrano/tasks/slack.rake:121:in `<top (required)>' 

Таким образом, проблема началась с Slackistrano, но потом, что? почему Синатра там? Я не использую Sinatra в своем приложении.

Ну, я обнаружил, что в моем Gemfile был камень, который был только для разработки (mailcatcher), но был в разделе производства Gemfile. Я удалил это и переделал успешно.

Однако, очевидно, существует более глубокая проблема, поскольку, по-видимому, существует нечто вроде столкновения имен по методу «прежде» синатра и capistrano, что вызвало это в первую очередь.

Я размещаю здесь, чтобы помочь другим отлаживать возможные ошибки SSHKit во время развертывания Cap, а также, возможно, направлять других на странные конфликты имен между Sinatra и Capistrano.

+1

[Веб-сайт Mailcatcher] (http://mailcatcher.me/) «Пожалуйста, не помещайте mailcatcher в свой Gemfile. В какой-то момент это будет конфликтовать с вашими приложениями. »Хотя, сказав это, они [используют] (https://github.com/sj26/mailcatcher/blob/efd7b4ff0e3bb7f1dcd4c92752a3311eaa059df8/lib/mail_catcher/web/application.rb#L5) 'require" sinatra "' с [модульным стилем] (https://github.com/sj26/mailcatcher/blob/efd7b4ff0e3bb7f1dcd4c92752a3311eaa059df8/lib/mail_catcher/web/application.rb#L17). 'require" sinatra/base "' вероятно, будет лучше, и следует избегать столкновения имени. – matt

+0

Полезно знать! это был также драгоценный камень с использованием синатра, но я только что проверил, и они требуют синатра/базы, поэтому я не знаю, были ли они оскорблены или нет. –