我正在尝试升级我当前的CakePHP 2。X应用程序到3.x。
我修复了命名空间和文件夹结构问题。现在我有数据库的问题。在我的测试服务器中,我创建了相同的MySQL数据库并授予用户访问权限。然后我修改了config'app.php
的配置文件。但是当我尝试我的应用程序,我得到以下错误。问题是什么?似乎Cakephp试图使用Sqlite,但我使用MySQL ?
Inside config'app.php
'Datasources' => [
'default' => [
'className' => 'Cake'Database'Connection',
'driver' => 'Cake'Database'Driver'Mysql',
'persistent' => false,
'host' => 'localhost',
/**
* CakePHP will use the default DB port based on the driver selected
* MySQL on MAMP uses port 8889, MAMP users will want to uncomment
* the following line and set the port accordingly
*/
//'port' => 'nonstandard_port_number',
'username' => 'myuser',
'password' => 'mypass',
'database' => 'mydatabase',
'encoding' => 'utf8',
'timezone' => 'UTC',
'cacheMetadata' => true,
/**
* Set identifier quoting to true if you are using reserved words or
* special characters in your table or column names. Enabling this
* setting will result in queries built using the Query Builder having
* identifiers quoted when creating SQL. It should be noted that this
* decreases performance because each query needs to be traversed and
* manipulated before being executed.
*/
'quoteIdentifiers' => false,
],
],
误差Error: [PDOException] SQLSTATE[HY000] [14] unable to open database file
Request URL: /mycontroller/
Stack Trace:
#0 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php(48): PDO->__construct('sqlite:/var/www...', NULL, NULL, Array)
#1 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Driver/Sqlite.php(61): Cake'Database'Driver'Sqlite->_connect('sqlite:/var/www...', Array)
#2 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Schema/BaseSchema.php(46): Cake'Database'Driver'Sqlite->connect()
#3 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Dialect/SqliteDialectTrait.php(169): Cake'Database'Schema'BaseSchema->__construct(Object(Cake'Database'Driver'Sqlite))
#4 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Schema/Collection.php(52): Cake'Database'Driver'Sqlite->schemaDialect()
#5 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Schema/CachedCollection.php(44): Cake'Database'Schema'Collection->__construct(Object(Cake'Database'Connection))
#6 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Database/Connection.php(319): Cake'Database'Schema'CachedCollection->__construct(Object(Cake'Database'Connection), true)
#7 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/debug_kit/src/Model/Table/LazyTableTrait.php(40): Cake'Database'Connection->schemaCollection()
#8 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/debug_kit/src/Model/Table/RequestsTable.php(43): DebugKit'Model'Table'RequestsTable->ensureTables(Array)
#9 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/ORM/Table.php(285): DebugKit'Model'Table'RequestsTable->initialize(Array)
#10 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/ORM/TableRegistry.php(196): Cake'ORM'Table->__construct(Array)
#11 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/debug_kit/src/Routing/Filter/DebugBarFilter.php(186): Cake'ORM'TableRegistry::get('DebugKit.Reques...')
#12 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Event/EventManager.php(389): DebugKit'Routing'Filter'DebugBarFilter->afterDispatch(Object(Cake'Event'Event), Object(Cake'Network'Request), Object(Cake'Network'Response))
#13 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Event/EventManager.php(355): Cake'Event'EventManager->_callListener(Array, Object(Cake'Event'Event))
#14 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Event/EventManagerTrait.php(78): Cake'Event'EventManager->dispatch(Object(Cake'Event'Event))
#15 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(92): Cake'Routing'Dispatcher->dispatchEvent('Dispatcher.afte...', Array)
#16 /var/www/vhosts/example.com/httpdocs/webroot/index.php(37): Cake'Routing'Dispatcher->dispatch(Object(Cake'Network'Request), Object(Cake'Network'Response))
#17 {main}
如果你仔细观察堆栈跟踪,你会注意到这不是来自你的应用程序连接,而是来自DebugKit插件,它默认使用SQLite来存储面板和请求的详细信息,并且很可能目标目录/文件是不可写的。
Cookbook> DebugKit
[…]
DebugKit存储默认情况下,DebugKit在应用程序的
/tmp
目录中使用一个小的SQLite数据库来存储面板数据。如果你想要DebugKit在其他地方存储它的数据,你应该定义一个debug_kit
连接。数据库配置
默认情况下,DebugKit将面板数据存储到应用程序
tmp
目录下的SQLite数据库中。如果你不能安装pdo_sqlite
,你可以通过在你的config/app.php
文件中定义一个debug_kit
连接来配置DebugKit使用不同的数据库。[…]