SQLite 无法打开数据库文件:Laravel + Windows
Posted
技术标签:
【中文标题】SQLite 无法打开数据库文件:Laravel + Windows【英文标题】:SQLite unable to open database file: Laravel + Windows 【发布时间】:2015-08-03 15:23:53 【问题描述】:我尝试在我的 laravel 项目中使用 sqlite 数据库,在本地环境中进行开发(带有 AMMPS 的 Windows 8.1),但是当我尝试运行 migrate:instal
命令时,出现此错误:
[PDO异常] SQLSTATE[HY000] [14] 无法打开数据库文件
我的数据库配置文件(app/config/local/database.php):
<?php
return array(
'default' => 'sqlite',
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__ . '\..\..\database\production.sqlite',
'prefix' => '',
),
),
);
【问题讨论】:
可能是数据库被锁定了? 如果不是我怎么穿? 数据库路径中的最后一个斜杠应该是反斜杠 \ 而不是正斜杠 /。 是的,但问题不在于。 您是否尝试过使用诸如SQLite Expert Personal is freeware 之类的sqlite ide。这样你就会知道数据库是可用的。 【参考方案1】:如果权限允许在文件夹上写入,只需创建存储文件夹。
例如,这就是我解决问题的方法。
在config/database.php
:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path('database/databaseName.sqlite'),
'prefix' => '',
],
如果你在终端上运行php artisan migrate
,它会返回[PDOException] SQLSTATE[HY000] [14] unable to open database file
你自己创建路径文件夹,例如在你的终端mkdir storage/database/databaseName.sqlite
确保权限允许您写入,然后重新运行命令php artisan migrate
,它会返回成功消息:Migration table created successfully
。
【讨论】:
【参考方案2】:将DB_CONNECTION
从“mysql”更改为“sqlite”。
因为这是一个 sqlite 数据库,所以您可以删除该 .env
文件中的所有其他 DB_*
项目。
APP_ENV=local
APP_KEY=base64:
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=sqlite
【讨论】:
【参考方案3】:尝试删除 .env 文件中的 DB_DATABASE="yourdatabase" 变量
【讨论】:
@JakubKopyś 因为.env
文件的值是从 config/database.php
加载的,只要键在里面列出,不管它们的值是什么。如果在.env
文件中没有找到某个键,它默认为config/database.php
中设置的值,在DB_DATABASE
的情况下为.../database/database.sqlite
(从Laravel 5.3 开始)【参考方案4】:
在 laravel 5.3.x 上
这是唯一对我有用的东西:
将 DB_CONNECTION 从“mysql”更改为“sqlite”。因为这是一个 sqlite 数据库,您可以删除该 .env 中的所有其他 DB_* 项目 文件。
APP_ENV=本地 APP_KEY=base64:APP_DEBUG=true APP_LOG_LEVEL=debug APP_URL=http://localhost
DB_CONNECTION=sqlite
【讨论】:
【参考方案5】:尝试将文件databaseName.sqlite
权限数据库更改为可写和可读。也可以更改权限文件夹database
。
为了安全起见,在生产服务器中将此文件数据库更改为私有目录。
【讨论】:
【参考方案6】:好吧,可能已经晚了,但我在ubuntu
环境中也遇到了这个问题,这正是我如何克服这个问题的。
您必须将完全限定的 sqlite
文件路径传递给您的 .env
文件,如下所示:
DB_CONNECTION=sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE="/var/www/html/my-awesome-project/database/database.sqlite"
DB_USERNAME=homestead
DB_PASSWORD=secret
在此处将 DB_DATABASE
键的值更改为计算机文件系统中 sqlite
文件的确切位置。
提示:
您可以通过添加找到sqlite
文件的数据库路径
dd(database_path('database.sqlite'));
config/database.php
文件顶部的这行代码并将php artisan migrate
运行到终端。您可以从那里找到确切的位置,将其复制并放入.env
s DB_DATABASE
键。
在测试之前不要忘记重启 laravel 服务器并从 database.php
中删除 dd(database_path('database.sqlite'));
。
【讨论】:
【参考方案7】:请检查数据库文件所在目录的权限。chmod 777 YOU_APP/database
【讨论】:
【参考方案8】:您只需要在定义的路径上使 sqlite 文件可用。在 larvel 5.7 中,我只是使用以下命令并运行迁移。
touch /absolute/path/of/db.sqlite
这将在定义的位置创建一个空文件,然后您就可以开始了。
注意:在 Larvel 5.7 中,.sqlite 文件应该已经在定义的位置可用。
对于 windows,右键单击并在定义的位置创建具有定义名称的新文件。
【讨论】:
【参考方案9】:就我而言,将url: '%env(DATABASE_AUTH_URL)%'
更改为url: '%env(resolve:AUTH_DATABASE_URL)%'
解决了问题
【讨论】:
以上是关于SQLite 无法打开数据库文件:Laravel + Windows的主要内容,如果未能解决你的问题,请参考以下文章
Laravel - 无法使用 sqlite 找到驱动程序异常
Flask OperationalError:无法使用 sqlite3 打开数据库文件