如何在Heroku上使用MongoDB ext部署PHP7?

如何在Heroku上使用MongoDB ext部署PHP7?,mongodb,heroku,composer-php,php-7,doctrine-odm,Mongodb,Heroku,Composer Php,Php 7,Doctrine Odm,我试图在Heroku上部署一个应用程序,但遇到了与编写器依赖项冲突相关的问题。它在我本地的开发机器上运行良好,我可以composer更新,没有任何问题 下面是我的composer.json的一个示例: "require": { "php": "7.1.*", "ext-mongo": "*", "ext-mongodb": "^1.2", "symfony/symfony": "3.2.*", "doctrine/orm": "^2.5", "do

我试图在Heroku上部署一个应用程序,但遇到了与编写器依赖项冲突相关的问题。它在我本地的开发机器上运行良好,我可以
composer更新
,没有任何问题

下面是我的
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

这是一个更大的问题。让我们将其分为两部分:

第1部分:

Ext mongo是PHP7.x中不存在的。但ODM原则需要ext mongo。解决方法是使用适配器,为使用新驱动程序的旧驱动程序提供接口。中有一个解释,但此解释不是最新的,因此不完整/不正确

在您的情况下,这意味着您从composer文件的
“require”
部分删除
“ext mongo”
“ext mongodb”
,并保留
“alcaeus/mongo php适配器”
(适配器本身需要
“ext mongodb”
——新的驱动程序),这仍然不起作用,让我们进入第2部分

第二部分:

集成当前由Packagegist提供的alcaeus/mongo php适配器将创建一个composer依赖冲突。关于这是否是作曲家的一个普遍问题,也有一些讨论()。此外,还提出了几种解决方案。适合我(我也在Heroku上部署):

在alcaeus/mongo php适配器的composer.json中,替换:

作者:

在GitHub上,使用“提供”版本,但也有一个分支使用“替换”版本。不幸的是,此分支没有保持最新

您可以将该“替换”分支用作composer文件中alcaeus/mongo php适配器的存储库:

"repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/alcaeus/mongo-php-adapter"
        }
    ],
"require": {
    "alcaeus/mongo-php-adapter": "dev-composer-replace",
    ...
或者,您可以分叉主分支,将“provide”替换为“replace”,并将该分叉用作存储库

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