0

我正在设置我的第一个 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(and migrate:refresh) 命令,但它只是挂起,我最终必须按 CTRL-C 退出(即使在使用 时--verbose)。当我之后检查数据库时,只创建了迁移表,它是空的。

我还尝试在我的开发环境(Homestead)上重新运行我的所有迁移,它们工作正常。

有谁知道这可能是什么原因造成的?

4

1 回答 1

1

您在这里遇到了许多不同的问题,并且可能需要进行更多调试才能帮助您。此外,forge 是“针对 Laravel 托管进行优化的,对吧?” - 我会尝试争取他们的支持。毕竟,这就是你要付出的代价。

一、抛出的异常:[RuntimeException]Aborted。

在普通的 Laravel 安装中,唯一抛出“Aborted”消息的异常来自 artisan 所基于的 Symfony 控制台组件。具体来说,在以下文件/类定义中的askand方法中doAsk

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. 一个一个地添加每个迁移,然后尝试运行它

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

于 2015-01-29T18:43:38.570 回答