0

我正在将 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 一起使用?

4

1 回答 1

3

对于那些可能和我有同样情况的人来说,这是因为 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 提供这样的图像会很有帮助。

于 2016-07-15T22:05:28.590 回答