简短的故事:我可以composer update在运行的站点上运行而不必担心首先更新哪些依赖项吗?
更长的故事:我试图弄清楚使用composer的实际更新过程是否是原子的.
是否一次更新/激活依赖项,一切都下载并检查好,或者每次下载后都会更新依赖项?如果一次更新在中间失败怎么办?
无法找到文档,所以我希望有人可以帮忙!如果记录在案,我会很满意那里的链接.
不,composer update并且composer install不是原子的。
对于每个依赖项composer update将:
如果下载因任何原因(例如配额限制、连接失败等)失败,则应用程序将处于无法运行的状态。
一种解决方案是将供应商文件夹和作曲家文件复制到新目录中,运行composer update或composer install在此目录中,然后将旧供应商目录切换为新目录。
即使这个解决方案要快得多,它也不是原子的,可以/将导致请求失败。确实: - 切换两个目录不能是原子的 - 由于 PHP 应用程序分布在多个文件中,请求可以从旧版本的文件开始,然后包含新版本,这可能会导致未定义的行为。
但是,这对于大多数 Web 应用程序来说是可以接受的。
唯一的解决方案是复制完整的应用程序,更新它,然后更改您的 Web 服务器配置以使用更新的应用程序。Web 服务器可以以原子方式重新加载其配置。
这个解决方案并不完全是原子的,因为一些用户将使用旧版本完成他们的请求,而其他一些用户将使用新版本开始一个新请求。在短时间内,应用程序的两个版本将共存。
第三种解决方案是使用第一种解决方案并告诉您的 Web 服务器在短暂停机期间堆叠请求。
这意味着: - 告诉您的 Web 服务器堆叠连接 - 等待现有请求完成(< 200 毫秒) - 切换应用程序目录(< 10 毫秒) - 实现堆叠连接
停机期间的请求将延迟约 200 毫秒,这在大多数情况下是可以接受的。
您可以在此处找到有关堆叠请求的更多信息:https : //serverfault.com/questions/654780/how-to-suspend-nginx-requests-during-backend-upgrades
| 归档时间: |
|
| 查看次数: |
405 次 |
| 最近记录: |