#php #ajax #database #laravel
#php #ajax #База данных #laravel
Вопрос:
У меня есть одностраничное приложение Laravel 5.2, которое после рендеринга в DOM извлекает некоторые настройки с помощью вызовов AJAX. Очень возможно, что многие вызовы ajax выполняются одновременно.
Иногда я получаю сообщение об ошибке 500, потому что пользователи таблицы не могут быть найдены (что действительно существует). Если я извлеку запрос, я увижу, что используемый язык запросов — sqlite, в то время как в настройках моей базы данных указано, что это должен быть sqlsrv. Похоже, Laravel использует sqlite в качестве подключения к базе данных.
У кого-нибудь есть какие-либо идеи о том, почему это происходит и что я могу сделать, чтобы предотвратить это?
Конфигурация базы данных:
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => env('DB_DATABASE', database_path('database.sqlite')),
'prefix' => '',
],
'acti' => [
'driver' => env('DB_ACTI_DRIVER', 'sqlite'),
'host' => env('DB_ACTI_HOST', null),
'database' => env('DB_ACTI_DATABASE', ':memory:'),
'username' => env('DB_ACTI_USERNAME', null),
'password' => env('DB_ACTI_PASSWORD', null),
'charset' => env('DB_ACTI_CHARSET', 'utf8'),
'prefix' => env('DB_ACTI_PREFIX', ''),
'strict' => false,
'engine' => null,
],
'aspect' => [
'driver' => env('DB_ASPECT_DRIVER', 'sqlite'),
'host' => env('DB_ASPECT_HOST', null),
'database' => env('DB_ASPECT_DATABASE', ':memory:'),
'username' => env('DB_ASPECT_USERNAME', null),
'password' => env('DB_ASPECT_PASSWORD', null),
'charset' => env('DB_ASPECT_CHARSET', 'utf8'),
'prefix' => env('DB_ASPECT_PREFIX', ''),
'strict' => false,
'engine' => null,
],
'navision' => [
'driver' => env('DB_NAVISION_DRIVER', 'sqlite'),
'host' => env('DB_NAVISION_HOST', null),
'database' => env('DB_NAVISION_DATABASE', ':memory:'),
'username' => env('DB_NAVISION_USERNAME', null),
'password' => env('DB_NAVISION_PASSWORD', null),
'charset' => env('DB_NAVISION_CHARSET', 'utf8'),
'prefix' => env('DB_NAVISION_PREFIX', ''),
'strict' => false,
'engine' => null,
]
]
Код ajax выглядит следующим образом:
$.ajax({
type: 'GET',
dataType: 'json',
url: laroute.route('acti.preference.get', {
pluginName: this.plugin.name,
name: this.name
}),
success: $.proxy(function (data) {
this.updateFromApi(data.value);
if (data.value === undefined) {
this.saveToApi();
}
}, this),
error: function () {
console.log('receive error', arguments);
}
})
Стандартное соединение — ‘acti’, а .env содержит правильную информацию.
После некоторого тестирования я могу подтвердить, что метод env не всегда возвращает правильную информацию. Я вижу, что иногда вместо фактических данных в файле .env возвращается значение по умолчанию (которое является sqlite).
Комментарии:
1. Давайте посмотрим ваш ajax-код, ваш файл конфигурации .env или базы данных и, наконец, используете ли вы два приложения на одном сервере?
2. У меня много приложений Laravel на моем локальном хостинге. Но я использую только этот сейчас. Вызовы ajax выполняются с помощью стандартного метода jQuery: $.ajax() .
3. Кажется, что одновременно выполняется множество экземпляров.env-файл не может быть прочитан, и он будет использовать значение по умолчанию метода env, которым в данном случае является sqlite …
4. Вы пробовали указывать соединение в своей пользовательской модели?
protected $connection = 'acti';
5. Да, я это сделал, но, похоже, это не влияет на поведение, которое, я думаю, связано с неправильной настройкой соединения. Модель использует соединение acti, однако оно настроено как соединение sqlite (чего не должно быть)