使用Laravel Forge在生产服务器上进行迁移,错误[RuntimeException]已中止

时间:2015-01-29 15:52:58

标签: laravel laravel-forge

我正在设置我的第一台Laravel Forge服务器。一切似乎进展顺利,代码已经从我的Git回购中删除,我可以在线查看我的网站。出于某种原因,数据库迁移不起作用。

当我运行'部署'通过Forge命令,我在Forge事件日志中看到的错误是:

From repohost:myusername/myrepo
 * branch            master     -> FETCH_HEAD
Already up-to-date.
Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
Nothing to install or update
Generating autoload files
Generating optimized class loader
Compiling common classes
Compiling views
Migration table created successfully.



  [RuntimeException]  
  Aborted             



migrate [--bench[="..."]] [--database[="..."]] [--force] [--path[="..."]] [--package[="..."]] [--pretend] [--seed]

我已经尝试通过终端运行migrate(和migrate:refresh)命令并且它只是挂起而且我必须最终CTRL-C输出(即使使用--verbose )。当我在之后检查数据库时,只创建了迁移表,它是空的。

我还尝试在我的开发环境(Homestead)上重新运行所有迁移,并且它们运行良好。

有谁知道可能导致这种情况的原因?

1 个答案:

答案 0 :(得分:0)

你在这里遇到了许多不同的问题,在任何人都可以帮助你之前,可能需要做更多的调试。此外,Forge是针对Laravel托管进行优化的,对吗?" - 我试着去支持他们。这毕竟是你付出的代价。

首先,抛出异常:[RuntimeException]已中止。

在一个库存Laravel安装中,唯一的例外是抛出" Aborted"消息来自artisan所基于的Symfony控制台组件。具体来说,在以下文件/类定义

内的askdoAsk方法中
vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php
vendor/symfony/console/Symfony/Component/Console/Helper/QuestionHelper.php

具体来说,当artisan无法从命令中读取响应时,Symfony组件会抛出这些异常

#File:     vendor/symfony/console/Symfony/Component/Console/Helper/DialogHelper.php

    if (null === $autocomplete || !$this->hasSttyAvailable()) {
        $ret = fgets($inputStream, 4096);
        if (false === $ret) {
            throw new \RuntimeException('Aborted');
        }
        $ret = trim($ret);
    }

这些是非常难以追踪的错误,可能与脚本返回的过多输入有关(例如,巨大的堆栈跟踪),PHP无法处理的无效输入,终端的一些问题用于连接服务器的应用程序,或服务器本身配置的方式。

即。该异常可能与您的实际错误无关。

根据行为,听起来您的迁移会抛出终端无法处理的堆栈跟踪,会创建数据库死锁。这很乏味,但我还是

  1. 在非生产服务器上隔离并重现问题

  2. 删除数据库

  3. 将迁移移至子文件夹

  4. 逐个添加每个迁移,然后尝试运行它

  5. 最终,您会发现导致问题的迁移,并可以从那里进行调试。