我有以下目录结构:
| 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”目录但找不到它。
我认为这个问题可以通过映射来解决,所以我去了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:\一些\文件夹\ SITES_FOLDER \ WEBSITE1 | WEBSITE_CFC \ ShoppingCart.cfc
换句话说,它一直在错误的目录中寻找它。
为什么?
答案 0 :(得分:1)
如果您要将文件更改为/ CFC_DIR但它仍在使用/ WEBSITE_CFC,则听起来需要清除缓存。
清除缓存可以在ColdFusion Administrator中手动完成。登录后,“服务器设置”中的第三项是“缓存”。滚动到页面底部,按钮可清除缓存。
出于开发目的,您可能需要考虑完全禁用此页面上的各种缓存选项 - 它们对于实时服务器的性能改进很有用,但通常是开发计算机上不必要的障碍。
如果您有自动部署,则不必在远程服务器上登录CF Admin并按下按钮。幸运的是,您还可以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。)
可以在http://www.cfexecute.com/admin-api-documentation/runtime-cfc/
找到Admin Runtime组件的API