mysql - CakePHP:如何将数据库架构更改无错误地部署到生产中

标签 mysql cakephp deployment cakephp-2.0

我们正在运行 CakePHP v2.3

我们刚刚在推送到生产过程中遇到了一个奇怪的事件,我们在拉取更改后立即抛出了以下错误,我们无法加载任何页面。我们刚刚删除了列 (User.group_id)。然后,我们删除了缓存(持久缓存和模型缓存),认为可以防止由于更改的架构而导致的错误。相反,缓存没有重新创建,它生成了以下错误,我们无法加载任何页面...

2013-09-27 07:53:05 Error: [PDOException] SQLSTATE[42S22]: Column not found: 1054 Unknown column 'User.group_id' in 'field list'
Request URL: /admin
Stack Trace:
#0 /home/username/public_html/lib/Cake/Model/Datasource/DboSource.php(459): PDOStatement->execute(Array)
#1 /home/username/public_html/lib/Cake/Model/Datasource/DboSource.php(425): DboSource->_execute('SELECT `User`.`...', Array)
#2 /home/username/public_html/lib/Cake/Model/Datasource/DboSource.php(669): DboSource->execute('SELECT `User`.`...', Array, Array)
#3 /home/username/public_html/lib/Cake/Model/Datasource/DboSource.php(1080): DboSource->fetchAll('SELECT `User`.`...', false)
#4 /home/username/public_html/lib/Cake/Model/Model.php(2674): DboSource->read(Object(User), Array)
#5 /home/username/public_html/lib/Cake/Model/Datasource/DboSource.php(598): Model->find('first', Array)
#6 /home/username/public_html/lib/Cake/Model/Model.php(799): DboSource->query('findById', Array, Object(User))
#7 /home/username/public_html/app/Controller/AppController.php(95): Model->__call('findById', Array)
#8 /home/username/public_html/app/Controller/AppController.php(95): User->findById('12')
#9 /home/username/public_html/lib/Cake/Controller/Component/Auth/ControllerAuthorize.php(64): AppController->isAuthorized('12')
#10 /home/username/public_html/lib/Cake/Controller/Component/AuthComponent.php(409): ControllerAuthorize->authorize('12', Object(CakeRequest))
#11 /home/username/public_html/lib/Cake/Controller/Component/AuthComponent.php(335): AuthComponent->isAuthorized('12')
#12 [internal function]: AuthComponent->startup(Object(PagesController))
#13 /home/username/public_html/lib/Cake/Utility/ObjectCollection.php(131): call_user_func_array(Array, Array)
#14 [internal function]: ObjectCollection->trigger(Object(CakeEvent))
#15 /home/username/public_html/lib/Cake/Event/CakeEventManager.php(247): call_user_func(Array, Object(CakeEvent))
#16 /home/username/public_html/lib/Cake/Controller/Controller.php(670): CakeEventManager->dispatch(Object(CakeEvent))
#17 /home/username/public_html/lib/Cake/Routing/Dispatcher.php(183): Controller->startupProcess()
#18 /home/username/public_html/lib/Cake/Routing/Dispatcher.php(161): Dispatcher->_invoke(Object(PagesController), Object(CakeRequest), Object(CakeResponse))
#19 /home/username/public_html/app/webroot/index.php(97): Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#20 {main}

经过一些困惑之后,我们将 Debug模式从 0(生产)切换到 2(开发),这导致重新创建缓存并正确加载页面。然后,我们将其切换回 0,一切正常。

所以在这次事件之后,我们有一个分为两部分的问题:

  1. 为什么会这样?我们在本地开发服务器上测试了这个过程,尽管我们可能一直处于 Debug模式 2。

  2. 将具有相应架构更改的 CakePHP 代码更新推送到生产环境的正确方法是什么?直到最近,我们的大部分架构更改都是添加内容,因此在提取新代码之前手动将表/字段添加到生产数据库是安全的。但是对于删除当前代码使用的表/字段的“破坏性”更改,这不是一个选项。

最佳答案

{从这里开始:https://stackoverflow.com/questions/3402246/cache-file-model-cakephp/

  1. 在 app/tmp/cache/文件夹中是模型。这是表的缓存模式。这引用了从您的表格中删除的字段。
  2. 我的正确方式:每当我有架构更改时,我都会清除模型文件夹。如果您担心在需要重建缓存时会降低服务器速度,您可以只删除代表该表的一个文件。

关于mysql - CakePHP:如何将数据库架构更改无错误地部署到生产中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050764/

相关文章:

mysql - 更新同一表中的重复条目

mysql - MySQL一次更新多条记录的方法

cakephp - 在 cakePhp 中创建多个固定装置

php - BelongsTo 在 cakephp 和 html select 中的问题,我不明白该怎么做

java - 无法在 32 位操作系统上运行在 NetBeans(64 位 Windows 10 上)中创建的 .exe

Tomcat/Liferay 热部署无法运行

mysql - 打印记录替代方式

mysql - 使用 JOIN 查询速度慢

mysql - 使用 counterCache 保存多行

maven - 如何将 Maven Web 应用程序部署到本地安装的 Glassfish?