【问题标题】:Heroku rejects push because it cannot clear the cache Symfony3Heroku 拒绝推送,因为它无法清除缓存 Symfony3
【发布时间】:2017-05-21 18:25:53
【问题描述】:

整天工作将我的应用程序部署到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一样

还有一个已知问题,即我使用了错误类型的映射。

但我觉得还好。

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

当我使用 php 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"
        }
    }
}

【问题讨论】:

  • 奇怪的bin/console是一个Symfony3命令,而app/console是一个Symfony2命令。我想知道这是否与它有关?
  • 是的,symfony2 使用 app/console,而 symfony3 使用 bin/console。
  • 这就是我的意思,也许你需要使用 Symfony 2.7 版而不是 3.1 版(或 2.8 版),因为目录结构已经改变。我不确定您是否可以更改 symfony 版本。
  • 我可以更改 symfony 版本,但我真的不想这样做,heroku 支持 symfony3。另请参阅此链接 - stackoverflow.com/questions/34198591/…
  • 见@Aerendir 的回答。我同意他的看法。看来您有一个 Symfony2 项目。您需要将其更新到 Symfony3。我在 SO 上看到很多关于用户从 Symfony2 转换到 symfony3 时遇到问题的帖子;原因是,他们尝试使用easy way 就像您尝试做的那样。

标签: php git heroku symfony


【解决方案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 将您的新代码移动到 /appdir 时,Symfony 配置仍然指向旧位置 /tmp,但现在放置在 /tmp 的文件被删除!

【讨论】:

  • 这解决了我的问题
【解决方案2】:

我查看了您的 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",

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

【讨论】:

  • 它给出了相同的结果,也再次清除了我的缓存(composer 和 symfony)
  • 这表明symfony-app-dir 仍然是“应用程序”,但我需要将其更改为“bin”。
【解决方案3】:

您将 Symfony 2 应用升级到 3。

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

结构发生了变化,因此您需要首先使用 Symfony 3 创建一个新的新应用程序,然后将旧的 Symfony 2 应用程序移动到新的 Symfony 3 应用程序,逐个捆绑包,按作曲家要求的作曲家要求。

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

如果你尝试简单地从 Symfony 2 应用程序升级需求,那么你会产生很多错误,因为脚本改变了,结构改变了,需求改变了......

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

【讨论】:

  • 我在两个月前使用了这个命令 composer create-project symfony/framework-standard-edition my_project_name,它安装了 symfony3,但我可以用一个新项目尝试解决方案。
  • 使用 Symfony 安装程序而不是 composer 本身:symfony.com/doc/current/setup.html
  • 阅读您的作曲家,您似乎安装了 3.1 版。我也将相同的程序应用于次要版本之间的升级(例如,从 2.6 升级到 2.7 以及从 2.7 升级到 2.8)。
猜你喜欢
  • 1970-01-01
  • 2015-09-01
  • 2017-01-09
  • 2021-09-22
  • 1970-01-01
  • 2013-04-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多