2013-09-27 31 views
1

我们正在运行的CakePHP V2.3CakePHP的:如何部署没有错误

我们只是推到生产中遇到了一个奇怪的事件,我们拉的更改后立即引发了以下错误DB模式更改生产我们无法加载任何页面。该专栏(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} 

一些加密之后,我们切换调试模式从0(生产)2(发展)并且这导致缓存被重新创建并且页面正确加载。然后我们将它切换回0,一切都很好。

在此事件发生后

所以,我们有一个问题两个部分:

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

  2. 将CakePHP代码更新与相应的模式更改推送到生产的正确方法是什么?直到最近,我们的大部分模式更改都已添加,因此在提取新代码之前手动将表/字段添加到生产数据库是安全的。但是,通过“中断”删除当前代码使用的表/字段的更改,这不是一个选项。

+0

更新模式后,您应该始终清除缓存或启用调试。 – noslone

回答

0

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

  1. 里面的应用程序的/ tmp /缓存/文件夹是模型。这是表格的缓存模式。这提到了从表格中删除的字段。
  2. 我的正确方法:只要有模式更改,我就清除模型文件夹。如果您担心在需要重新构建高速缓存时放慢服务器速度,则可以仅删除表示该表的一个文件。
+0

谢谢,但我们确实清除了这些缓存,但仍然存在问题。显然,除了杀死一对夫妇档案之外,还有一点更多。例如,调试模式有所不同。 – emersonthis