繁体   English   中英

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

[英]SSHKit error during Capistrano deployment of Rails app

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

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 task cap staging assets:precompile,它就会成功。

那么这是怎么回事?

在 cap 部署期间,还有一些其他解决 SSHKit 失败的解决方案,但其中大多数是针对首次部署的,对我不起作用。

这是我找出解决方案的方式(拉了很多头发后)。

我知道可能是导致问题的新宝石。 因此,我进入了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中有一个gem仅供开发使用(mailcatcher),但在Gemfile的生产部分中。 我删除了此文件,并成功进行了重新部署。

但是,显然存在一个更深层次的问题,因为sinatra和capistrano的“之前”方法似乎首先引起了某种名称冲突。

我在这里发布的内容是为了帮助其他人在Cap部署过程中调试可能的SSHKit错误,并且也许还可以指导其他人在Sinatra和Capistrano之间发生奇怪的名称冲突。

对我来说,如果您在运行 Capistrano 时不小心使用了 Ruby 的不兼容版本,就会出现此问题。 在使用gem 'capistrano', '3.11.0'时,我必须添加一个.ruby-version以将它限制为2.7.5

所以我不确定声明Ruby 版本 2 或更高版本是否严格正确。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM