Настройка выглядит следующим образом: < /p>
Веб-сайт A → его собственный .env (сайт a.env), с db websity_a. < /p>
веб-сайт b → свой собственный .env (веб-сайт b.env), с веб-сайтом db. (API-A.ENV), с DB API_A. < /p>
api b → его собственное .env (api-b.env), с db api_b. < /p>
Веб-сайты делают призывы к API. (веб-сайт a.env) Только для своей собственной логики (например, его db, пользователи, переводы). < /p>
Когда веб-сайт A делает запрос на API A, запрос должен быть получен с помощью API A, а API A должен использовать свой собственный .env (api-a.env) для подключения к своей собственной базе Batabase (API_A). A, API A должен загружать api-a.env, а не веб-сайт-b.env. (та же концепция для API b) < /p>
Другими словами: каждый проект должен использовать только свои собственные .Env и никогда не наследует настройки .env от вызывающего абонента. webse_a с помощью databaste.table format webse_a.api_keys , даже если его собственный .ENV ясно указывает на API_A .
Если веб -сайт B вызывает API A, то вместо этого применяется .Env с веб -сайта B. /> Пример ошибка: < /p>
Код: Выделить всё
SQLSTATE[42S02]: Base table or view not found: 1146 Table 'website_a.api_keys' doesn't exist
Но когда я называю API прямо в браузере (например,/api/_whoami, возвращающем db :: connection ()-> getDatabaseName ()) , он правильно показывает db api_a. /> очистить все кэши с помощью PHP Artisan Optimize: clear в каждом проекте. /> (phpinfo () показывает opcache.cache_id => no value.) < /p>
Когда я вручную запускаю каждый проект с PHP Artisan Serv -Port = xxxx < /code> в разных портах, проблема исчезает. Каждое приложение Laravel использует правильную .ENV и базу данных.
Проблема происходит только тогда, когда я позволяет Laragon /Apache обрабатывать все сайты (с HTTPS и виртуальными хостами). В этом случае API -интерфейсы, кажется, «кровоточат» конфигурация среды с веб -сайта Caller. Отсутствует для правильной изоляции средств между несколькими проектами Laravel?
Подробнее здесь: https://stackoverflow.com/questions/797 ... ple-projec