12

開発環境でsqliteを使おうとしています。環境を正しく検出しているようですが、 development.sqlite に移行しようとすると、「データベースが存在しません」という例外がスローされます

職人の命令

php artisan migrate --env=development

ブートストラップ/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はファイルを作成するはずですが、そうではなかったので、手動でファイルを作成しようとしましたが、それでも例外がスローされます。

更新:データベースに「: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に同梱されていますが、これも同じ例外を与えます。そのため、新しい問題が見つかるかどうかを確認します。

4

5 に答える 5

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

私が直面した問題の 1 つは、ターミナルで「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 の拡張子を確認したところ、database.php の sqlite ブロックに表示されるデフォルトの拡張子として .sqlite ではなく、.db でした。だから、これは私がsqliteの部分を再構成した方法です:

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

もちろん、database.php ファイルでデフォルトのデータベースとして sqlite を設定することを忘れないでください。幸運を!

于 2015-04-29T18:55:45.977 に答える