Я использую 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\Manager
, MongoDB\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/
Я что-то пропустил? Как я могу использовать драйвер MongoDB в PHP с железным рабочим?
Для тех, кто может оказаться в той же ситуации, что и я, это происходит потому, что 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 предоставит такие изображения.
Других решений пока нет …