0

私は Contribute の File Deployer ツールをしばらく使用してきましたが、ファイルのプッシュ先のサーバーを交換するまではうまく機能していました。ファイルを単独でプッシュすることは、許可などすべて正常に機能します。しかし、主な機能の一部は、ファイルがプッシュされているディレクトリをスキャンし、存在しない場合はそのディレクトリを作成することです。

現在のところ、ツールのこの部分で常に失敗しています。プッシュされるファイルのフル パスの形式は次のとおりです\\\x.x.x.x\sync$\path/to/folder(混合スラッシュは常に機能します)。

これは、ColdFusion 8 を搭載した Windows XP sp3 にあります。

<cftry>
            <cfinvoke method="MakeSurePathExists" path="#serverPathToPush##siteRelative#">
            <cfcatch type="any">
                <cfthrow errorcode="NoLiveServerAccess" message="Can not access or do not have sufficient permissions to write to: #serverPathToPush##siteRelative#">
                <cflog application="yes" text="Can not access or do not have sufficient permissions to write to: #serverPathToPush##siteRelative#" file="Filedeployer" />
            </cfcatch>
        </cftry>

    <cffile action="copy" source="#settings.stagingFileSystemPath & siteRelative#" destination="#serverPathToPush##siteRelative#">
    <!--- touch the file so it gets the current date, so the browser will pull down the new one when previewed --->
    <cffile action="append" file="#serverPathToPush##siteRelative#" output="">

<!--- This function checks if the directory exist of the given file.
         If it doesn't, it tries to build path. If it fails, the function throws --->
    <cffunction name="MakeSurePathExists">
        <cfargument name="path" type="string" required="true">

        <cfset createList = ArrayNew(1)>
        <cfinvoke method="RemoveLastFileFromPath" path="#path#" returnvariable="parentdir">

        <cfloop condition="not DirectoryExists( parentDir ) and Len( parentDir ) gt 0 ">
            <cfset temp = ArrayAppend( createList, parentDir ) >
            <cfinvoke method="RemoveLastFileFromPath" path="parentdir" returnvariable="parentdir">
        </cfloop>

        <cfloop from="#ArrayLen( createList )#" to="1" step="-1" index="index">
            <cfdirectory action="create" directory="#createList[index]#">
        </cfloop>
    </cffunction>

    <cfscript>

        function RemoveLastFileFromPath( path )
        {
            rpath = Reverse( path ) ;
            idx2 = Find( "\", rpath ) ;
            idx = Find( "/", rpath ) ;
            if( idx2 is not "0" and idx2 lt idx )
                idx = idx2 ;
            if( idx is not "0" ) {
                rpath = Right( rpath, Len(rpath) - idx ) ;
                return Reverse( rpath ) ;
            }
            return "" ;
        }
    </cfscript>

私が得るフレンドリーなエラーは次のとおりです。

次の場所にアクセスできないか、十分な書き込み権限がありません: \xxxx\sync$\ path/to/folder/the-file.cfm

CFDUMP のエラー:

このエラーの原因として最も可能性が高いのは、ファイル システムに \xxxx\sync$\ path/to/folder/ が既に存在することです。cfdirectory action="create" 中に例外が発生しました。

共有 URL の末尾と相対パスの間にスペースがあることは承知しています。繰り返しますが、これは以前は問題ではありませんでした。現在もそうであるかどうかはわかりません。

4

1 に答える 1

1

この場合、URLのスペースがプッシュに影響を与えていることがわかります。サーバーアドレスの周りにtrim()を追加する必要がありましたが、これで問題は解決しました。しかし、なぜそれが今だけの問題であり、私が決して知る前ではないのか。

于 2012-08-09T19:57:59.327 に答える