2013-09-28 11 views
10

開発環境でsqliteを使用しようとしています。私がスローされた例外がlaravel開発環境sqliteデータベースが存在しません

職人コマンド

php artisan migrate --env=development 

ブートストラップ/ start.php

$env = $app->detectEnvironment(array(

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

)); 
「データベースが存在しません」を取得正しく環境を検出するようだが、私は移行しようとすると、development.sqliteします

アプリ/設定/開発/ database.phpで私の知る限りでは

<?php 

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

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

laravelはファイルが存在しない場合に作成されるはずですが、手動でファイルを作成しようとしても例外がスローされます。

UPDATE:データベースに「メモリ」を試しても同じことが起こるため、おそらくenvで正しくないものがあります。

UPDATE 2:テストENVがすでにlaravelに同梱されているが、私はサンプルユニットテストを実行しようとしたが、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); 
    } 

そして、これに追加するには、あまりにも同じ例外を提供します。だから私はそれについて新しい問題を見つけることができるかどうかを見ます。

答えて

21

ワウ、タイプミス、間違ったパス。私は

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

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

からdevelopment.sqliteファイルへのパスを変更するのを忘れ設定/開発/ database.phpでに設定/ database.phpでからSQLiteの配列のコピー

メモリテストでは、

':memory:' 

の代わりに

':memory' 
0

さて、私の答えはとにかくちょっと時代遅れですが、。私も同じ問題に直面しましたが、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.phpのsqliteブロックに表示されるデフォルト拡張子.sqliteではなく.dbでした。だから、これは私がsqliteの作品を再構成する方法である:

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

そしてもちろん、あなたのdatabase.phpでファイル内のデフォルトのデータベースとしてのsqliteを設定することを忘れないでください。がんばろう!私は私のdatabase.phpでのファイルは、以下の

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

を持っていたことに気づい

2

私は次のように読み取るために、それを変更し、それがうまく働きました。私が直面した問題の

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

あなたはsqliteファイルの相対パスに.envのDB_DATABASE値を変更することができます –

1

一つは、私は、端末に「タッチストレージ/ database.sqlite」を使用したので、データベースは、Storageフォルダの代わりに、データベースフォルダに作成されます。私の設定で

/database.phpでパスがdatabase_path( 'database.sqlite')である

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

私は私にエラー「データベース(/アプリケーション/ MAMP/htdocsにを与えたコマンド "PHPの職人の移行" を使うよりも、 /FOLDER_NAME/database/database.sqlite)
が存在しません。

ので、それはそれは、ストレージのフォルダに生成されたと明らかにデータベースファイルがデータベースフォルダにないですので、保存フォルダから「database.sqlite」をコピーしたり、コマンドを実行する「タッチデータベース/ database.sqlite」

希望に役立ちます!!

関連する問題