Heroku拒绝推送,因为它无法清除缓存Symfony3

时间:2017-01-06 22:00:59

标签: php git heroku symfony

整天将我的应用程序部署到heroku,但每次都会抛出错误。我全都没有线索,并且有一个非常愤怒的客户。

当我尝试使用命令git push heroku master将项目添加到heroku时,每个事情都很好,直到需要清除缓存。

Updating the "app/config/parameters.yml" file
remote:        > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::buildBootstrap
remote:        > Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache
remote:        Could not open input file: app/console
remote:        Script Sensio\Bundle\DistributionBundle\Composer\ScriptHandler::clearCache handling the symfony-scripts event terminated with an exception
remote:
remote:
remote:          [RuntimeException]
remote:          An error occurred when executing the "'cache:clear --no-warmup'" command:
remote:          Could not open input file: app/console
remote:          .

您会认为,它与此git issue

相同

也是一个已知的问题,我正在使用错误的映射类型。

enter image description here

但我认为没关系。

我更新了我的作曲家并清除了作曲家的缓存

当我用p hp bin/console cache:clear清除缓存时,一切都很好!

我遵循了this教程 并从symfony网站获得了一些辅助信息。

还找到了这个stack - 解释了发生了什么,但这仍然无法解决我的问题。

也许它在我的作曲家文件中的某个地方,或者我的git忽略了。 但是,我已经不知道了。

{
    "name": "symfony/framework-standard-edition",
    "license": "MIT",
    "type": "project",
    "description": "The \"Symfony Standard Edition\" distribution",
    "autoload": {
        "psr-4": { "": "src/" },
        "classmap": [ "app/AppKernel.php", "app/AppCache.php" ]
    },
    "autoload-dev": {
        "psr-4": { "Tests\\": "tests/" }
    },
    "require": {
        "php": ">=5.5.9",
        "symfony/symfony": "3.1.*",
        "doctrine/orm": "^2.5",
        "doctrine/doctrine-bundle": "^1.6",
        "doctrine/doctrine-cache-bundle": "^1.2",
        "symfony/swiftmailer-bundle": "^2.3",
        "symfony/monolog-bundle": "^2.8",
        "symfony/polyfill-apcu": "^1.0",
        "sensio/distribution-bundle": "^5.0",
        "sensio/framework-extra-bundle": "^3.0.2",
        "incenteev/composer-parameter-handler": "^2.0",
        "friendsofsymfony/user-bundle": "~2.0@dev",
        "symfony/assetic-bundle": "^2.8",
        "stfalcon/tinymce-bundle": "2.0",
        "egeloen/ckeditor-bundle": "^4.0",
        "whiteoctober/tcpdf-bundle": "^1.0",
        "gregwar/captcha-bundle": "^2.0"
    },
    "require-dev": {
        "sensio/generator-bundle": "^3.0",
        "symfony/phpunit-bridge": "^3.0"
    },
    "scripts": {
        "symfony-scripts": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::prepareDeploymentTarget"
        ],
        "post-install-cmd": [
            "@symfony-scripts"
        ],
        "post-update-cmd": [
            "@symfony-scripts"
        ],
        "compile": [
            "rm web/app_dev.php",
            "bin/console cache:clear",
            "bin/console assetic:dump"
        ]
    },
    "config": {
        "platform": {
            "php": "5.5.9"
        }
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-bin-dir": "bin",
        "symfony-var-dir": "var",
        "symfony-web-dir": "web",
        "symfony-tests-dir": "tests",
        "symfony-assets-install": "relative",
        "incenteev-parameters": {
            "file": "app/config/parameters.yml"
        },
        "branch-alias": {
            "dev-master": "3.1-dev"
        }
    }
}

3 个答案:

答案 0 :(得分:1)

您已将Symfony 2应用升级为3。

但仅仅改变composer.json中的要求是不够的。

结构发生了变化,所以你需要先用Symfony 3创建一个全新的应用程序,然后将旧的Symfony 2应用程序移动到新的Symfony 3应用程序中,按照作曲家的要求捆绑捆绑,编写作者要求。

这样您就可以确定您的应用在版本3上运行良好。

如果您尝试简单地从Symfony 2应用程序升级需求,那么您将创建大量错误,因为脚本已更改,结构已更改,需求已更改...

唯一安全的方法是启动一个新的Symfony 3项目,然后将旧的Symfony 2移植到其中。

答案 1 :(得分:1)

对我有用的解决方案。 New Symfony 3 installation: Could not open input file: app/console in composer install

说明:

这就是我猜的。当您将代码推送到Heroku时,平台会在/tmp目录上编译项目文件。当Heroku编译代码时,如果你没有var目录,会发生什么?会发生什么是Symfony创建了一个新的:

vendor/sensio/distribution-bundle/Composer/ScriptHandler.php:462

protected static function useNewDirectoryStructure(array $options)
{
    return isset($options['symfony-var-dir']) && is_dir($options['symfony-var-dir']);
}

然后当Heroku将您的新代码移动到/app目录时,Symfony配置仍指向旧展示位置/tmp,但现在删除/tmp处的文件!

答案 2 :(得分:0)

我看了一下你的github存储库。看起来它是Symfony3格式,所以我不确定发生了什么。我想尝试一下,但我不确定它是否会起作用。

尝试手动编辑composer.json文件以添加bin目录:

"config": {
        "bin-dir": "bin",
        "platform": {
            "php": "5.5.9"
        }
},

然后看看是否能解决问题。

编辑#2

现在还原这些更改并试一试:

"extra": {
    "symfony-app-dir": "bin",
    "symfony-bin-dir": "bin",
    "symfony-var-dir": "var",

换句话说,将app目录更改为“bin”。