【发布时间】:2011-12-26 12:01:06
【问题描述】:
我需要更新生产服务器中的源文件(从存储库中提取和更新)、运行迁移并重新生成缓存资产。
Symfony 2 中是否有任何机制可以安全地执行此操作?比如将网站置于“维护模式”(应该抛出 503)之类的?
【问题讨论】:
标签: php symfony http-status-code-503
我需要更新生产服务器中的源文件(从存储库中提取和更新)、运行迁移并重新生成缓存资产。
Symfony 2 中是否有任何机制可以安全地执行此操作?比如将网站置于“维护模式”(应该抛出 503)之类的?
【问题讨论】:
标签: php symfony http-status-code-503
我可以推荐使用部署器 (http://deployer.org/) 来部署您的 Symfony2 应用程序。这样您就不需要维护页面。该工具附带一个 symfony2 和 symfony3 模板已经包含在内。 它会生成您的资产、预热缓存并跟踪您的发布目录。回滚到以前的版本也很容易。 有一个“当前”符号链接,它始终指向您当前的发布目录。如果发布部署完成,此链接将更新到新创建的发布目录。
关于原则迁移,您需要为此编写自定义任务。
【讨论】:
我刚刚为 Symfony 2 找到了一个 Bundle,它在控制台中为您提供了 2 个额外的命令,可以让您的应用程序进入维护模式。 给你:https://github.com/lexik/LexikMaintenanceBundle
【讨论】:
对于用户可能正在进行某种交易(例如购物)的较大网站,不确定如何处理此问题,但对于较小的网站,您是否可以不只使用 .htaccess 文件(在Web 目录(假设它是您的根目录)重定向到某个维护页面而不是 app.php。
【讨论】:
请看capifonyhttp://capifony.org/
它对 Symfony2 有很好的支持。
【讨论】:
我一直在尝试决定如何实现这一点。一方面,Symfony2 提供了不错的 prod 缓存,所以如果你没有破坏性地修改你的数据库模式(删除列或表等),你可能只需要更改模式,从你的 repo 部署,然后清除你的 prod缓存。这就是我大部分时间处理事情的方式。
另一方面,如果您确实想进入维护模式,您将需要一个对框架负载最小的解决方案(即,您可能不想启动内核),或者您无论如何都违背了目的:在你搞砸的时候减轻框架的负担。
如果是我,我可能会编写一个简单的维护脚本,只设置一个 503 标头,可能会提供一些静态 html(从我的站点模板预先生成)并将其发送回用户,然后使用一些条件逻辑在我的app.php 中,当我应该处于维护模式时使用它。这很难看,但它有效。
【讨论】: