SQLite无法打开数据库文件:Laravel+Windows


SQLite unable to open database file: Laravel + Windows

我尝试在我的laravel项目中,在dev的本地环境中使用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'   => '',
        ),
    ),
);

尝试删除.env文件中的DB_DATABASE="yourdatabase"变量

如果权限允许写入文件夹,只需创建存储文件夹。

这就是我解决问题的方法。

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

创建自己的路径文件夹,e-g在您的终端mkdir storage/database/databaseName.sqlite

确保权限允许您写入,然后重新运行命令php artisan migrate,它会向您返回成功消息:Migration table created successfully

在laravel 5.3.x 上

这是唯一对我有效的东西:

将DB_CONNECTION从"mysql"更改为"sqlite"。因为这是一个sqlite数据库,您可以删除该.env中的所有其他DB_*项文件

APP_ENV=本地APP_KEY=base64:APP_DEBUG=真APP_LOG_LEVEL=调试APP_URL=http://localhost

DB_CONNECTION=sqlite

您只需要在定义的路径上使sqlite文件可用。在larvel 5.7中,我只使用了以下命令并运行迁移。

touch /absolute/path/of/db.sqlite

这将在定义的位置创建一个空文件,您可以继续。

观察:在Larvel 5.7中,.sqlite文件应该已经在定义的位置可用。

对于窗口,右键单击并在定义的位置创建具有定义名称的新文件。

尝试将文件databaseName.sqlite权限数据库更改为可写和可读。也可以更改权限文件夹database

在生产服务器中,为了安全起见,将此文件数据库更改为专用目录。

虽然可能已经晚了,但我在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到终端。您可以从那里找到确切的位置,将其复制并放入.envDB_DATABASE密钥中。

在测试之前,不要忘记重新启动laravel服务器并从database.php中删除dd(database_path('database.sqlite'));

在我的案例中,将url: '%env(DATABASE_AUTH_URL)%'更改为url: '%env(resolve:AUTH_DATABASE_URL)%'修复了问题

最多,您必须设置SQLite数据库文件的正确路径。

为了减轻.env文件中的设置与config文件夹中的database.php文件之间的冲突,只需在database.php文件中设置数据库文件路径并将其从.ev文件中删除即可。.env文件只需编写连接并删除其他数据库属性。

DB_CONNECTION=sqlite

第二个打开config/database.php转到connections数组并将数据库路径更改为数据库文件路径database_path("您的数据库文件路径"(

'connections' => [
    'sqlite' => [
        'driver' => 'sqlite',
        'url' => env('DATABASE_URL'),
        'database' => database_path('mydb.sqlite'),
        'prefix' => '',
        'foreign_key_constraints' => env('DB_FOREIGN_KEYS', false),
    ],

请检查存储数据库文件的目录的权限。chmod 777 YOU_APP/database

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