部署 capistrano 部署的项目,添加新的 gem 后就会出问题,怎么破

aisensiy · 2013年02月21日 · 最后由 aisensiy 回复于 2013年07月01日 · 2651 次阅读

用 capistrano + rbenv 按照 railscasts #335 Deploying to a VPS 所提示的流程进行的 VPS 的部署。

但是每当我在 Gemfile 里面添加一个新的 gem 之后再部署的时候就会有问题。比如这次我添加了 devise 然后执行 cap deploy 之后就报错说 'bcrypt-ruby' 没有安装成功,要我在 vps 上 gem install bcrypt-ruby,我照做了,再次执行 cap deploy 依然报同样的错误。google 了半天,还没找到解决问题的办法...求助~

本地添加了 gem,要在服务器 bundle install

#1 楼 @Ddl1st cap deploy 会执行 bundle install 的吧, 报错显示在 执行

executing "cd /home/deployer/apps/get-real/releases/20130221144137 && bundle install --gemfile /home/deployer/apps/get-real/releases/20130221144137/Gemfile --path /home/deployer/apps/get-real/shared/bundle --deployment --quiet --without development test"

的时候报错的。

运行 cap deploy:restart 重启后有没有问题?没问题的话可以参考 http://ruby-china.org/topics/3190

#3 楼 @saberma 额,当然有问题,因为

*** [deploy:update_code] rolling back
  * executing "rm -rf /home/deployer/apps/get-real/releases/20130221150248; true"

相当宇什么事情都没有做唉

你发的只看到执行和回滚,错误信息都没看到

#5 楼 @Ddl1st 不好意思,log 来了

servers: ["ali"]
    [ali] executing command
 ** [out :: ali] Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
 ** [out :: ali] 
 ** [out :: ali] 
 ** [out :: ali] /usr/bin/ruby1.9.1 extconf.rb
 ** [out :: ali] 
 ** [out :: ali] 
 ** [out :: ali] Gem files will remain installed in /home/deployer/apps/get-real/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1 for inspection.
 ** [out :: ali] 
 ** [out :: ali] Results logged to /home/deployer/apps/get-real/shared/bundle/ruby/1.9.1/gems/bcrypt-ruby-3.0.1/ext/mri/gem_make.out
 ** [out :: ali] 
 ** [out :: ali] An error occurred while installing bcrypt-ruby (3.0.1), and Bundler cannot continue.
 ** [out :: ali] 
 ** [out :: ali] Make sure that `gem install bcrypt-ruby -v '3.0.1'` succeeds before bundling.
 ** [out :: ali] 

先在网上找找怎么安装 bcrypt-ruby 把

看起来跟 cap 没关,是安装 bcrypt-ruby 时有问题,可能是缺少某些依赖(纯猜)

#7 楼 @Ddl1st #3 楼 @saberma 额... 问题解决了,似乎是把 unicorn 停到之后在执行就可以了...我刚才在乱试一统,不知道是不是因为停掉 unicorn 之后再跑就好了...

安装了 gem 当然要重启,不过这和部署没关系啊,你 gem 安装好后,执行 cap deploy 应该是没问题的。cap deploy 默认是执行 update 然后是 restart

我是用 rainbows,使用 capistrano 也遇到这个问题;停掉 rainbows 就可以 cap deploy 了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号