我刚刚将自定义构建的 CMS 移至实时服务器(它位于开发服务器上),因为它更容易设置 RSS。问题是,尽管我更改了application.cfclocation
以反映新路径,但我的关系映射都不再起作用。它也使用绝对路径。设置是这样的:
F:\...\cmsRoot\com\dac
(这是原始路径)
F:\...\cmsRoot\admin\com\dac
(这是新服务器上的路径。唯一的区别是admin文件夹的额外层;驱动器号相同)
和Application.cfc
大多数页面分别位于cmsRoot
和cmsRoot\admin
文件夹中。这些dac
文件夹包含我的关系 CFC 文件。
最初,当第一次加载每个 cfc 时,Coldfusion 会
针对每个关系映射抛出一个错误(我将它们注释掉以确保每个都存在相同的问题)。
"Error Occurred While Processing Request
Cannot load the target CFC abc for the relation property abc in CFC xyz
在我将这一行添加<cfscript>ORMReload();</cfscript>
到每个 CFC 文件的开头之后,我可以克服这个错误并很好地访问登录页面。但是,现在每次尝试创建实体时都会出现错误:
Mapping for component abc not found.
调用它(并引发错误)的第一个实例如下所示:
objectABC = EntityToQuery(EntityLoad("abc", {ActiveInd=1}));
我已经在 stackoverflow 上搜索过任何相关问题,它通过添加 ORMReload() 调用帮助我修复了原始错误。但是,这并不能解决当前的问题。我已经更改了 CFC(在 中Application.cfc
)的映射以使用相对路径,但这也没有帮助(因为我认为这可能是一个映射问题)。我还检查了文件夹权限以确保它们匹配,因为一位用户说这解决了他们的问题。两个文件夹也具有相同的权限。
如果有帮助,这里有任何有用的Application.cfc
信息:
this.ormsettings = { cfclocation = ["F:\...\cmsRoot\admin\com\dac", "F:\...\cmsRoot\admin\com"]
, dialect="MicrosoftSQLServer"
, eventHandling = true
};
Application.cfc
我可以在两台服务器上找到的文件之间的唯一区别是文件路径。数据库设置正确,页面本身没有问题(据我所知)。
我发现的另一件事是注释掉任何关系映射会导致所有内容正确加载(减去任何 objectABC.getXYZ() 调用,因为我删除了这些属性)。
我还重新启动了 Coldfusion 应用程序服务器,但没有明显差异。
文件结构中的更远位置是否有可能Application.cfc
覆盖我设置的任何 cfclocation 设置?我不认为会是这种情况,但由于我Application.cfc
的 似乎没有任何问题,所以我没有想法。两者的 application.cfc/.cfm 查找顺序(在 CFIDE 管理员的“设置”下)是相同的;设为默认。
我也尝试删除额外的文件夹层(所以所有映射都是相同的),但错误是相同的。
更新:通过为 /cmsRoot 添加一个特定的映射(到 F:...\cmsRoot),我得到一个新的错误,即组件不是持久的。但是,我所有的 cfc 都是这样开始的:
component persistent = "true" entityName = .....
即使我以其他方式定义实体,Coldfusion 是否有理由认为实体不是持久的?是的,我曾经ormReload()
确保它正确更新。