• unicorn.rb 中使用了FILE来定位 app_root

    app_root = File.expand_path("../..", __FILE__)
    working_directory app_root
    

    注意 unicorn 启动命令中,-c #{unicorn_config} 必须写完整路径,否则 capistrano 更新 current 符号链接后,unicorn 收到 USR2 后新启 master 会使用旧的 unicorn.rb。

    run "cd #{current_path} && RAILS_ENV=production bundle exec unicorn_rails -c #{unicorn_config} -D"
    

    我测试的时候,启动命令写成 cd /var/www/myapp/current && RAILS_ENV=production bundle exec unicorn_rails -c config/unicorn.rb -D,结果 cap production deploy 后,仍然是旧代码在跑。 为了减少出错,我现在把 unicorn.rb 中的 app_root 直接写死。