1

私は共有 Linux サーバーを使用しており、~/public_html にマップされるhttp://domain.com/~username/にしかアクセスできません。

このコンテキストでは、ColdFusion の Taffy フレームワークを使用したいと考えています。私が知る限り、フレームワークを使用するに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 にアクセスすることも、サーバー管理者がシステム全体のコンテキストで拡張する必要があるコンポーネントをインストールすることもありません。コンポーネントは既にパス上にあり、グローバル ドット表記を介してアクセスできます。

指示によると、taffy フォルダーを Web ルートに解凍する必要があります。それができない場合は、それを API のサブフォルダーにする必要があります。前者は私には可能性がなく、後者を行うと「ColdFusion コンポーネントまたはインターフェイスが見つかりませんでしtaffy.core.apiた 」というメッセージが表示されます。

詳細: 私の api は にhttp://domain.com/~username/api/あるので、解凍し/taffy to ~/public_html/api/ました。Taffy の例を にコピーして、taffy/examples/apiが例にアクセスできる~/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/">このサーバーでは、とを使用して、別のディレクトリの cfc を拡張する cfc を作成することに成功しました<cfobject name="parentObj" component="subdir.parent">

また、同じディレクトリ内のcfc を拡張する Application.cfc の作成にも成功しました。

サブディレクトリであっても、別のディレクトリで cfc を拡張できる Application.cfc を作成できませんでした。

grep と関連ツールを使用して、Taffy のソース コードから「taffy.core」のすべての参照を削除しようとしたので、すべての taffy cfc を Application.cfc と共にルート ディレクトリにダンプして、api.cfc を拡張することができました。しかし、別のエラーが発生したため、そのハッキーなソリューションをそれ以上追求しませんでした。

<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
4

2 に答える 2

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が含まれている必要があります。

于 2012-12-09T14:33:59.103 に答える
2

Ben Nadelがここで説明しているように、相対パス プロキシを使用してみましたか。 -Proxy.htm

application.cfc は、同じディレクトリにあるローカル プロキシ (rootProxy.cfc) を拡張するという考えです。そのプロキシは、関心のある cfc を cfinclude します。cfinclude は相対パスを取るため、グローバルなドット表記やマッピングについて心配する必要はありません。

于 2012-12-13T16:53:08.523 に答える