首页 文章

在Capistrano部署Rails应用程序期间出现SSHKit错误

提问于
浏览
0

在安装新的宝石后,Slackistrano已经成功部署了Capistrano的应用程序,我们的部署在rake资产期间开始失败并出现以下错误:precompile或rake db:migrate tasks

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='

这个错误显然不是很有帮助 .

如果我运行capistrano任务上限暂存资产:预编译,它将成功 .

那么这里发生了什么?

在封顶部署期间,还有一些其他解决SSHKit故障的解决方案,但其中大多数都是首次部署,并不适合我 .

1 回答

  • 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在那里?我不在我的应用程序中使用Sinatra .

    好吧,我发现我的Gemfile中有一个gem只用于开发(mailcatcher)但是在Gemfile的 生产环境 部分 . 我删除了这个并成功重新部署 .

    然而,显然存在一个更深层次的问题,因为似乎在sinatra和capistrano的“before”方法中出现了某种名称冲突,这种方法首先导致了这种情况 .

    我发布这里是为了帮助其他人在Cap部署期间调试可能的SSHKit错误,也可能引导其他人在Sinatra和Capistrano之间发生奇怪的名称冲突 .

相关问题