2017-05-01 8 views
1

나는 Heroku에서 앱을 배포하려고하는데 충돌하는 작성자 의존성과 관련된 문제가 있습니다. 내 로컬 dev 컴퓨터에서 잘 작동하고 있습니다. 아무런 문제없이 composer update을 사용할 수 있습니다. 여기 MongoDB ext와 함께 PHP7을 Heroku에 배포하는 방법은 무엇입니까?

composer.json의 샘플입니다

"require": { 
    "php": "7.1.*", 
    "ext-mongo": "*", 
    "ext-mongodb": "^1.2", 
    "symfony/symfony": "3.2.*", 
    "doctrine/orm": "^2.5", 
    "doctrine/doctrine-bundle": "^1.6", 
    "doctrine/doctrine-cache-bundle": "^1.2", 
    "symfony/swiftmailer-bundle": "^2.3.10", 
    "symfony/monolog-bundle": "^3.0.2", 
    "symfony/polyfill-apcu": "^1.0", 
    "sensio/distribution-bundle": "^5.0", 
    "sensio/framework-extra-bundle": "^3.0.2", 
    "incenteev/composer-parameter-handler": "^2.0", 
    "twig/twig": "^1.0||^2.0", 
    "mongodb/mongodb": "^1.1", 
    "doctrine/mongodb-odm-bundle": "^3.2", 
    "alcaeus/mongo-php-adapter": "^1.0", 
    "friendsofsymfony/user-bundle": "2.0.0-beta2", 
    "friendsofsymfony/oauth-server-bundle": "^1.5", 
    "symfony/assetic-bundle": "^2.8", 
    "twig/extensions": "^1.4", 
    "jms/serializer-bundle": "^1.2", 
    "friendsofsymfony/rest-bundle": "^2.1" 
}, 

... 여기에게 Heroku에서 오류 출력 :

> Loading repositories with available runtimes and extensions 
> Updating dependencies 
> Your requirements could not be resolved to an installable set of packages. 
> 
> Problem 1 
>  - Installation request for doctrine/annotations v1.4.0 -> satisfiable by doctrine/annotations[v1.4.0]. 
>  - Installation request for twig/twig v2.3.2 -> satisfiable by twig/twig[v2.3.2]. 
>  - Conclusion: don't install php 7.1.3 
>  - Installation request for doctrine/mongodb 1.4.0 -> satisfiable by doctrine/mongodb[1.4.0]. 
>  - doctrine/annotations v1.4.0 requires php ^5.6 || ^7.0 -> satisfiable by php[5.6.30, 7.0.15, 7.0.16, 7.0.17, 7.1.1, 7.1.2, 7.1.3]. 
>  - don't install php 7.1.1|don't install php 5.5.38 
>  - don't install php 7.1.2|don't install php 5.5.38 
>  - don't install php 7.0.15|don't install php 5.5.38 
>  - don't install php 7.0.16|don't install php 5.5.38 
>  - don't install php 7.0.17|don't install php 5.5.38 
>   - ext-mongo 1.6.14 requires php 5.5.* -> satisfiable by php[5.5.38]. 
>  - doctrine/mongodb 1.4.0 requires ext-mongo ^1.5 -> satisfiable by ext-mongo[1.6.14]. 
>  - ext-mongo 1.6.14 requires php 5.6.* -> satisfiable by php[5.6.30]. 
>  - Conclusion: don't install php 5.6.30 

답변

3

이 더 큰 문제입니다.

1 부 :

내선 - 몽고가 PHP7.x. 존재하지 않는 legacy driver이다의 두 부분으로 나누어 보자 그러나 Doctrine-ODM은 ext-mongo를 필요로합니다. 해결 방법은 새 MongoDB driver을 사용하는 이전 드라이버에 대한 인터페이스를 제공하는 어댑터를 사용하는 것입니다. Doctrine-ODM documentation에 설명이 있지만이 설명은 최신이 아니므로 불완전하거나 부정확합니다. 귀하의 경우에는

, 그것은 당신이 당신의 작곡가 파일의 "require" 섹션에서 "ext-mongo""ext-mongodb"를 제거하고 "alcaeus/mongo-php-adapter" 유지하는 것을 의미한다 (어댑터가 자체 "ext-mongodb"이 필요합니다 -. 새 드라이버를) 불행하게도,이 여전히 작동하지 않습니다

가 현재 작곡가 종속성 충돌을 생성합니다 Packagist에 의해 제공되는 것과 alcaeus/몽고-PHP-어댑터 통합 : 제 2 부

2 부 우리를 제공합니다. exactly this problem에 대한 토론이 있으며 일반적인 작곡가 문제 (see here)일지도 모릅니다. 또한 몇 가지 해결책이 제시됩니다. 나를 위해 One solution 작업 (나는 또한 Heroku가에 배포하고 있습니다) :

alcaeus/몽고-PHP-어댑터의 composer.json에서 교체 :

"provide": { 
    "ext-mongo": "1.6.14" 
}, 

기준 :

"replace": { 
    "ext-mongo": "1.6.14" 
}, 

GitHub에서 master branch of alcaeus/mongo-php-adapter은 "제공"-version을 사용하지만 "replace"-version을 사용하는 composer-replace 분기도 있습니다. 불행히도이 지점은 최신 상태로 유지되지 않습니다.

당신은 당신의 작곡가 파일에 alcaeus/몽고-PHP 어댑터에 대한 저장소로 "대체"지점 것을 사용할 수 있습니다

:로 "제공"대체, 또는

"repositories": [ 
     { 
      "type": "vcs", 
      "url": "https://github.com/alcaeus/mongo-php-adapter" 
     } 
    ], 
"require": { 
    "alcaeus/mongo-php-adapter": "dev-composer-replace", 
    ... 

, 당신은 마스터 분기를 포크 할 수 "replace"하고 포크를 저장소로 사용하십시오.