2017-05-01 5 views
1

私はHerokuでアプリケーションをデプロイしようとしていますが、私はコンポーザーの依存関係に矛盾する問題に取り組んでいます。私のローカル開発マシンからうまく動いていますが、私はcomposer updateでも問題はありません。MongoDB extをHerokuにインストールするには?

"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のからのエラー出力である:ここで

は私composer.jsonのサンプルです

> 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

これは大きな問題です。 2つの部分に分割してみましょう:

パート1:

EXT-モンゴが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", 
    ... 

を、あなたはで「提供」置き換え、masterブランチをforkでき"replace"し、そのフォークをリポジトリとして使用します。

関連する問題