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

时间:2013-09-28 17:15:17

标签: sqlite laravel laravel-4

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

工匠命令

php artisan migrate --env=development

自举/ start.php

$env = $app->detectEnvironment(array(

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

));

应用程序/配置/开发/ database.php中

<?php

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

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

据我所知,laravel应该创建该文件,如果它不存在但是因为它没有我尝试手动创建文件并仍然抛出异常。

更新:也许用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);
    }

虽然测试环境已经附带了laravel,但这也给出了同样的例外。所以我会看看我是否可以找到任何新问题。

3 个答案:

答案 0 :(得分:22)

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

将sqlite数组从config / database.php复制到config / development / database.php我忘了从

更改development.sqlite文件的路径
__DIR__.'/../database/development.sqlite'

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

对于内存测试,应该是

':memory:'

而不是

':memory'

答案 1 :(得分:2)

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

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

我改变它以阅读以下内容,它工作得很好。

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

答案 2 :(得分:1)

我遇到的一个问题是我使用&#34; touch storage / database.sqlite&#34;在终端中,因此数据库是在Storage文件夹而不是数据库文件夹中创建的。

我的config / database.php路径中的

是database_path(&#39; database.sqlite&#39;)

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

比我使用命令&#34; php artisan migrate&#34;这给了我错误&#34;数据库(/Applications/MAMP/htdocs/FOLDER_NAME/database/database.sqlite)    不存在。&#34;

所以它显而易见的数据库文件不在数据库文件夹中,因为它是在Storage文件夹中生成的,所以复制&#34; database.sqlite&#34;从存储文件夹或运行命令&#34; touch database / database.sqlite&#34;

希望有所帮助。!!