【问题标题】:Cannot get mappings to work无法使映射工作
【发布时间】:2013-01-26 23:17:15
【问题描述】:

我的目录结构如下:

| SITES_FOLDER

    |___ WEBSITE1

        |___ WEBSITE_CFC

    |___ CFC_DIR

WEBSITE1 包含一个Application.cfc 和一些页面。然后我在 WEBSITE_CFC 目录中有一个组件 ShoppingCart.cfc 在会话开始时使用此代码实例化:

createObject("component","WEBSITE_CFC.ShoppingCart").Init() />      

这行得通。

现在我将 ShoppingCart.cfc 移动到 CFC_DIR 目录并将我的实例化代码更改为:

createObject("component","CFC_DIR.ShoppingCart").Init() />      

显然这不起作用,因为 ColdFusion 在根目录“WEBSITE1”下搜索“CFC_DIR”目录并没有找到。

我认为使用 ma​​ppings 可以解决这个问题,所以我去找 CFIDE 管理员。服务器设置 > 映射。

Logical path: "CFC_DIR"

Directory path: "C:\some\folders\SITES_FOLDER\CFC_DIR"

运气不好。于是我在 Application.cfc 中尝试了:

<cfset THIS.mappings["/CFC_DIR"] = "C:\some\folders\SITES_FOLDER\CFC_DIR" />

这也不起作用!

编辑:

也许我明白:如果我尝试从 cfm 模板创建 CFC,它可以工作。

当我尝试在 OnSessionStart Application.cfc 的方法中创建它时出现错误:

确保名称正确且组件或接口 存在。消息找不到 ColdFusion 组件或接口 C:\some\folders\SITES_FOLDER\WEBSITE1|WEBSITE_CFC\ShoppingCart.cfc。

换句话说,它一直在错误的目录中寻找它。

为什么?

【问题讨论】:

  • 当你说它不起作用时,你能详细说明你的意思吗?发布确切的错误消息。我这么说是因为根据您告诉我们的内容,它应该都能正常工作,所以有些事情您没有告诉我们。我们需要弄清楚那是什么。
  • 您的映射服务器设置应该可以正常工作,除非发生了其他奇怪的事情。尝试实例化对象时遇到什么错误?
  • “错误” - 什么错误?
  • cf admin 中的可信缓存。如果您将文件更改为 /CFC_DIR 但它仍在使用 /WEBSITE_CFC 听起来缓存需要清除。
  • 这是组件缓存,它保留了错误的绝对路径缓存。谢谢你们。 @PeterBoughton:添加它作为答案,我会接受它,你会在声誉中成长:)

标签: coldfusion mapping coldfusion-10


【解决方案1】:

如果您将文件更改为 /CFC_DIR 但它仍在使用 /WEBSITE_CFC,听起来缓存需要清除。

在 CF Admin 中清除缓存

可以在 ColdFusion Administrator 中手动清除缓存。登录后,“服务器设置”中的第三项是“缓存”。滚动到页面底部找到清除缓存的按钮。

出于开发目的,您可能需要考虑完全禁用此页面上的各种缓存选项 - 它们对于提高实时服务器的性能很有用,但通常对您的开发机器来说是不必要的障碍。

以编程方式清除缓存

如果您有自动部署,您不希望必须登录到远程服务器上的 CF 管理员并按下按钮。还好你也可以clear the cache programmatically

<cfscript>
    createObject("Component", "cfide.adminapi.administrator")
        .login("**replace with admin password**");

    RuntimeService = createObject("component", "cfide.adminapi.runtime");

    // Clear whole cache:
    RuntimeService.clearTrustedCache();

    // Clear cache for individual files:
    RuntimeService.clearTrustedCache("/path/to/file1.cfm,/path/to/file2.cfm");

    // Clear component cache:
    RuntimeService.clearComponentCache();
</cfscript>

(代码改编自Charlie's blog entry。)

Admin Runtime 组件的 API 可以在http://www.cfexecute.com/admin-api-documentation/runtime-cfc/找到

【讨论】:

  • 在我的情况下,它是“组件缓存”,谢谢,但是你让我朝着正确的方向前进
  • 是的,目前还不清楚 CF 缓存之间的界限在哪里 - 组件缓存的描述意味着它只是 CFC 被缓存的路径,因此不应该影响内容。 *耸耸肩*如果有疑问,请清除所有缓存。 :) 我已经更新了答案以包含 clearComponentCache API 方法。
  • 这篇文章对我很有帮助。我在网上苦苦挣扎了好几个小时,为什么我的应用程序不会初始化休息。非常感谢@PeterBoughton
猜你喜欢
  • 1970-01-01
  • 2018-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多