代码分支

代码分支

在项目中有许多方法来组织代码变更的工作流。但是直接在Git主分支上工作并直接部署到生产环境中而不进行测试可能不是最好的方法。

测试不仅仅是单元或功能测试,还包括使用生产数据检查应用程序行为。如果你或你的利益相关者可以在将应用程序部署给最终用户时完全浏览应用程序,这成为一个巨大的优势,使您可以放心地进行部署。当非技术人员可以验证新功能时,它尤其强大。

为了简单起见,我们将在接下来的步骤中继续在Git主分支中完成所有工作,并避免重复,但是让我们看看如何更好地工作。

采用Git工作流

一种可能的工作流程是为每个新特性或错误修复创建一个分支。它简单高效。

创建分支

工作流从创建Git分支开始:

1
git分支-D session -in-db ||真正的
1
Git checkout -b sessions-in-db

该命令创建一个sessions-in-db分支来自分支。它“分叉”了代码和基础结构配置。

在数据库中存储会话

正如您可能已经从分支名称中猜到的那样,我们希望将会话存储从文件系统切换到数据库存储(这里是我们的PostgreSQL数据库)。

实现这一目标所需的步骤如下:

  1. 创建一个Git分支;
  2. 如果需要,更新Symfob娱乐下载ony配置;
  3. 如果需要,编写和/或更新一些代码;
  4. 如果需要更新PHP配置(比如添加PostgreSQL PHP扩展);
  5. 如果需要,更新Docker和Platform.sh上的基础设施(添加PostgreSQL服务);
  6. 在本地测试;
  7. 远程测试;
  8. 将分支合并为master;
  9. 部署到生产环境;
  10. 删除分支。

要在数据库中存储会话,请更改session.handler_id配置指向数据库DSN:

1 2 3 4 5 6 7 8 9 10 11
——/ config /包/ framework.yaml+ + + b / config /包/ framework.yaml@@ -8,7 +8,7 @@ framework: #启用会话支持。请注意,只有在对会话进行读写时才会启动会话。#删除或注释此部分以显式禁用会话支持。会话:—handler_id: null+ handler_id: '%env(resolve:DATABASE_URL)%'Cookie_secure: auto cookie_sameite: lax storage_factory_id: session.storage.factory.native

要在数据库中存储会话,需要创建会话表格通过教义迁移做到这一点:

1
ob娱乐下载Symfony控制台make:迁移

文件中添加表创建()方法:

12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
——/迁移/ Version00000000000000.php+ + + b /迁移/ Version00000000000000.php@@ -21,6 +21,15最终类Version00000000000000 extends AbstractMigration{//这个up()迁移是自动生成的,请根据您的需要修改它+ $ this - > addSql ('+创建表会话(+ sess_id VARCHAR(128) NOT NULL主键,+ sess_data BYTEA NOT NULL,+ sess_lifetime INTEGER NOT NULL,+ sess_time INTEGER NOT NULL+)+ ');+ $this->addSql('CREATE INDEX expiry ON sessions (sess_lifetime)');}公共函数关闭(Schema $ Schema):无效

迁移数据库:

1
ob娱乐下载Symfony控制台原则:迁移:迁移

通过浏览网站进行本地测试。由于没有视觉上的变化,而且我们还没有使用会话,所以一切都应该像以前一样工作。

请注意

在这里我们不需要步骤3到5,因为我们重用数据库作为会话存储,但是关于使用Redis的章节展示了在Docker和Platform.sh中添加、测试和部署新服务是多么简单。

由于新表不是由Doctrine“管理”的,我们必须配置Doctrine在下一次数据库迁移中不删除它:

1 2 3 4 5 6 7 8 9 10 11
——/ config /包/ doctrine.yaml+ + + b / config /包/ doctrine.yaml@@ -5,6 +5,8 @@ doctrine: #重要的是:您必须配置您的服务器版本,#在这里或在DATABASE_URL env var(参阅。env文件)#server_version: '14'++ schema_filter: ~^(?!session)~Orm: auto_generate_proxy_classes: true naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware

将您的更改提交到新分支:

1 2
Git添加。Git提交-m“配置数据库会话”

部署分支

在部署到生产环境之前,我们应该在与生产环境相同的基础设施上测试分支。我们还应该验证Symfony的一切工作正常ob娱乐下载刺激环境(当地网站使用Symfonyob娱乐下载dev环境)。

现在,让我们创建一个Platform.sh环境基于Git分支

1
ob娱乐下载Syob直播appmfony cloud:env:delete session -in-db
1
ob娱乐下载syob直播appmfony云:部署

该命令创建一个新环境,如下所示:

  • 分支从当前Git分支继承代码和基础结构(sessions-in-db);
  • 数据来自主(又名生产)环境,通过对所有服务数据进行一致的快照,包括文件(例如用户上传的文件)和数据库;
  • 创建一个新的专用集群来部署代码、数据和基础设施。

由于部署遵循与部署到生产环境相同的步骤,因此也将执行数据库迁移。这是验证迁移是否适用于生产数据的好方法。

非-环境非常相似除了一些小的不同:例如,默认情况下不发送电子邮件。

一旦部署完成,在浏览器中打开新的分支:

1
ob娱乐下载Syob直播appmfony cloud:url -1

注意,所有Platform.sh命令都在当前Git分支上工作。的已部署URLsessions-in-db分支;URL看起来是这样的https://sessions-in-db-xxx.eu-5.platformsh.site/

在这个新环境中测试网站,您应该可以看到在主环境中创建的所有数据。

如果你增加更多的会议环境,他们不会出现在sessions-in-db环境,反之亦然。环境是独立和隔离的。

如果代码在master上发展,您总是可以重新构建Git分支并部署更新的版本,从而解决代码和基础设施的冲突。

您甚至可以将数据从主服务器同步回sessions-in-db环境:

1
ob娱乐下载syob直播appmfony云:env:同步

在部署前调试生产部署

默认情况下,所有Platform.sh环境使用与/刺激环境(又名Symfonyob娱乐下载刺激环境)。这允许您在实际条件下测试应用程序。它给您一种直接在生产服务器上开发和测试的感觉,但没有与之相关的风险。这让我想起了我们通过FTP进行部署的美好时光。

如果出现问题,您可能希望切换到devob娱乐下载Symfony环境:

1
ob娱乐下载syob直播appmfony云:env:调试

完成后,回到生产设置:

1
ob娱乐下载Syob直播appmfony cloud:env:debug—off

警告

从来没有启用dev环境,并且绝不启用Symfony Profilerob娱乐下载分支;这将使您的应用程序非常缓慢,并打开许多严重的安全漏洞。

在部署前测试生产部署

访问即将发布的带有生产数据的网站版本会带来很多机会:从可视化回归测试到性能测试。黑焰是完美的工具。

参考关于步骤性能了解更多关于如何在部署之前使用Blackfire测试代码的信息。

合并到生产环境

当你对分支的变化感到满意时,将代码和基础架构合并回Git主分支:

1 2
Git checkout masterGit合并session -in-db

和部署:

1
ob娱乐下载syob直播appmfony云:部署

在部署时,只有代码和基础设施更改被推送到Platform.sh;数据不会受到任何影响。

清理

最后,通过删除Git分支和平台.sh环境来清理:

1 2
Git分支-d session -in-dbob娱乐下载Syob直播appmfony cloud:env:delete -e sessions-in-db
此工作,包括代码示例,是根据知识共享协议BY-NC-SA 4.0许可证。