Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 同一服务器上的两个Laravel应用程序相互冲突_Php_Mysql_Laravel_Laravel 5_Environment Variables - Fatal编程技术网

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

Php 同一服务器上的两个Laravel应用程序相互冲突,php,mysql,laravel,laravel-5,environment-variables,Php,Mysql,Laravel,Laravel 5,Environment Variables,我有两个Laravel应用程序在同一台服务器上运行。服务器是Apache2.4,我已经设置了vHost来为不同域上的每个应用程序提供服务 第一个应用程序是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_CONNE

我有两个Laravel应用程序在同一台服务器上运行。服务器是Apache2.4,我已经设置了vHost来为不同域上的每个应用程序提供服务

第一个应用程序是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
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
第二个应用程序是一个UI,除其他外,它利用来自第一个应用程序的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
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
我可以从我的大摇大摆的编辑器、邮递员和其他服务器向我的API发送消息,一切都按预期进行

我的第二个应用程序本身也可以正常工作

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

异常“PDOException”,消息为“SQLSTATE[42S02]:未找到基表或视图:1146表”asapps.preprocessor_config“不存在” 在C:\notify\vendor\laravel\framework\src\illumb\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请求期间(在本例中为脚本执行)变为系统范围的变量。关键是你有一个长期运行的脚本

要找到一个明确的解决方案,你可以选择以下三种方法之一

“namespace”指定环境变量


更改config/database.php将第二个应用程序中的DB_数据库更改为DB_DATABASE2,并更新.env文件以引用DB_DATABASE2,看看这是否解决了您的问题。@SariYono相同的问题:(这是一个很好的观点,我最后得到的解决方案是使用不同的服务器实例,在开发中,我在不同的服务器上使用了
php artisan Service
)ports@Musa如果使用apache,还可以在vhost声明中直接为每台服务器声明所有env变量。