exception ‘CDbException’ with message ‘The table “pms_goods” for active record class “PmsGoods” cannot be found in the database.’ in /data/work/admin/framework/db/ar/CActiveRecord.php:2385

上线之前,本地测试通过,把测试机代码和Yii framework代码一同下载下载,部署到本地Linux虚拟机中,也正常运行。

而测试服务器就遇到这个错误。
而我坚信 我用的只不过是Yii的 CActiveRecord 而已,代码不会有问题,重写了getDbConnection方法、和 tableName方法:
如下所示:Yii多数据库 使用AR(ActiveRecord) ,
Stackoverflow 上说 把tableName下面的改成双引号,但这并不是问题原因。

public function tableName()
{
return 'pms_goods';
} public function getDbConnection()
{
return Yii::app()->pmsdb;
}
//调用方式,这还能错?
PmsGoods::model()->findAll($criteria);

经过stackoverflow 和 Google一番之后依旧没有找到原因。

花了两天时间艰难的调试,终于找到原因。
过程:
通过vi 直接在测试服务器上改代码,第二天我打算换种SQL调用写法,当我改成:

Yii::app()->pmsdb->CreateCommand($sql)->queryAll();

报错的信息不一样了,

exception ‘CDbException’ with message ‘CDbConnection failed to open the DB connection: SQLSTATE[HY000] [2002] Connection timed out’ in /data/work/admin/framework/db/CDbConnection.php:399

瞬间明白什么问题了,服务器是连不上这个数据库啊!!!!!
SO,在SecureCRT上直接 mysql -h xxx.com -u xxx -p xxx
连接一下看看,果然连不上。

总结:
一条错误信息也许指出的问题跟明确,但也可能是误导,如果有其他方式可以做,虽然这样会证明自己怀疑了当前写法,但也许会有新的发现找到其他的问题。这个例子的关键就是:不是数据库里没有这张表,而是数据库根本就连不上。

Yii这个框架,使用简单,但说实话,出了问题真的很难调试。

ps:测试人员 改配置文件的时候,文件里多了 i (囧),以及,测试机器的php,他的设置没有错误输出,这两点让我昨天耗了一天。


2016.09.27
后面跟运维反应了一下,是因为阿里云数据库迁移,导致DNS的问题。
具体的我不是很懂,重新配置了一下就可以访问了。

总结:自己的代码能跑,到别的地方就不能跑,一定是因为环境的问题。首先要想到的就是数据库,之类的网络是不是不能访问,应用的权限是不是没配置, JS是不是跨域之类的。

一次PHP代码上线遇到的问题的更多相关文章

  1. Jenkins与网站代码上线解决方案

    1.1 前言 Jenkins是一个用Java编写的开源的持续集成工具.在与Oracle发生争执后,项目从Hudson项目独立. Jenkins提供了软件开发的持续集成服务.它运行在Servlet容器中 ...

  2. Jenkins与网站代码上线解决方案【转】

    转自 Jenkins与网站代码上线解决方案 - 惨绿少年 https://www.nmtui.com/clsn/lx524.html 1.1 前言 Jenkins是一个用Java编写的开源的持续集成工 ...

  3. Linux实战教学笔记41:企业级SVN版本管理与大型代码上线方案

    第1章 SVN服务实战应用指南 1.1 SVN介绍 1.1.1 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN ...

  4. 企业SVN版本管理与代码上线方案

    1.SVN服务实战 1) 什么是SVN(Subversion)? Svn(subversion)是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个跨平台的开源的版本控制系统.Sv ...

  5. java项目代码上线

    java项目代码上线   1:java项目代码上线架构图 ip地址及主机名规划 10.0.0.11 deploy 10.0.0.12 tomcat-web01 10.0.0.13 git.oldboy ...

  6. jenkin自动化代码上线

    介绍 Jenkins是一款开源自动化服务器,旨在自动化连续集成和交付软件所涉及的重复技术任务. Jenkins是基于Java的,可以从Ubuntu软件包安装,也可以通过下载和运行其Web应用程序ARc ...

  7. SVN版本管理与大型代码上线方案(一)

    SVN版本管理与大型代码上线方案(一) 链接:https://pan.baidu.com/s/1A3Iq3gGkGS27L_Gt37_I0g 提取码:ncy2 复制这段内容后打开百度网盘手机App,操 ...

  8. shell脚本:备份数据库、代码上线

    备份MySQL数据库场景:一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份 需求:1)每天备份一次,需要备份所有的库2)把备份数据存放到/data/backup/下3 ...

  9. 自动化运维:网站svn代码上线更新(flask+saltstack)

    阶段性总结:      跌跌撞撞的用了一周左右的时间做完了网站自动升级功能,中间遇到了很多的问题,也学到了很多,在此做一个总结.   1.整体架构: 后台:nginx+uwsgi  #nginx提供w ...

随机推荐

  1. 蓝桥杯 algo122 未名湖的烦恼 简单题

    #include <iostream> using namespace std; int m, n, ans; void solve(int m, int n, int cnt) { &a ...

  2. 【呕心总结】python如何与mysql实现交互及常用sql语句

    9 月初,我对 python 爬虫 燃起兴趣,但爬取到的数据多通道实时同步读写用文件并不方便,于是开始用起mysql.这篇笔记,我将整理近一个月的实战中最常用到的 mysql 语句,同时也将涉及到如何 ...

  3. java -PDF添加文本水印与图片水印

    java pdf添加水印文本及图片文本 PDF文件添加文本水印: private static int interval = 30; public static void waterMark(Stri ...

  4. WEB开发中常见的漏洞

    一.SQL注入漏洞 SQL注入攻击(SQL Injection),简称注入攻击.SQL注入,被广泛用于非法获取网站控制权,是发生在应用程序的数据库层上的安全漏洞.在设计程序,忽略了对输入字符串中夹带的 ...

  5. Shell之文本排序命令

    目录 Shell之文本排序命令 参考 wc命令 sort命令 uniq命令 Shell之文本排序命令

  6. Oracle 存储过程判断语句正确写法和时间查询方法

    判断语句:if 条件 then   if  条件  then ************;   elsif  条件  then  ************;   elsif 条件  then ***** ...

  7. 下载git2.2.1并将git添加到环境变量中

    ># wget https://github.com/git/git/archive/v2.2.1.tar.gz > # tar zxvf v2.2.1.tar.gz ># cd g ...

  8. ThinkPHP5 清除runtime缓存文件

    /** * 清除模版缓存 不删除cache目录 */ public function clear_sys_cache() { Cache::clear(); $this->success( '清 ...

  9. 使用FastReport报表工具生成报表PDF文档

    在我们开发某个系统的时候,客户总会提出一些特定的报表需求,固定的报表格式符合他们的业务处理需要,也贴合他们的工作场景,因此我们尽可能做出符合他们实际需要的报表,这样我们的系统会得到更好的认同感.本篇随 ...

  10. LeetCode_933-Number of Recent Calls

    求最近3000毫秒内有多少次调用请求,每一次ping的时间一定比上一次的时间高:解法可以判断最后面一个数t1与最前一个数t2的差不大于3000毫秒,如果大于就直接舍弃,t1与t2之间的个数就是请求次数 ...