2

我刚刚将自定义构建的 CMS 移至实时服务器(它位于开发服务器上),因为它更容易设置 RSS。问题是,尽管我更改了application.cfclocation以反映新路径,但我的关系映射都不再起作用。它也使用绝对路径。设置是这样的:

F:\...\cmsRoot\com\dac (这是原始路径)
F:\...\cmsRoot\admin\com\dac (这是新服务器上的路径。唯一的区别是admin文件夹的额外层;驱动器号相同)

Application.cfc大多数页面分别位于cmsRootcmsRoot\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()确保它正确更新。

4

1 回答 1

0

cmsRoot我找到的解决方案是通过application.mappings['\cmsRoot'] = 'F:\...\cmsRoot';在我的文件中使用将特定映射添加到文件夹Application.cfc

ormReload()我在所有文件的顶部都有一些旧电话,.cfc因为这让一些事情可以工作;通过删除这些调用,它现在可以正确加载。

于 2013-06-25T16:21:19.333 回答