База данных разработки laravel отсутствует. База данных sqlite не существует.
Попытка использовать sqlite в среде разработки. Кажется, что он правильно определяет среду, но когда я пытаюсь перейти на development.sqlite, я получаю исключение: "База данных не существует"
команда artisan
php artisan migrate --env=development
самозагрузки/start.php
$env = $app->detectEnvironment(array(
'development' => array('localhost'),
));
приложение/Config/разработка/database.php
<?php
return array(
'default' => 'sqlite',
'connections' => array(
'sqlite' => array(
'driver' => 'sqlite',
'database' => __DIR__.'/../database/development.sqlite',
'prefix' => '',
)
)
);
Насколько я знаю, laravel должен создать файл, если он не существует, но поскольку я не пытался вручную создать файл и все еще получаю исключение.
UPDATE: Может быть, что-то не так с env, потому что то же самое происходит, если я пытаюсь ": memory" для базы данных.
ОБНОВЛЕНИЕ 2: Я попытался запустить образец unit test, но добавлю к 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);
}
И это тоже дает то же самое исключение, хотя тестирование env уже отправлено с laravel. Поэтому я посмотрю, смогу ли я найти какие-либо новые проблемы.
Ответы
Ответ 1
Ничего себе, опечатки и неправильные пути.
Копирование массива sqlite из config/database.php в config/development/database.php Я забыл изменить путь к файлу development.sqlite из
__DIR__.'/../database/development.sqlite'
к
__DIR__.'/../../database/development.sqlite'
И для теста in memory это должно было быть
':memory:'
вместо
':memory'
Ответ 2
Я заметил, что мой файл database.php имел следующий
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
Я изменил его, чтобы прочитать следующее, и все получилось просто отлично.
'sqlite' => [
'driver' => 'sqlite',
'database' => database_path('database.sqlite'),
'prefix' => '',
],
Ответ 3
Хорошее руководство по настройке тестов базы данных в памяти здесь:
http://code.tutsplus.com/tutorials/testing-like-a-boss-in-laravel-models--net-30087
Ответ 4
Одна из проблем, с которой я столкнулся, - это использование "touch storage/database.sqlite" в терминале, поэтому база данных создается в папке "Хранилище" вместо папки базы данных.
в моем пути 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"
Надеюсь, что это поможет.!!
Ответ 5
Хорошо, мой ответ немного устарел, но в любом случае. Я столкнулся с той же проблемой, но с Laravel 5 я использую Windows 7 x64. Сначала я вручную создал базу данных SQLite под названием "db" и поместил ее в каталог хранения, а затем установил мой .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`
Я думал, что это исправит мои проблемы, но в командной строке сказано, что база данных не существует. И тогда я просто проверил путь к db в моем файле database.php, и именно поэтому я поместил файл базы данных в каталог хранилища. Но ничего не изменилось. И, наконец, я проверил расширение db, и это было .db, а не .sqlite как расширение по умолчанию, которое вы видите в своем блоке sqlite в файле database.php. Так вот как я переконфигурировал кусок sqlite:
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path().'/db.db',
'prefix' => '',
],
И, конечно же, не забудьте установить sqlite в качестве базы данных по умолчанию в файле database.php. Удачи!