laravel开发环境sqlite数据库不存在

bxfogqkk  于 2022-11-30  发布在  SQLite
关注(0)|答案(7)|浏览(257)

尝试在开发环境中使用sqlite。它似乎可以正确检测环境,但当我尝试迁移到development.sqlite时,我会抛出异常“数据库不存在”
工匠指挥

php artisan migrate --env=development

bootstrap/start.php

$env = $app->detectEnvironment(array(

    'development' => array('localhost'),

));

app/config/development/database.php

<?php

return array(
    'default' => 'sqlite',

    'connections' => array(
            'sqlite' => array(
            'driver'   => 'sqlite',
            'database' => __DIR__.'/../database/development.sqlite',
            'prefix'   => '',
        )
    )
);

据我所知,如果文件不存在,laravel应该创建该文件,但由于它不存在,我尝试手动创建该文件,但仍然抛出了异常。
UPDATE:可能是env有问题,因为如果我对数据库尝试':memory',也会发生同样的事情。
更新2:我尝试运行示例单元测试,但添加到TestCase.php

/**
     * Default preparation for each test
     *
     */
    public function setUp()
    {
        parent::setUp(); // Don't forget this!

        $this->prepareForTests();
    }

    /**
     * Creates the application.
     *
     * @return Symfony\Component\HttpKernel\HttpKernelInterface
     */
    public function createApplication()
    {
        $unitTesting = true;

        $testEnvironment = 'testing';

        return require __DIR__.'/../../bootstrap/start.php';
    }

    /**
     * Migrates the database and set the mailer to 'pretend'.
     * This will cause the tests to run quickly.
     *
     */
    private function prepareForTests()
    {
        Artisan::call('migrate');
        Mail::pretend(true);
    }

这也给出了相同的例外,尽管测试env已经随laravel一起提供了。所以我会看看我是否能找到任何新的问题。

neskvpey

neskvpey1#

哇,错别字和错误的路径。
将sqlite数组从config/database.php复制到config/development/database.php我忘记将开发.sqlite文件的路径从

__DIR__.'/../database/development.sqlite'

__DIR__.'/../../database/development.sqlite'

对于内存测试,它应该是

':memory:'

代替

':memory'
wsxa1bj1

wsxa1bj12#

我注意到我的database.php文件有以下内容

'sqlite' => [
    'driver' => 'sqlite',
    'database' => env('DB_DATABASE', database_path('database.sqlite')),
    'prefix' => '',
],

我把它改成了下面的内容,它工作得很好。

'sqlite' => [
    'driver' => 'sqlite',
    'database' => database_path('database.sqlite'),
    'prefix' => '',
],
xmd2e60i

xmd2e60i3#

其中一个问题,我面临的是我使用“触摸存储/数据库.sqlite”在终端,所以数据库是创建在存储文件夹,而不是数据库文件夹。
在我的config/database.php中,路径是database_path(“数据库. sqlite ')

'sqlite' => [
        'driver' => 'sqlite',
        'database' => database_path('database.sqlite'),
        'prefix' => '',
    ],

而不是使用命令“php Artisan migrate”,它给了我错误“数据库(/应用程序/MAMP/htdocs/文件夹名称/数据库/数据库.sqlite)
不存在。”
因此很明显,数据库文件不在数据库文件夹中,因为它是在存储文件夹中生成的,所以从存储文件夹中复制“database.sqlite”或运行命令“touch database/database.sqlite”
希望这对你有帮助。

nom7f22z

nom7f22z4#

好吧,我的答案是有点过时,但无论如何。我面临着同样的问题,但与Laravel 5,我使用Windows 7 x64。首先我手动创建名为'db'的SQLite数据库,并将其放入存储目录,然后修复我的.env文件,如下所示:

APP_ENV=local
APP_DEBUG=true
APP_KEY=oBxQMkpqbENPb07bLccw6Xv7opAiG3Jp

DB_HOST=localhost
DB_DATABASE='db'
DB_USERNAME=''
DB_PASSWORD=''

CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync

MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null`

我以为它会解决我的问题,但命令行不断告诉我,数据库不存在。然后我只是检查了我的database.php文件中的db路径,这就是为什么我把数据库文件放在存储目录。但什么也没有改变。最后我检查了db的扩展名,它是.db。而不是database.php中sqlite块的默认扩展名.sqlite。因此,这就是我重新配置sqlite块的方式:

'sqlite' => [
    'driver'   => 'sqlite',
    'database' => storage_path().'/db.db',
    'prefix'   => '',
],

当然,不要忘记在database.php文件中将sqlite设置为默认数据库。祝你好运!

a14dhokn

a14dhokn5#

对我来说,数据库的路径必须是'/var/www/html' + location to the database in your project。在我的例子中,数据库存储在database/db.sqlite中,所以DB_DATABASE='/var/www/html/database/db.sqlite'

wixjitnu

wixjitnu6#

我在运行GitHub操作测试工作流时遇到了同样的错误。
对我来说,解决方案是在工作流文件中定义数据库存档的相对路径:

on:
    
...

env:
  DB_CONNECTION: sqlite
  DB_DATABASE: database/database.sqlite
jobs:
  laravel-tests:
  ...
2w3kk1z5

2w3kk1z57#

我认为前面的答案降低了配置的重要性,开发人员很可能希望获得如下的数据库文件:

'sqlite' => [
    'driver' => 'sqlite',
    'url' => env('DATABASE_URL'),
    'database' => database_path(env('DB_DATABASE', 'database.sqlite')), // <- like this
    'prefix' => '',
    'foreign_key_constraints' => env('DB_FOREIGN_KEYS', true),
],

Laravel 9.x上测试

相关问题