我正在使用IIS在同一台服务器上设置两个ColdFusion站点(比如“站点A”和“站点B”)。两个站点都具有相同的源代码,但URL和数据源不同。 “站点A”使用数据库DB1,“站点B”使用DB2。
问题是,有时我注意到“站点B”使用的是DB1而不是DB2。此问题不会每次都出现。例如,如果我按页面10次,大约7次使用正确的数据库,3次使用错误的数据库。此问题不适用于“网站A”,仅适用于“网站B”。
我尝试了很多解决方案,比如重新创建数据源,在每一步上转储数据库,但没有找到确切的原因。还有其他人面临这个问题吗?我需要更新ColdFusion吗?
答案 0 :(得分:4)
(扩展自评论......)
首先猜测代码中的某些东西是指向错误的地方。 您如何引用CF代码中的数据源(Application.cfc中的数据源设置)? 2个Application.cfc文件是否具有不同的应用程序名称?他们应该。否则,两个应用程序将共享相同的设置。由于Application.cfc在每个请求开始时执行,因此多个线程可以同时读取和写入共享数据源设置,从而产生race conditions。
示例:
"约翰"请求 SiteA 中的页面。 SiteA的Application.cfc执行。应用程序数据源设置为 DatasourceA ;
component {
this.name = "MyApplication";
this.datasource = "DatasourceA";
}
与此同时," Mike"请求 SiteB 中的页面。 SiteB的Application.cfc执行。应用程序数据源更改为 DatasourceB
component {
this.name = "MyApplication";
this.datasource = "DatasourceB";
}
然后John在 SiteA 上的请求会运行查询。由于应用程序数据源现在是 DatasourceB ,因此请求会查询错误的数据库。
解决方案是在Application.cfc中使用不同的应用程序名称。