我尝试通过ANT FTP自动部署小型网站。我使用Win7-64bit,开始作为一项简单的任务变得越来越挑战。
我首先想到我必须安装我做的其他课程。 commons-net-3.0.1.jar, jakarta-oro-2.0.8.jar
然后我不得不停用我的防火墙部分,我也做了。 netsh advfirewall set global StatefulFTP disable
但即使是现在也没有用。
但是,一步一步,即任务:
<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>
答案 0 :(得分: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
)就是您想要运行FTP 服务器。在你的情况下,我认为你是从Windows作为客户端连接到远程FTP服务器,所以我认为你可以撤消该命令。