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/

何か不足していますか?Iron Worker を使用して PHP で MongoDB ドライバーを使用するにはどうすればよいですか?

4

1 に答える 1

3

私と同じ状況にある可能性がある人のために説明すると、Iron.io は現在 Docker を統合しており、コードを実行するときに使用するイメージを指定する必要がありますが、iron/php イメージには、使用した追加のミドルウェアが含まれていません。サポートする。

そのため、MongoDB や MySQL、または必要なミドルウェアやソフトウェアをインストールするために、独自の DockerFile を作成する必要があります。

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 に答える