2011-11-04 58 views
2

我嘗試通過ANT FTP自動部署小型站點。我使用Win7-64bit,開始是一項簡單的任務,越來越成爲一項挑戰。 我第一次發現我不得不安裝額外的課程,我做了。 commons-net-3.0.1.jar, jakarta-oro-2.0.8.jar然後我不得不關閉我的防火牆部分,我也做了。 netsh advfirewall set global StatefulFTP disable但即使現在它不工作。ANT FTP上載文件:425無法建立數據連接:連接超時

但是一步一步,那就是任務

<target name="ftp" description=""> 
<ftp server="${ftp.server}" 
    userid="${ftp.user}" 
    password="${ftp.password}" 
    verbose="yes"> 
    <fileset dir=".."> 
     <include name="maintenance.php"/> 
    </fileset> 
</ftp> 
</target> 

多數民衆贊成在結果

ftp: 
    [ftp] sending files 
    [ftp] transferring C:\xampp\htdocs\maintenance.php 

BUILD FAILED 
C:\xampp\htdocs\xdf\build.xml:32: could not put file: 425 Unable to build data con 
nection: Connection timed out 


Total time: 3 minutes 10 seconds 

到底什麼我做錯?

UPDATE發現Zend的自動同步工作的例子接縫ANT 1.8.3的新功能:

<property name="ftp.server" value="ftp.foo.bar"/> 
<property name="ftp.user" value="foor"/> 
<property name="ftp.password" value="bar"/> 
<property name="ftp.basedir" value=""/> 
<property name="ftp.verbose" value="yes"/> 

<target name="ftp-upload" description="Synchronise to FTP"> 
     <!-- Create temp folder --> 
    <tempfile prefix="ant-epp-" destdir="${java.io.tmpdir}" property="temp.file"/> 
    <mkdir dir="${temp.file}"/> 

     <!-- Move, rename, upload, delete 'maintenance.php' --> 
    <copy file="docs/hosting/maintenance.php" tofile="${temp.file}/index.php" /> 
    <ftp server="${ftp.server}" 
      userid="${ftp.user}" 
      password="${ftp.password}" 
      remotedir="${ftp.basedir}/public" 
      passive="yes" 
      binary="yes" 
      verbose="${ftp.verbose}"> 
     <fileset dir="${temp.file}"> 
      <include name="index.php" /> 
     </fileset> 
    </ftp> 
    <delete dir="${temp.file}" /> 

     <!-- Remove 'application' & Reupload --> 
    <ftp action="del" server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}" 
      remotedir="${ftp.basedir}/application" passive="yes" binary="yes" verbose="${ftp.verbose}"> 
     <fileset> 
      <include name="**" /> 
     </fileset> 
    </ftp> 
    <ftp action="rmdir" server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}" 
      remotedir="${ftp.basedir}/application" passive="yes" binary="yes" verbose="${ftp.verbose}"> 
     <fileset> 
      <include name="**" /> 
     </fileset> 
    </ftp> 
    <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}" 
      remotedir="${ftp.basedir}/application" passive="yes" binary="yes" verbose="${ftp.verbose}"> 
     <fileset dir="application" /> 
    </ftp> 

     <!-- Replace 'index.php' --> 
    <ftp server="${ftp.server}" userid="${ftp.user}" password="${ftp.password}" 
      remotedir="${ftp.basedir}/public" passive="yes" binary="yes" verbose="${ftp.verbose}"> 
     <fileset dir="public"> 
      <include name="index.php" /> 
     </fileset> 
    </ftp> 
</target> 
+1

是否可以與任何其他第三方程序進行ftp連接? – FailedDev

+0

它並沒有計劃使用別的東西,而是因爲我的挫折感,我現在想着一個PHP腳本。因爲它是一個基於PHP的項目。 – lony

+0

我同意@FailedDev,你應該嘗試獲得另一個工具的幫助文件(例如FileZilla) –

回答

6

我懷疑你仍舊有防火牆問題。

如果FTP通過防火牆,使用passive mode通常很有幫助。

許多FTP客戶端(Filezilla採取一個例子很多)默認爲被動模式。

Ant FTP Task默認爲激活模式:

被動選擇被動模式(「是」)轉移,爲了更好的 通過防火牆連接,在性能價格。默認 爲 「無」

嘗試在你的Ant FTP任務使用passive="yes"

相當不錯的解釋here

425無法建立數據連接:連接超時

試圖傳輸文件或Active列出 目錄(時會出現此錯誤PORT)模式。這個問題通常是由 切換到被動模式...

問題的解決說明:在主動模式下,數據連接 設置是這樣的:客戶端發送PORT命令告訴服務器 端口的地方將會監聽數據連接。 服務器接收到PORT命令並啓動到客戶端IP /端口的連接。但是,如果防火牆阻止傳入的連接,則它將無法應答,並且服務器將暫停 等待連接被接受。

我沒有防火牆預期,但我認爲命令你執行配置防火牆(netsh advfirewall set global StatefulFTP disable)是,如果你想在你的Windows中運行一個FTP服務器背後你會做什麼防火牆。就你而言,我認爲你是從Windows作爲客戶端連接到遠程FTP服務器,所以我認爲你可以撤消該命令。

+0

謝謝,它正在工作!所以我現在可以再次激活我的防火牆,如果我理解這種技術的正確方法? – lony

+0

很好用。我已經更新了我的回答以回答你的問題。 – sudocode

+0

即使我使用passiv模式,也需要縫'netsh advfirewall set global StatefulFTP disable'。只是爲了澄清這一點。 – lony

相關問題