如何在铁工任务中使用PHP的MongoDB驱动程序


How to use MongoDB driver of PHP in an iron worker task?

我正在使用 iron.io 及其工作线程任务作为后台进程。我的代码相当简单,就像:

<?php
require 'vendor/autoload.php';
$uri = "my_connection_string";
$client = new MongoClient($uri);
:
:

composer.json就像:

{
    "require": {
        "iron-io/iron_worker": "2.0.4",
        "wp-cli/php-cli-tools": "~0.10.3"
    }
}

然后我首先安装所有依赖项,

docker run --rm -it -v "$PWD":/worker -w /worker iron/php:dev composer install

压缩我的代码,

zip -r worker.zip .

上传它,

iron --env dev worker upload --name task-name -zip ./worker.zip iron/php:dev php ./worker.php

然后输出此错误。

PHP Fatal error:  Class 'MongoClient' not found in /mnt/task/worker.php on line xxx

我也尝试了MongoDB'Driver'ManagerMongoDB'Driver'Client,同样的错误发生了。当我尝试运行php -m时,它显示:

[PHP Modules]
Core
curl
date
ereg
fileinfo
filter
hash
json
libxml
mbstring
mysqlnd
pcre
readline
Reflection
session
SimpleXML
SPL
standard
tokenizer
xmlwriter
[Zend Modules]

看起来甚至MongoDB扩展都没有安装,而他们说它已安装。http://dev.iron.io/worker/languages/php/

我错过了什么吗?如何在 PHP 中使用 MongoDB 驱动程序与 iron worker 一起使用?

对于那些可能和我处于相同情况的人来说,发生这种情况是因为 Iron.io 现在集成了Docker,我们必须指定运行代码时使用的映像,但是iron/php映像不包括它们曾经支持的任何其他中间件。

因此,我们必须编写自己的DockerFile来安装MongoDB或MySQL或我们需要的任何必要的中间件和软件。

至于MongoDB,这是一个Dockerfile的例子。

iron/php:5.6.14
RUN apk update
RUN apk upgrade
RUN apk add alpine-sdk
RUN apk add zlib-dev
RUN apk add curl
RUN apk add bash
RUN apk add perl
RUN apk add re2c
RUN apk add pcre-dev
RUN apk add openssl-dev
RUN apk add php-dev autoconf
RUN git clone https://github.com/mongodb/mongo-php-driver.git
WORKDIR ./mongo-php-driver
RUN which php
RUN git submodule sync && git submodule update --init
RUN phpize
RUN ./configure
RUN make all -j 5
RUN make install
RUN echo 'extension=mongo.so' >> /etc/php.ini

请注意,这根本没有在图像大小方面进行优化。

我认为如果Iron.io提供这样的图像会很有帮助。