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 直接写死。