ANT FTP-файл загрузки: 425 Невозможно установить соединение для передачи данных: тайм-аут соединения - PullRequest
2 голосов
/ 05 ноября 2011

Я пытаюсь автоматизировать развертывание небольшого сайта через 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

Что, черт возьми, я сделал не так?

ОБНОВЛЕНИЕ нашел рабочий пример для швов автоматической синхронизации 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 Ответ

6 голосов
/ 07 ноября 2011

Я подозреваю, что проблема с брандмауэром сохраняется.

Если FTP проходит через брандмауэр, обычно полезно использовать пассивный режим .

Многие клиенты FTP(Filezilla - один из множества примеров) по умолчанию в пассивном режиме.

Задача Ant FTP по умолчанию в активном режиме:

пассивный выбирает передачи в пассивном режиме («да») для лучшего соединения через межсетевой экран за счет производительности.По умолчанию "no"

Попробуйте использовать passive="yes" в своей задаче Ant FTP.

Довольно хорошее объяснение здесь :

425 Невозможно построить соединение для передачи данных: Тайм-аут соединения

Эта ошибка может возникать при попытке передать файл или отобразить каталог в режиме Active (PORT).Проблема обычно решается переключением в пассивный режим ...

Объяснение проблемы: в активном режиме подключение для передачи данных настроено так: клиент отправляет команду PORT, сообщая серверу порт, где он будетприслушиваться к соединению данных.Сервер получает команду PORT и инициирует соединение с IP / портом клиента.Однако, если брандмауэр блокирует входящее соединение, оно останется без ответа, и сервер перестанет ждать, пока соединение не будет принято.

Я не ожидаю брандмауэр, но я думайте , что команда, которую вы выполнили для настройки брандмауэра (netsh advfirewall set global StatefulFTP disable), - это то, что вы сделали бы, если бы вы хотели запустить сервер FTP на вашем компьютере Windows за брандмауэром.В вашем случае я думаю, что вы подключаетесь из Windows как клиент к удаленному FTP-серверу, поэтому я думаю, что вы можете отменить эту команду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...