同一台服务器上的两个Laravel应用程序相互冲突

Del*_*D0D 5 php mysql environment-variables laravel laravel-5

我在同一服务器上运行2个Laravel应用程序。服务器是Apache 2.4,我设置了虚拟主机来为不同域上的每个应用程序提供服务。

第一个应用程序是一个API,它的.env文件设置如下:

APP_ENV=production
APP_KEY=YYYYYYYYYYYYYYYYYY
APP_DEBUG=false
APP_LOG_LEVEL=debug
APP_URL=https://notify.mysite.com
APP_DOMAIN=notify.mysite.com


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=notify
DB_USERNAME=YYYYYYYYYYYYYYYYYY
DB_PASSWORD=YYYYYYYYYYYYYYYYYY

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
Run Code Online (Sandbox Code Playgroud)

第二个应用程序是一个UI,其中除其他外,它利用了第一个应用程序中的API。其.env文件设置如下:

APP_ENV=local
APP_KEY=XXXXXXXXXXXXXX
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=https://asapps.mysite.com
APP_DOMAIN=asapps.mysite.com
APP_VERSION=1


DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=asapps
DB_NOTIFY_DATABASE=notify
DB_FLIGHT_DATABASE=flights
DB_USERNAME=XXXXXXXXXXXXXX
DB_PASSWORD=XXXXXXXXXXXXXX

BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
Run Code Online (Sandbox Code Playgroud)

我可以从Swagger编辑器,Postman和其他服务器向我的API发送消息,并且一切正常。

我的第二个应用程序本身也可以按预期工作。

但是,如果我的第二个应用程序向API发送请求,则API应用程序将引发以下错误:

消息为“ SQLSTATE [42S02]”的异常“ PDOException”:找不到基表或视图:1146 C:\ notify \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Connection中的表'asapps.preprocessor_config'不存在' .php:332

什么

API的数据库设置为DB_DATABASE = notify,并且当我从其他服务器发送消息时,它肯定可以正确使用该连接。那么,当我从该应用程序调用API时,为什么要尝试使用第二个应用程序的数据库连接呢?几乎就像它在缓存数据库连接并尝试继续使用该连接一样。...如何停止该连接?

表'asapps.preprocessor_config'不存在'

Del*_*D0D 4

经过更多挖掘(阅读疯狂的谷歌搜索),我在这里找到了问题和解决方案

最重要的是,当站点 A 接受请求时,php 会加载整个 http 请求长度的 .env 变量。在该请求期间,当站点 A 调用站点 B 时,由于它们位于运行相同 php 的同一服务器上,因此 php 仍然使用站点 A 中的 .env,并且根本不会单独加载站点 B 的 .env 文件。

作者更好的解释:

创建包含变量的 .env 文件,这样人们就不会将其凭据推送到 github 存储库和其他可能共享源代码的地方。

现在,作为环境变量,它们在 http 请求的整个持续时间内(在本例中是脚本执行)成为系统范围的变量。关键是你有一个长时间运行的脚本。

要找到明确的解决方案,您可以采用三种方法之一。

....

'命名空间' ENV 变量。