通过php spark migration -all

问题描述

我发现了一些有线行为,有几个星期以来我一直在从事一个CI4项目。一切工作都很好,但是直到现在我还是在本地计算机上使用该项目。当我想在笔记本电脑上运行项目时,尝试使用php spark migration -all

运行迁移时遇到错误
CodeIgniter CLI Tool - Version 4.0.4 - Server-Time: 2020-07-20 06:16:02am



Running all new migrations...

An uncaught Exception was encountered



Type:        CodeIgniter\Database\Exceptions\DatabaseException

Message:     Unable to connect to the database.

Filename:    /opt/lampp/htdocs/sms/vendor/codeigniter4/framework/system/Database/BaseConnection.php

Line Number: 425

该项目包括Myth / auth,因此我尝试仅使用php spark migration运行“我的”迁移。一切正常,没有问题,表在那里,没有错误。只是为了好玩,我将我的Math / auth迁移从供应商文件夹移到了“普通”的Database / Migrations文件夹,并能够以这种方式迁移它们。

那是非常有线的,尤其是因为在我之前使用过的PC上一切正常。在那里,当设置了新的MySQL / MariahDB数据库时,我可以使用php spark migrate -all运行迁移而没有任何错误。但是只有这样。

我能够在Manjaro分区,Windows 10分区和iMac的笔记本电脑上重现该错误。 因此,如果要重现该错误,请执行以下操作:

  1. composer create-project codeigniter4/appstarter whatever

  2. env重命名为。env

  3. 设置CI_ENVIRONMENT = development并明显取消注释该行

  4. 在.env中配置和取消注释数据库设置

  5. 使用> php spark migrate:create AddBlog

    从文档创建一个示例迁移
  6. 将以下内容添加到新迁移中并保存文件:

    伪造-> addField([ 'blog_id'=> [ 'type'=>'INT', '约束'=> 5, 'unsigned'=>是, 'auto_increment'=>是, ], 'blog_title'=> [ 'type'=>'VARCHAR', 'constraint'=>'100', ], 'blog_description'=> [ 'type'=>'TEXT', 'null'=>是, ], ]); $ this-> forge-> addKey('blog_id',true); $ this-> forge-> createTable('blog'); } 公共功能down() { $ this-> forge-> dropTable('blog'); } }
  7. 运行> composer require myth/auth

  8. 编辑app / Config / Email.php并验证将fromName和fromEmail设置为发送电子邮件以重置密码等时使用的源。

  9. 编辑app / Config / Validation.php并将以下值添加到ruleSets数组:\ Myth \ Auth \ Authentication \ Passwords \ ValidationRules :: class

  10. 确保正确设置数据库,然后运行Auth迁移:php spark migrate -all

  11. 结果,您还将遇到上述错误。我无法 解决该错误,但系统正在使用 首先。

  12. 如果您仅使用php spark migrate,它将迁移样本迁移而没有任何错误

解决方法

我正在Kubuntu 18.04 LTS上运行CI 4.04,运行apache2.4.29和PHP 7.4.9

最简单的答案是...

使用php spark migrate -all在它知道的任何地方搜索数据库/迁移文件夹和文件。

恰好在这样的文件夹/文件下

tests/_support/Database/Migrations/2020-02-22-222222_example_migration.php

为使简短回答更长而添加的位

因此我们看到的数据库错误是由于未在 /app/Config/Database.php

中为$ test设置数据库凭据而引起的

它所做的只是寻找连接到$ tests下设置的数据库的方法,但是由于我们不希望它实际运行,所以它似乎并没有真正运行。 当“环境”设置为“测试”时,似乎启用了该功能。

所以暂时有3个选项...

  1. 忽略该错误。 但这总是让您想知道真正发生了什么。

  2. 设置$ tests数据库的凭据。 (不是很必要。)

  3. 如果不使用,请删除/重命名测试文件夹。 (停止找到它。)

  4. 将使用-n开关/选项并指定要使用的名称空间(但不确定是否可以使用。)

,

将.env文件中的数据库主机名从localhost更改为“ 127.0.0.1”通常可以解决从命令行运行任何迁移的问题。

,

打开你的 PHP.ini 文件,找到这个:

;extension=sqlite3

并删除分号以激活 sqlite3。您需要在 Codeigniter 4 中使用这个库才能使用 FORGE。

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...