2013-09-28 157 views
10

Cố gắng sử dụng sqlite trong môi trường phát triển. Có vẻ như để phát hiện môi trường một cách chính xác nhưng khi tôi cố gắng để di chuyển đến development.sqlite tôi nhận được ngoại lệ ném "cơ sở dữ liệu không tồn tại"môi trường phát triển laravel cơ sở dữ liệu sqlite không tồn tại

lệnh nghệ nhân

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' => '', 
     ) 
    ) 
); 

Theo như tôi biết laravel là nghĩa vụ phải tạo ra các tập tin nếu nó không tồn tại nhưng vì nó đã không tôi đã cố gắng tự tạo ra các tập tin và vẫn nhận được ngoại lệ ném.

CẬP NHẬT: Có thể có điều gì đó không phù hợp với env vì điều tương tự cũng xảy ra nếu tôi thử ': bộ nhớ' cho cơ sở dữ liệu.

UPDATE 2: Tôi đã cố gắng chạy thử nghiệm đơn vị mẫu nhưng thêm vào 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); 
    } 

Và điều này quá cho cùng một ngoại lệ mặc dù env thử nghiệm đã được vận chuyển với laravel. Vì vậy, tôi sẽ xem nếu tôi có thể tìm thấy bất kỳ vấn đề mới về điều đó.

Trả lời

21

Wow, lỗi chính tả và đường dẫn sai.

Sao chép mảng sqlite từ config/database.php vào config/phát triển/database.php Tôi quên để thay đổi đường dẫn đến tập tin development.sqlite từ

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

để

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

Và đối với thử nghiệm trong bộ nhớ, nó phải là

':memory:' 

thay vì

':memory' 
0

Vâng, câu trả lời của tôi là kinda lỗi thời, nhưng dù sao. Tôi phải đối mặt với cùng một vấn đề, nhưng với Laravel 5, tôi đang sử dụng Windows 7 x64. Trước tiên tôi tự tạo ra cơ sở dữ liệu SQLite gọi là 'db' và đặt nó vào thư mục lưu trữ, sau đó cố định tập tin .env của tôi như thế này:

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` 

Tôi nghĩ rằng nó sẽ khắc phục vấn đề của tôi, nhưng dòng lệnh giữ nói với tôi rằng cơ sở dữ liệu không tồn tại. Và sau đó tôi chỉ kiểm tra đường dẫn đến db trong tệp database.php của tôi và đây là lý do tại sao tôi đặt tệp cơ sở dữ liệu vào thư mục lưu trữ. Nhưng không có gì thay đổi. Và cuối cùng tôi đã kiểm tra phần mở rộng của db và nó là .db, không phải .sqlite như là phần mở rộng mặc định mà bạn thấy trong khối sqlite của bạn trong database.php. Vì vậy, đây là cách tôi cấu hình lại sqlite mảnh:

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

Và dĩ nhiên đừng quên đặt sqlite làm cơ sở dữ liệu mặc định trong tệp database.php của bạn. Chúc may mắn!

2

tôi nhận thấy rằng tập tin database.php tôi có

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

tôi đã thay đổi nó để đọc sau đây, và nó chỉ làm việc tốt.

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

Bạn chỉ có thể thay đổi giá trị DB_DATABASE bằng .env thành đường dẫn tương đối của tệp sqlite của bạn –

1

Một trong những vấn đề mà tôi gặp phải là tôi sử dụng "touch storage/database.sqlite" trong terminal, vì vậy cơ sở dữ liệu được tạo trong thư mục lưu trữ thay vì thư mục cơ sở dữ liệu.

trong cấu hình của tôi/database.php đường là database_path ('database.sqlite')

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

hơn tôi sử dụng lệnh "php nghệ nhân di cư" đó đã cho tôi lỗi "Cơ sở dữ liệu (/ Applications/MAMP/htdocs /FOLDER_NAME/database/database.sqlite) không
không tồn tại. "

do đó, nó tập tin cơ sở dữ liệu rõ ràng không có trong thư mục cơ sở dữ liệu như Nó được tạo ra trong thư mục lưu trữ, do đó sao chép "database.sqlite" từ thư mục lưu trữ hoặc chạy lệnh "cơ sở dữ liệu touch/database.sqlite"

Hy vọng rằng sẽ giúp . !!