我在共享的Linux服务器上,我只能访问映射到〜/ public_html的http://domain.com/~username/。
我想在此上下文中使用Taffy框架进行ColdFusion。据我所知,要使用该框架,您必须有Application.cfc
扩展Taffy框架组件taffy.core.api
。
https://github.com/atuttle/Taffy
https://github.com/atuttle/Taffy/wiki/Installing-Taffy
https://github.com/atuttle/Taffy/wiki/So-you-want-to:-Create-a-dead-simple-CRUD-API
我可以访问的唯一目录不是Web根目录的子目录,因此(据我所知)不是ColdFusion路径的子集。
在我的特定情况下,我既没有访问CFADMIN,也没有服务器管理员安装我需要在系统范围内扩展的组件,它已经在路径上并可通过全局点表示法访问。
说明说你应该将太妃糖文件夹解压缩到你的web根目录中,如果你不能这样做,你应该把它作为api的子文件夹。前者不是我的可能,当我做后者时,我得到“找不到ColdFusion组件或接口taffy.core.api
。”
更多细节:
我的api位于http://domain.com/~username/api/
,所以我解压/taffy to ~/public_html/api/
。如果我将taffy/examples/api
处的Taffy示例复制到~/public_html/api
以便转到http://domain.com/~username/api/
应该访问该示例,我会“找不到ColdFusion组件或接口taffy.core.api”如果该目录下有taffy/core/api.cfc
(~/public_html/api
)。
在这台服务器上,我成功地使用<cfset THIS.mappings["/subdir"]= getDirectoryFromPath(getCurrentTemplatePath()) & "subdir/">
和<cfobject name="parentObj" component="subdir.parent">
将cfc扩展到另一个目录中。
我还成功地创建了一个Application.cfc,它在同一目录中扩展了cfc 。
我还没有成功创建一个可以在另一个目录中扩展cfc的Application.cfc,即使它是一个子目录。
我确实尝试过使用grep&amp;从Taffy的源代码中删除“taffy.core”的每个引用的相关工具,以便我可以将所有的taffy cfc与Application.cfc一起转储到我的根目录中,这样我就可以扩展api.cfc,但是我得到了不同错误,并没有进一步追求那种hacky解决方案。
<cfdump var=#expandPath('/mapping')# />
输出/var/www/html/mapping
。
uname@domain $>ls -la /var/www/html
drwxr-xr-x 3 root root 4096 Sep 16 00:34 .
drwxr-xr-x 7 root root 4096 May 28 2012 ..
lrwxrwxrwx 1 root root 19 Sep 16 00:34 cfide -> /var/www/html/CFIDE
drwxrwxr-x 10 apache root 4096 Sep 16 00:32 CFIDE
~/public_html/api/resources/successesCollection.cfc
:
<cfcomponent extends="taffy.core.resource" taffy_uri="/successes">
<cffunction name="get" access="public" output="false">
<cfreturn representationOf('success').withStatus(200) />
</cffunction>
</cfcomponent>
~/public_html/api/Application.cfc
:
<cfcomponent extends="taffy.core.api">
<!--- doesn't work
<cfset THIS.mappings["/taffy"]= getDirectoryFromPath(getCurrentTemplatePath()) & "taffy/">
<cfset THIS.mappings["/core"]= getDirectoryFromPath(getCurrentTemplatePath()) & "taffy/core/">
--->
<cfscript>
this.name = hash(getCurrentTemplatePath());
// do your onApplicationStart stuff here
function applicationStartEvent(){}
// do your onRequestStart stuff here
function requestStartEvent(){}
// this function is called after the request has been parsed and all request details are known
function onTaffyRequest(verb, cfc, requestArguments, mimeExt){
// this would be a good place for you to check API key validity and other non-resource-specific validation
return true;
}
// called when taffy is initializing or when a reload is requested
function configureTaffy(){
setDebugKey("debug");
setReloadKey("reload");
setReloadPassword("true");
// Usage of this function is entirely optional. You may omit it if you want to use the default representation class.
// Change this to a custom class to change the default for the entire API instead of overriding for every individual response.
setDefaultRepresentationClass("taffy.core.genericRepresentation");
}
</cfscript>
</cfcomponent>
http://domain.com/~uname/api/index.cfm/successes/
的输出:Could not find the ColdFusion Component or Interface taffy.core.api.
将此添加到我的Application.cfc
并不能解决问题:
<cfcomponent extends="taffy.core.api">
<cfscript>
this.name = hash(getCurrentTemplatePath());
this.mappings = StructNew();
this.mappings['/taffy'] =
expandPath('./taffy');
此外,将以下内容添加到~/public_html/api/Application.cfc
并不能解决问题:
<cfset this.mappings["/taffy"] =
expandPath(getDirectoryFromPath(getCurrentTemplatePath()) & "taffy")>
查看以下命令序列,如果我忽略了某些内容,请告诉我。浏览到“http:// domain /~uname / api”时,我仍然留下“找不到ColdFusion组件或接口taffy.core.api”。
[uname@domain ~]$ cd ~/public_html
[uname@domain ~/public_html]$ rm -rf api
[uname@domain ~/public_html/api]$ wget -O taffy.zip https://github.com/atuttle/Taffy/zipball/master
[uname@domain ~/public_html/api]$ unzip taffy.zip
[uname@domain ~/public_html/api]$ mv atuttle-Taffy-35df54e/ taffy
[uname@domain ~/public_html/api]$ mv taffy/examples/api .
[uname@domain ~/public_html/api]$ mv taffy api/
[uname@domain ~/public_html/api]$ tree -d ~/public_html/api/
~/public_html/api/
|-- resources
`-- taffy
|-- bonus
|-- core
|-- examples
| |-- ParentApplication
| | |-- config
| | |-- mixin
... etc
[uname@domain ~/public_html/api]$ ls -la ~/public_html/api/
total 8
drwxr-xr-x 4 uname ugroup 1024 Dec 9 11:00 .
drwxr-xr-x 10 uname web 1024 Dec 9 10:57 ..
-rw-r--r-- 1 uname ugroup 1188 Dec 9 11:00 Application.cfc
-rw-r--r-- 1 uname ugroup 172 Sep 20 13:04 .htaccess
-rw-r--r-- 1 uname ugroup 218 Sep 20 13:04 index.cfm
drwxr-xr-x 2 uname ugroup 1024 Sep 20 13:04 resources
drwxr-xr-x 8 uname ugroup 1024 Sep 20 13:04 taffy
[uname@domain ~/public_html/api]$ ls -la ~/public_html/api/taffy/
total 15
drwxr-xr-x 8 uname ugroup 1024 Sep 20 13:04 .
drwxr-xr-x 4 uname ugroup 1024 Dec 9 11:00 ..
drwxr-xr-x 2 uname ugroup 96 Sep 20 13:04 bonus
-rw-r--r-- 1 uname ugroup 4096 Sep 20 13:04 build.xml
drwxr-xr-x 2 uname ugroup 1024 Sep 20 13:04 core
drwxr-xr-x 15 uname ugroup 1024 Dec 9 10:57 examples
-rw-r--r-- 1 uname ugroup 99 Sep 20 13:04 .gitignore
drwxr-xr-x 2 uname ugroup 96 Sep 20 13:04 lib
-rw-r--r-- 1 uname ugroup 1356 Sep 20 13:04 LICENSE.TXT
-rw-r--r-- 1 uname ugroup 2490 Sep 20 13:04 ReadMe.md
drwxr-xr-x 3 uname ugroup 96 Sep 20 13:04 snippets
drwxr-xr-x 5 uname ugroup 1024 Sep 20 13:04 tests
[uname@domain ~/public_html/api]$ ls -la ~/public_html/api/taffy/core/
total 72
drwxr-xr-x 2 uname ugroup 1024 Sep 20 13:04 .
drwxr-xr-x 8 uname ugroup 1024 Sep 20 13:04 ..
-rw-r--r-- 1 uname ugroup 42382 Sep 20 13:04 api.cfc
-rw-r--r-- 1 uname ugroup 4574 Sep 20 13:04 baseRepresentation.cfc
-rw-r--r-- 1 uname ugroup 2572 Sep 20 13:04 dashboard.cfm
-rw-r--r-- 1 uname ugroup 1756 Sep 20 13:04 dashboard.css
-rw-r--r-- 1 uname ugroup 4538 Sep 20 13:04 docs.cfm
-rw-r--r-- 1 uname ugroup 3030 Sep 20 13:04 factory.cfc
-rw-r--r-- 1 uname ugroup 179 Sep 20 13:04 genericRepresentation.cfc
-rw-r--r-- 1 uname ugroup 3516 Sep 20 13:04 mocker.cfm
-rw-r--r-- 1 uname ugroup 389 Sep 20 13:04 nativeJsonRepresentation.cfc
-rw-r--r-- 1 uname ugroup 3765 Sep 20 13:04 resource.cfc
答案 0 :(得分:3)
你有几个选择。
由于Taffy是一个开发框架,您的系统管理员/主机可能愿意将其安装在一个中心位置供所有开发人员使用。他们可以将Taffy文件夹放在Web根目录中,或者创建一个服务器级映射到文件夹的任何位置。
应该可以从相对路径运行Taffy。听起来这是您尝试采用的方法,但您可能没有将文件放在正确的位置。
为了使用相对路径,您需要一个类似于:
的目录结构~uname/api/
~uname/api/taffy/core/api.cfc <- Framework contents
~uname/api/taffy/core/factory.cfc
~uname/api/taffy/core/dashboard.cfm
~uname/api/taffy/core/...
~uname/api/taffy/...
~uname/api/Application.cfc <- your api code
~uname/api/index.cfm
~uname/api/resources <- where you put your resource CFC's
听起来你错过了“taffy”文件夹,要么将CFC直接放在api文件夹中,要么将“core”文件夹放在api文件夹中。
需要“taffy”文件夹。想一想您将Application.cfc的extends
属性作为文件系统路径放入的点符号路径。由于它是taffy.core.api
,因此您的文件系统需要包含 taffy / core / api.cfc 。
答案 1 :(得分:2)
您是否尝试过使用相对路径代理,正如Ben Nadel在此解释的那样:http://www.bennadel.com/blog/2115-Extending-The-Application-cfc-ColdFusion-Framework-Component-With-A-Relative-Path-Proxy.htm
这个想法是你的application.cfc将扩展驻留在同一目录中的本地代理(rootProxy.cfc)。然后,该代理将包含您感兴趣的cfc。由于cfinclude采用相对路径,因此您无需担心全局点符号或映射。