2016-02-19 61 views
0

我使用iron.io及其工作任務進行後臺進程。 我的代碼是相當簡單的,就像:如何在Iron Worker任務中使用PHP的MongoDB驅動程序?

<?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驅動程序?

+0

具有相同的問題 - 即使添加文檔中指定的require_once(mongo)「'''。 –

+1

我已經通過編寫我們自己的用PHP激活MongoDB的Docker鏡像解決了這個問題。 –

回答

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'd提供這樣的圖像。

相關問題