• 一次PHP代码上线遇到的问题


    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项目目录显示
    初识fastadmin
    php环境变量
    tp5数据库——时间查询
    tp5数据库——聚合查询
    tp5数据库——链式操作
    tp5数据库——查询语法
    MongoDB踩坑记录
    RxJS合并操作符:concat、merge、forkJoin、zip、 combineLatest 、concatAll、mergeAll、switchAll
    Git Flow
  • 原文地址:https://www.cnblogs.com/slankka/p/9158522.html
Copyright © 2020-2023  润新知