2016-07-14 115 views
2

我正在將mongodb與Symfony 3.1.2集成在一起。我使用DoctrineMongoDBBundle不能與Symfony 3一起使用mongodb(docker)

一切都好,直到'持久對象到MongoDB'階段。當我添加了幾行:

$dm = $this->get('doctrine_mongodb')->getManager(); 
$dm->persist($product); 
$dm->flush(); 

什麼也沒有發生到我的遠程數據庫,我得到的錯誤信息:

Attempted to load class "MongoId" from the global namespace. Did you forget a "use" statement?

我使用泊塢窗測試Mac上。我的搬運工,compose.yml:

version: '2' 
services: 
    application_ad: 
     image: busybox 
     volumes: 
      - ./:/var/www/html 
      - ./docker/nginx/conf.d/ad.conf:/etc/nginx/conf.d/default.conf 
     entrypoint: "tail -f /dev/null" 
    php_ad: 
     build: ./docker/php-fpm 
     links: 
      - db 
     volumes_from: 
      - application_ad 
    web_ad: 
     build: ./docker/nginx 
     ports: 
      - "8089:80" 
     links: 
      - php_ad 
     volumes_from: 
      - application_ad 
    db: 
     image: mongo:3.2.7 
     volumes: 
     - ./mongo-data:/data/db 
     ports: 
     - "27017:27017" 

的,而PHP-FPM文件:

FROM php:7-fpm 

MAINTAINER Me <[email protected]> 

# nginx and php-fpm user MUST be the same 
RUN usermod -u 1000 www-data 

# set php.ini 
RUN touch /usr/local/etc/php/conf.d/php.ini 
RUN { \ 
     echo "date.timezone = Europe/Paris"; \ 
     echo "short_open_tag = off"; \ 
    } >> /usr/local/etc/php/conf.d/php.ini 

# composer install 
RUN curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer 

# install php extensions dependencies 
RUN apt-get update && apt-get install -my mlocate wget \ 
zlib1g-dev openssl libcurl4-openssl-dev libssl-dev pkg-config libgdbm-dev libjpeg-dev libpng-dev libmcrypt-dev libicu-dev g++ 

# install php extensions 
RUN docker-php-ext-install curl 
RUN docker-php-ext-configure gd --with-jpeg-dir="/usr/lib/x86_64-linux-gnu" 
RUN docker-php-ext-install gd 
RUN docker-php-ext-install json 
RUN docker-php-ext-install mcrypt 
RUN docker-php-ext-install mcrypt 
RUN docker-php-ext-install intl 
RUN docker-php-ext-install opcache 
RUN pecl install apcu && pecl install channel://pecl.php.net/apcu_bc-1.0.3 

# install mongo 
RUN pecl install mongodb 
RUN echo "extension=mongodb.so" > /usr/local/etc/php/conf.d/mongo.ini 

# configure extensions 
RUN { \ 
     echo 'zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20151012/opcache.so'; \ 
     echo 'opcache.memory_consumption=256'; \ 
     echo 'opcache.interned_strings_buffer=16'; \ 
     echo 'opcache.max_accelerated_files=20000'; \ 
     echo 'opcache.revalidate_freq=2'; \ 
     echo 'opcache.fast_shutdown=1'; \ 
     echo 'opcache.enable_cli=1'; \ 
    } > /usr/local/etc/php/conf.d/docker-php-ext-opcache.ini 

RUN { \ 
     echo 'extension=apcu.so'; \ 
     echo 'extension=apc.so'; \ 
     echo 'apc.enabled=1'; \ 
     echo 'apc.shm_size=256M'; \ 
     echo 'apc.ttl=7200'; \ 
     echo 'apc.enable_cli=1'; \ 
     echo 'apc.gc_ttl=3600'; \ 
     echo 'apc.entries_hint=4096'; \ 
     echo 'apc.slam_defense=1'; \ 
     echo 'apc.serializer=php'; \ 
    } > /usr/local/etc/php/conf.d/docker-php-ext-apc.ini 

phpinfo()函數:

enter image description here

也許碼頭工人的問題?或Symfony問題。

回答

2

我使用PHP 7與MongoDB和使用symfony和碼頭。我唯一的問題是我需要安裝的php-extension是mongodb而不是mongo。在我安裝了mongodb擴展之後,一切正常。

,這裏是我的作曲要求:

"require": { 
    "doctrine/mongodb-odm": "^1.1.0", 
    "doctrine/mongodb-odm-bundle": "^3.1.0", 
    "alcaeus/mongo-php-adapter": "^1.0.0", 
    "ext-mongo": "*" 
} 

如果仍不能當作曲家安裝,添加您的作曲家低於這條線需要

"provide": { 
    "ext-mongo": "1.6.13" 
} 

希望它可以幫助

+0

感謝。我用你的版本庫更新了我的composer.json。但我有一些問題。首先,我不得不添加一些依賴:''mongodb/mongodb「:」^ 1.0.0「, 」alcaeus/mongo-php-adapter「:」^ 1.0「, 」ext-mongo「:」*「'。但我仍然有問題:'mongodb/mongodb 1.0.2需要ext-mongodb^1.1.0 - >請求的PHP擴展mongodb從您的系統中丟失。「 Mongodb不安裝在我的Mac中。只有碼頭工人。 –

+0

我已經更新了我的答案。首先你是否在docker之外運行作曲家安裝?實際上,您必須在Docker中運行Composer安裝,因爲所需的依賴項已安裝在docker中。 –