簡體   English   中英

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

[英]How to deploy PHP7 with MongoDB ext on Heroku?

我正在嘗試在Heroku上部署應用程序,並且我遇到了與沖突的作曲家依賴關系相關的問題。 它從我的本地開發機器工作正常,我可以沒有任何問題的composer update

這是我的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不存在的舊驅動程序 但是Doctrine-ODM需要ext-mongo。 解決方法是使用適配器為使用新MongoDB驅動程序的舊驅動程序提供接口。 Doctrine-ODM文檔中有一個解釋,但這種解釋不是最新的,因此不完整/不正確。

在你的情況下,這意味着你從你的作曲家文件的"require"部分刪除"ext-mongo""ext-mongodb"並保留"alcaeus/mongo-php-adapter" (適配器將需要自己"ext-mongodb" - 新的驅動程序。)不幸的是,這仍然無法工作,並將我們帶到第2部分。

第2部分:

集成alageus / mongo-php-adapter,因為它目前由Packagist提供,將創建一個作曲家依賴沖突。 有一些關於這個問題的討論,如果這可能是一般的作曲家問題( 見這里 )。 此外,還提出了幾種解決方案。 一個解決方案適合我(我也在Heroku上部署):

alcaeus / mongo-php-adapter的composer.json中替換:

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

通過:

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

在GitHub上, alcaeus / mongo-php-adapter主分支使用“提供”-version,但是還有一個使用“替換”-version的composer-replace分支。 不幸的是,這個分支並沒有保持最新狀態。

您可以在作曲家文件中將“替換”分支用作alcaeus / mongo-php-adapter的存儲庫:

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

或者,您可以fork master分支,將“provide”替換為“replace”並將該fork用作存儲庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM