我正在设置我的第一台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)上重新运行所有迁移,并且它们运行良好。
有谁知道可能导致这种情况的原因?
答案 0 :(得分:0)
你在这里遇到了许多不同的问题,在任何人都可以帮助你之前,可能需要做更多的调试。此外,Forge是针对Laravel托管进行优化的,对吗?" - 我试着去支持他们。这毕竟是你付出的代价。
首先,抛出异常:[RuntimeException]
已中止。
在一个库存Laravel安装中,唯一的例外是抛出" Aborted"消息来自artisan所基于的Symfony控制台组件。具体来说,在以下文件/类定义
内的ask
和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无法处理的无效输入,终端的一些问题用于连接服务器的应用程序,或服务器本身配置的方式。
即。该异常可能与您的实际错误无关。
根据行为,听起来您的迁移会抛出终端无法处理的堆栈跟踪,或会创建数据库死锁。这很乏味,但我还是
在非生产服务器上隔离并重现问题
删除数据库
将迁移移至子文件夹
逐个添加每个迁移,然后尝试运行它
最终,您会发现导致问题的迁移,并可以从那里进行调试。