找不到从MongoDB 2.4升级到2.6的类

时间:2018-08-07 01:05:46

标签: mongodb zend-framework redhat php-5.6

我有一个项目,用于更新基于Zend Framework 1.12和MongoDB 2.4构建的非常老的应用程序。最近,PHP已升级到5.6,现在已升级 要求MongoDB 2.6。服务器也很旧(Redhat 6.9) 我没有准备升级到更高版本的服务器操作系统。 MongoDB在单独的服务器上(与应用程序文件不在同一盒中)。

这是我到目前为止所做的:

  • 建立了一个基于GUI的虚拟机(Windows 10主机,Centos 7 Guest,PHP 5.6和mongo都在同一台上)。 除MongoDB PHP驱动程序外,大多数情况下安装MongoDB都很顺利。 应用程序代码抛出“找不到类Mongo”错误,因为旧版代码库是通过class LiveKHProvider extends InheritedWidget { final LiveKHBloc liveKHBloc = LiveKHBloc(); @override bool updateShouldNotify(InheritedWidget oldWidget) => oldWidget != this; static LiveKHBloc of(BuildContext context) { var inheritFromWidgetOfExactType = context.inheritFromWidgetOfExactType(LiveKHProvider); // to clearly see what’s returning null. //This is where it returns null, //so the below line is executed on a null object. return (inheritFromWidgetOfExactType as LiveKHProvider).liveKHBloc; } LiveKHProvider({Key key, Widget child}) : super(key: key, child: child); } 实例化的,即使尝试new Mongo($connStr)也行不通(给出未找到相同类的错误)。 mongodb.so文件放置在正确的位置,并通过/etc/php.ini文件正确提及 关于extension_dir和extension = mongodb.so。 使用phpinfo(),我验证了扩展名new MongoClient()是否正确加载,但是也许 错误的PHP驱动程序被编译。 我无法获得高于1.12的已安装驱动程序版本,可能是由于 编译驱动程序的各种尝试。

  • 试图重复使用复制了相同应用程序结构的Vagrant&Virtualbox VM,但遗憾的是我的OS(Solus)不再启动该VM,它拒绝像几个月前那样装载文件夹。所以这也是一个死胡同。我回来了 Windows作为宿主GUI VM进入Windows ...继续尝试建议的其他方法,但并没有进一步发展。

我对此进行了大量研究,但可以使用一些社区指导。 也许最好的方法是从VM中完全清除MongoDB,然后重试?由于它是低于7的PHP,也许我安装了错误的东西。 php-driver for mogodb wont't compile

此链接MongoDB 2.6 Update Error讨论了删除操作。

所需结果是带有Zend Framework 1.12和MongoDB 2.6.latest的PHP 5.6.33

希望,应用程序中的重新编码量将很小,但此时  我没有一个独立的PHP脚本(在Zend应用程序之外)可以连接到测试数据库/集合上的MongoDB。

我预算了足够的时间来修复代码,但是现在我正在转动轮子。

任何帮助/建议表示赞赏。提前致谢。

1 个答案:

答案 0 :(得分:0)

  • 我意识到自己做错了。我(失败)编译了Github的驱动程序版本,该版本旨在用于PHP7(不是 5.6),结果安装了mongodb.so-因此必须将其清除。
  • 清除mongodb之后,我重新安装了mongo服务器,但是对于PHP Driver,我决定使用Pecl。
  • 在编译驱动程序时,由于缺少SSL库而发生了错误。你会 想要检查您是否具有下面的库(您可能已经有 他们),如果没有,那么

sudo yum install libcurl4-openssl-dev sudo yum install openssl-dev sudo yum install libssl-dev sudo yum install libsslcommon2-dev sudo yum install pkg-config   然后...一旦完成

sudo pecl install mongo

  • 编译完成后(没有错误),我注意到它已经创建了驱动程序mongo.so并将其放置在目录/usr/lib64/php/modules中。
  • 根据建议,请确保已将extension=mongo.so添加到/etc/php.ini
  • 重新启动Apache Server,并检查phpinfo();中的mongo支持和版本号
  • 在命令行上,您可以执行以下操作进行验证。 php --ri mongo查看安装了哪个mongo php驱动程序。它可能会打印...

mongo Mongo Support => enabled Version => 1.6.16 SSL Support => enabled

要查看已安装的mongodb版本,请输入mongod --version,它可能会打印...

db version v2.6.12

  • 如果您没有重新安装mongodb服务器(mongod),请安装并运行它(或者,如果要使用mongo连接到外部服务器,请尝试使用独立的测试脚本或应用程序连接到Mongo li>