繁体   English   中英

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

[英]Two Laravel applications on the same server conflicting with one another

我在同一台服务器上运行了 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

第二个应用程序是一个 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

我可以从 Swagger 编辑器、Postman 和其他服务器向我的 API 发送消息,一切都按预期工作。

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

但是,如果我的第二个应用程序向 API 发送请求,则 API 应用程序会抛出此错误:

异常 'PDOException' 与消息 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'asapps.preprocessor_config' 在 C:\\notify\\vendor\\laravel\\framework\\src\\Illuminate\\Database\\Connection 中不存在.php:332

什么?

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

表 'asapps.preprocessor_config' 不存在'

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

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

作者的更好解释:

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

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

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

....

“命名空间” ENV变量。

这更多的是评论,而不是答案,但是我没有足够的代表评论。 我遇到了类似的问题,也许可以提供帮助。

如果这两个应用程序共享任何目录,则默认情况下,laravel使用文件系统进行缓存。

如果要与两个不同的数据库连接共享代码库,请改用数据库进行缓存。 您可以使用artisan命令php artisan cache:table发布迁移以创建php artisan cache:table

然后,只需运行php artisan migrate CACHE_DRIVER并将.env文件中的CACHE_DRIVER行更改为'database'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM