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

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

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

【问题讨论】:

    标签: php symfony http-status-code-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 就会被放回去。
          猜你喜欢
          • 2012-03-04
          • 1970-01-01
          • 1970-01-01
          • 2015-05-03
          • 2019-08-13
          • 2014-10-11
          • 1970-01-01
          • 2015-07-29
          • 1970-01-01
          相关资源
          最近更新 更多