ThinkPHP怪现象:数据表新增字段后开发模式可更新运行模式无法更新

来源:互联网 发布:itunes发生网络错误 编辑:程序博客网 时间:2024/06/05 20:12

一、情况说明

一个已经发布的程序中,数据库原有表article,字段原有id、content、title三个字段,原程序可以正常运行,通过大D方法可以正常的更新数据库。

现在要对这个程序进行更新,数据库表article现在增加字段media,在开发阶段(Debug=true)时程序可以正常运行后,将开发模式关闭(Debug=false),然后运行程序,发现media字段无法更新,想想可能是缓存的问题,于是将Runtime目录给删除掉,再次运行,OK!media字段可以更新了,于是将程序打包通过FTP发布到服务器后解压。

结果程序又无法更新了,想想也许是缓存的问题,好吧,将Runtime目录删除掉,再试,还是不行。好吧,在入口文件index.php中将DEBUG又重新设置为true,并覆盖到服务器上,测试,工作正常。

到底发生了什么问题呢?

二、发觉问题

将服务器上的入口文件中的DEBUG还是设置为FALSE,然后将页面信息PAGE_TRACE设置为TRUE,再次测试,发现并没有运行时的错误。

于是,我只好将数据库对象通过dump()方法打印出来,同时将更新到数据库中的数据集也通过dump()方法打印出来。这时候发现数据集中又media字段的信息,而数据库对象中的字段却没有media字段的信息。

我再次将DEBUG设置为TRUE打开开发模式,再次dump()数据库操作对象,这时数据库操作对象中居然有了media字段。于是乎只好确认是缓存问题了。

遂通过FTP软件将Runtime目录再次删除掉,这时候才注意到了一个奇怪的现象,Runtime目录删除不了,其中Rumtime目录下还存在着Data/_fields目录,多次删除都无法删除,只有一点可以说明,这个文件夹下还有文件。

也就是说,缓存没有清理干净!

三、解决问题

这里先说明一下,我服务器系统是Linux的,我自己电脑是Mac的,用的FTP软件是FileZilla。

既然文件没有清理干净又看不到,那只有可能是隐藏起来的了,于是乎在FileZilla的菜单中的Server菜单下找到了Force Showing hidden files,这样就可以显示所有隐藏文件了。

FileZilla强制显示隐藏文件

FileZilla强制显示隐藏文件

这下再看Runtime\Data\_fields\目录下就看到了这样几个隐藏文件:

 

FTP中的隐藏文件显示

FTP中的隐藏文件显示

奶奶的,原来所有数据表的结构信息都已经被缓存起来了的,而且这个缓存文件是在数据表被创建时创建的,而后来更新表字段后,这个数据表结构的缓存文件并没有被更新。

这下算是解决了,删除掉这几个表,将DEBUG设置为FALSE后,重新打开这个网站,OK,这几个文件又重新被建立了,而这时建立的是根据新表来建立的,这样,问题就得到了解决!

原文地址:http://www.xcoder.cn/index.php/archives/1100
0 0
原创粉丝点击