【问题标题】:Error on renaming application when trying to share session between ColdFusion / ColdBox applications尝试在 ColdFusion / ColdBox 应用程序之间共享会话时重命名应用程序时出错
【发布时间】:2018-05-07 23:39:24
【问题描述】:

我希望在驻留在不同子域(同一服务器)上的一些应用程序之间共享会话数据。过去,我会确保每个应用程序在其各自的 application.cfc 中具有相同的名称。这已经有一段时间了——人们在一个应用程序上登录;会话与其他人共享。

现在我们希望将这些应用程序之一转换为 ColdBox。所以我在我的开发机器上设置了在 ACF 2016 上运行的 ColdBox 4。从

更改默认的 Coldbox 应用程序名称
this.name = hash( getCurrentTemplatePath() ); 

this.name = 'mysite;'

在开发机器上运行良好,没有问题。但是,只要我将相同的代码上传到生产环境(也是 ACF 2016),我就会收到以下错误:

Element CBBOOTSTRAP is undefined in a Java object of type class [Ljava.lang.String;. 

The error occurred in application.cfc: line 50

48 :    public boolean function onRequestStart( string targetPage ){
49 :        // Process ColdBox Request
50 :        application.cbBootstrap.onRequestStart( arguments.targetPage );
51 : 
52 :        return true;

只要我将应用程序名称改回

this.name = hash( getCurrentTemplatePath() ); 

应用程序运行良好,没有错误(但会话未共享)。我认为关于第 50 行的信息可能是一条红鲱鱼。我在那里尝试了各种修改,但除了将应用程序名称更改回原来的名称外,没有任何改变原始错误消息。

我在 CF 管理员中取消选中组件缓存并重新启动(多次)无济于事。我对 ColdBox 的了解还不够,无法猜测可能会发生什么,但我完全被难住了。我不知道为什么它可以在一台机器上的 ACF 2016 上工作,但不能在另一台机器上工作。如果有人有任何线索,我将不胜感激!非常感谢!

【问题讨论】:

  • 你试过把this.name = 'mysite;'改成this.name = 'mysite';
  • 令我惊讶的是,它以前有效,而不是现在无效。如果我必须这样做,我会使用服务器范围(仍然不是很好)或两个应用程序都可以访问的缓存(即 Redis)。该错误告诉您,Coldbox 没有在它正在查找的应用程序范围内引导;这发生在 ApplicationStart 上。
  • 嗨,詹姆斯,抱歉,我在帖子中打错了字。它确实是“我的网站”;在 application.cfc 中。不过很好抓!谢谢!

标签: coldfusion coldbox


【解决方案1】:

Element CBBOOTSTRAP is undefined

您在本地开发人员中没有看到此问题的原因是您总是先启动 CB 应用程序,因此在启动非 CB 应用程序之前在应用程序范围内定义 CBBOOTSTRAP。在您的其他环境中,非 CB 应用程序首先启动,因此该值尚未定义。

停下来,做这个

几年前我也遇到过同样的问题,试图让 CB 和非 CB 应用一起玩得很好。 IIRC,我们必须在两者之间创建共享应用程序变量的包含,并将 CFM 包含到两个应用程序中,以便在更新任何一组变量时我们只需要编辑一个文件。

一旦您采用这种方法,尝试共享会话可能会奏效。如果没有,我们最终还在 CB 和非 CB 应用程序之间创建了 SSO 登录,因此我们可以在两者之间登录。

【讨论】:

  • 谢谢你,阿德里安。我一直在阅读有关在 webroot 之外拥有主 ColdBox 目录的信息。由于这些应用程序都位于不同的子域(app1.domain.com、app2.domain.com 等)上,如果我将 ColdBox 目录移动到 C:\,则在此处定义一个“主”应用程序名称,然后从中删除应用程序名称应用程序的所有application.cfcs,然后将master扩展到所有应用程序,以便它们继承一个应用程序名称,这种方法有优点吗?我问是因为如果它不太可能工作,我宁愿不要在生产中尝试它。提前致谢!
  • 我刚才写的可能没有多大意义!对不起!我的意思是,找到一种方法,不要让各个应用程序在各自的 application.cfcs 中命名自己,而是从某个规则的 application.cfc 或其他机制继承或以其他方式“获取”主应用程序名称。希望这有助于澄清!
  • 我会担心这种方法的一件事是同名的应用程序范围变量之间的冲突。就像在appOne 中,你有applicaiton.foo = x 和在appTwo 中,你有applicaiton.foo = y。您必须重构这些应用程序以引用不同的应用程序范围变量列表。 myNewApp 现在将具有 application.foo = xapplicaiton.bar = y,其中 appTwo 的代码将更新为使用 application.bar
  • 阿德里安说得好!我想我只需要想出一种完全不同的方法——我不明白为什么将我自己的“自定义”应用程序名称分配给 ColdBox 应用程序会如此困难!我什至尝试编辑引导文件,但无济于事——无论我做什么,它都会在同一行出现相同的错误。看来“this.name = hash(getCurrentTemplatePath());”不能以任何方式改变。没有多大意义!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-13
  • 2012-11-17
  • 2013-02-15
  • 2014-09-30
  • 2023-03-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多