如何在 Symfony 2 中进入维护模式以安全地更新生产应用程序?

Posted

技术标签:

【中文标题】如何在 Symfony 2 中进入维护模式以安全地更新生产应用程序?【英文标题】:How to go into maintainance mode to safely update a production application, in Symfony 2? 【发布时间】:2011-12-26 12:01:06 【问题描述】:

我需要更新生产服务器中的源文件(从存储库中提取和更新)、运行迁移并重新生成缓存资产。

Symfony 2 中是否有任何机制可以安全地执行此操作?比如将网站置于“维护模式”(应该抛出 503)之类的?

【问题讨论】:

【参考方案1】:

我可以推荐使用部署器 (http://deployer.org/) 来部署您的 Symfony2 应用程序。这样您就不需要维护页面。该工具附带一个 symfony2 和 symfony3 模板已经包含在内。 它会生成您的资产、预热缓存并跟踪您的发布目录。回滚到以前的版本也很容易。 有一个“当前”符号链接,它始终指向您当前的发布目录。如果发布部署完成,此链接将更新到新创建的发布目录。

关于原则迁移,您需要为此编写自定义任务。

【讨论】:

【参考方案2】:

我刚刚为 Symfony 2 找到了一个 Bundle,它在控制台中为您提供了 2 个额外的命令,可以让您的应用程序进入维护模式。 给你:https://github.com/lexik/LexikMaintenanceBundle

【讨论】:

LexikMaintenanceBundle 虽然很好,但需要 Symfony 才能工作。我认为 CorleyMaintenanceBundle 更好,因为它适用于 Apache/nginx 级别。【参考方案3】:

对于用户可能正在进行某种交易(例如购物)的较大网站,不确定如何处理此问题,但对于较小的网站,您是否可以不只使用 .htaccess 文件(在Web 目录(假设它是您的根目录)重定向到某个维护页面而不是 app.php

【讨论】:

【参考方案4】:

请看capifonyhttp://capifony.org/

它对 Symfony2 有很好的支持。

【讨论】:

【参考方案5】:

我一直在尝试决定如何实现这一点。一方面,Symfony2 提供了不错的 prod 缓存,所以如果你没有破坏性地修改你的数据库模式(删除列或表等),你可能只需要更改模式,从你的 repo 部署,然后清除你的 prod缓存。这就是我大部分时间处理事情的方式。

另一方面,如果您确实想进入维护模式,您将需要一个对框架负载最小的解决方案(即,您可能不想启动内核),或者您无论如何都违背了目的:在你搞砸的时候减轻框架的负担。

如果是我,我可能会编写一个简单的维护脚本,只设置一个 503 标头,可能会提供一些静态 html(从我的站点模板预先生成)并将其发送回用户,然后使用一些条件逻辑在我的app.php 中,当我应该处于维护模式时使用它。这很难看,但它有效。

【讨论】:

真的有那么大吗?您不能只根据配置选项添加通配符路由吗? 唯一的问题是它需要加载框架。如果您的更改不会在您更新时破坏事情,那真的是要走的路。否则,手动脚本可能是最好的选择。 我将 app.php 文件替换为我创建的 maintenance.php 文件。一旦部署完成,app.php 就会被放回去。

以上是关于如何在 Symfony 2 中进入维护模式以安全地更新生产应用程序?的主要内容,如果未能解决你的问题,请参考以下文章

如何跳过更新帐户名和密码以在 zencart 1.5.1 中进入管理页面

javascript 在 Javascript 中进入无限循环和递归调用时如何调试它?

reactnative关掉小米暗黑模式

在flutter中进入暗模式时更改系统导航和状态栏的颜色

如何在 symfony 5 中加入两个表?

使用 Symfony 将用户数据安全地存储在数据库中