问题描述
我发现了一些有线行为,有几个星期以来我一直在从事一个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的笔记本电脑上重现该错误。 因此,如果要重现该错误,请执行以下操作:
-
composer create-project codeigniter4/appstarter whatever
-
将
env
重命名为。env
-
设置
CI_ENVIRONMENT = development
并明显取消注释该行 -
在.env中配置和取消注释数据库设置
-
使用
从文档创建一个示例迁移> php spark migrate:create AddBlog
-
将以下内容添加到新迁移中并保存文件:
伪造-> 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'); } } -
运行
> composer require myth/auth
-
编辑app / Config / Email.php并验证将fromName和fromEmail设置为发送电子邮件以重置密码等时使用的源。
-
编辑app / Config / Validation.php并将以下值添加到ruleSets数组:\ Myth \ Auth \ Authentication \ Passwords \ ValidationRules :: class
-
确保正确设置数据库,然后运行Auth迁移:
php spark migrate -all
-
结果,您还将遇到上述错误。我无法 解决该错误,但系统正在使用 首先。
-
如果您仅使用
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个选项...
-
忽略该错误。 但这总是让您想知道真正发生了什么。
-
设置$ tests数据库的凭据。 (不是很必要。)或
-
如果不使用,请删除/重命名测试文件夹。 (停止找到它。)
-
将使用-n开关/选项并指定要使用的名称空间(但不确定是否可以使用。)
将.env文件中的数据库主机名从localhost更改为“ 127.0.0.1”通常可以解决从命令行运行任何迁移的问题。
,打开你的 PHP.ini 文件,找到这个:
;extension=sqlite3
并删除分号以激活 sqlite3。您需要在 Codeigniter 4 中使用这个库才能使用 FORGE。