我发现了一些有线行为,我有一个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上重现错误。因此,如果你想重现错误,请执行以下操作:
composer create-project codeigniter4/appstarter whatever
将
env
重命名为。env
设置
CI_ENVIRONMENT = development
并显然取消注释该行在.env 中配置和取消注释数据库设置
使用
> php spark migrate:create AddBlog
创建一个类似于文档的示例迁移将以下内容添加到新的迁移并保存文件:
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'(;}}运行
> composer require myth/auth
编辑app/Config/Email.php,并验证fromName和fromEmail是否设置为发送用于重置密码等的电子邮件时使用的。
编辑app/Config/Validation.php,并将以下值添加到ruleSets数组:\Mythh\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中为$tests设置数据库凭据
它所做的只是希望连接到在$tests下设置的数据库,但似乎并没有像我们不希望的那样实际运行。当环境设置为"0"时,这似乎被启用;测试";。
所以暂时有三个选项
忽略错误但这总是让你想知道到底发生了什么
设置$tests数据库的凭据(并非真正保证。(或
如果您没有使用测试文件夹,请删除/重命名它。(停止查找它。(
将使用-n开关/选项并指定要使用的命名空间(但不确定这是否有效。(
在.env文件中将DB主机名从localhost更改为127.0.0.1'通常可以解决从命令行运行任何迁移的问题。
打开你的PHP.ini文件,找到这个:
;extension=sqlite3
并删除分号以激活sqlite3。您需要Codeigniter 4中的此库才能使用FORGE。