12

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

工匠命令

php artisan migrate --env=development

引导程序/start.php

$env = $app->detectEnvironment(array(

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

));

应用程序/配置/开发/数据库.php

<?php

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

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

据我所知,如果文件不存在,laravel 应该创建文件,但由于它不存在,所以我尝试手动创建文件并仍然抛出异常。

更新:环境可能有些不对劲,因为如果我为数据库尝试“:内存”,也会发生同样的事情。

更新 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);
    }

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

4

5 回答 5

23

哇,错别字和错误的路径。

将 sqlite 数组从 config/database.php 复制到 config/development/database.php 我忘了更改 development.sqlite 文件的路径

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

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

对于内存测试,它应该是

':memory:'

代替

':memory'
于 2013-09-28T19:26:50.363 回答
7

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

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

我将其更改为阅读以下内容,并且效果很好。

'sqlite' => [
    'driver' => 'sqlite',
    'database' => database_path('database.sqlite'),
    'prefix' => '',
],
于 2016-03-27T17:13:57.347 回答
2

我面临的一个问题是我在终端中使用“touch storage/database.sqlite”,因此数据库是在 Storage 文件夹而不是数据库文件夹中创建的。

在我的 config/database.php 路径是 database_path('database.sqlite')

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

而不是我使用命令“php artisan migrate”,这给了我错误“数据库(/Applications/MAMP/htdocs/FOLDER_NAME/database/database.sqlite)不
存在。”

所以很明显数据库文件不在数据库文件夹中,因为它是在存储文件夹中生成的,所以从存储文件夹中复制“database.sqlite”或运行命令“touch database/database.sqlite”

希望有帮助。!!

于 2016-03-29T07:04:42.500 回答
1

好吧,我的回答有点过时了,但无论如何。我遇到了同样的问题,但是对于 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,而不是 .sqlite 作为您在 database.php 中的 sqlite 块中看到的默认扩展名。所以这就是我重新配置 sqlite 片段的方式:

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

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

于 2015-04-29T18:55:45.977 回答
0

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

于 2022-02-19T13:51:20.100 回答