我注意到默认的“部署”任务会在远程机器上进行资产预编译,这会产生以下不良影响:
- 预编译期间奇怪的故障资产(在现场)
- 配置中的错误导致停机并带有 500 响应代码
- 需要很长时间的任务
我已经看到了这一点,当您没有任何要预编译的内容时,它不会导致您进行预编译,从而稍微缓解了这个问题:加速资产:使用 Rails 3.1/3.2 Capistrano 部署进行预编译
但必须有更好的解决方案。
有没有人试过这些:
- 始终部署到“暂存”位置,在那里您可以测试所有内容,然后添加某种
cap enliven
任务以某种方式告诉 Web 服务器前端开始使用另一个端口?(我可以通过编辑 nginx 并重新启动它来手动管理它,然后我可以通过 include和 cap 任务将它结合在一起upstream
来自动化一点。)nginx.conf
- 在本地预编译,然后简单地通过 rsync 推送文件。我更喜欢#1,但这将是一个较小的步骤,可能会比当前行为更好的默认设置。
我错过了一些明显的东西吗?我是 Rails 资产 + Capistrano 部署的新手,但似乎部署的最佳实践并没有开箱即用。