CodeIgniter4加上Myth/Auth在通过php-spark-migrate-all运行迁移时抛出错误



我发现了一些有线行为,我有一个CI4项目,我已经工作了几周了。一切都很好,但到目前为止,我只是在本地机器上处理这个项目。当我想在我的笔记本电脑上运行该项目时,当我尝试用php spark migrate运行迁移时遇到了一个错误-所有

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:        CodeIgniterDatabaseExceptionsDatabaseException
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-migrate进行迁移。这很好,一点问题都没有,表在那里,没有错误。为了好玩,我把我的Math/auth迁移从vendor文件夹移到了";正常的";Database/Migrations文件夹,并能够以这种方式迁移它们。

这是非常有线的,尤其是因为在我以前使用的电脑上一切都很好。在那里,我可以使用php-spark-migrate运行迁移-当设置一个新的MySQL/MariahDB数据库时,所有这些都没有任何错误。但不知何故,只有在那里。

我能够在笔记本电脑的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. 将以下内容添加到新的迁移并保存文件:

    forge->addField(['blog_id'=>['type'=>'INT',‘constraint’=>5,'unsigned'=>true,"auto_increment"=>true,],'blog_title'=>['type'=>'VARCHAR',"constraint"=>"100",],'blog_description'=>['type'=>'TEXT','null'=>true,],]);$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数组:\Mythh\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中为$tests设置数据库凭据

它所做的只是希望连接到在$tests下设置的数据库,但似乎并没有像我们不希望的那样实际运行。当环境设置为"0"时,这似乎被启用;测试";。

所以暂时有三个选项

  1. 忽略错误但这总是让你想知道到底发生了什么

  2. 设置$tests数据库的凭据(并非真正保证。(

  3. 如果您没有使用测试文件夹,请删除/重命名它。(停止查找它。(

  4. 将使用-n开关/选项并指定要使用的命名空间(但不确定这是否有效。(

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

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

;extension=sqlite3

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

最新更新