मैं एएनटी एफ़टीपी के माध्यम से एक छोटी सी साइट की तैनाती को स्वचालित करने का प्रयास करता हूं। मैं 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>
2
lony 5 नवम्बर 2011, 01:14
1
क्या किसी अन्य तृतीय पक्ष कार्यक्रम के साथ FTP कनेक्शन संभव है?
 – 
FailedDev
5 नवम्बर 2011, 02:37
यह किसी और चीज का उपयोग करने की योजना नहीं थी, लेकिन मेरी निराशा के स्तर के कारण अब मैं एक PHP स्क्रिप्ट के बारे में सोचता हूं। क्योंकि यह एक PHP बेस्ड प्रोजेक्ट है।
 – 
lony
5 नवम्बर 2011, 21:52
मैं @FailedDev से सहमत हूं, आपको किसी अन्य टूल की मदद से फ़ाइल प्राप्त करने का प्रयास करना चाहिए (उदाहरण के लिए FileZilla)
 – 
Alex K
6 नवम्बर 2011, 01:39
FailDev ने जो कहा वह समस्या को हल करने के लिए एक शास्त्रीय दृष्टिकोण है। चूंकि एंट में आपका एफ़टीपी कार्य काम नहीं करता है, इसलिए आपको जांचना चाहिए कि अन्य एफ़टीपी सॉफ्टवेयर काम करते हैं या नहीं। यदि वे काम करते हैं, तो चींटी और एफ़टीपी के बीच अंतर की जांच करने का प्रयास करें (जैसे कि आपका फ़ायरवॉल उनके साथ कैसा व्यवहार करता है)।
 – 
coolcfan
7 नवम्बर 2011, 05:52
धन्यवाद दोस्तों, मैंने पहले ही कोशिश कर ली है कि WinSCP एक आकर्षण की तरह काम करता है और मेरा दूसरा दृष्टिकोण stackoverflow.com/questions/8022431/… एक निश्चित बिंदु तक काम करता है। तो यह एक gernerel FTP समस्या नहीं है। इसे एएनटी या सिस्टम के साथ करना है।
 – 
lony
7 नवम्बर 2011, 13:16

1 उत्तर

सबसे बढ़िया उत्तर

मुझे संदेह है कि आपके पास अभी भी फ़ायरवॉल समस्या है।

जहां FTP फ़ायरवॉल से होकर गुजरता है, वहां आमतौर पर निष्क्रिय मोड का उपयोग करना सहायक होता है।

कई एफ़टीपी क्लाइंट (फाइलज़िला कई का एक उदाहरण लेने के लिए) निष्क्रिय मोड में डिफ़ॉल्ट हैं।

Ant FTP टास्क डिफॉल्ट रूप से सक्रिय मोड में आ जाता है:

निष्क्रिय बेहतर के लिए, पैसिव-मोड ("हां") स्थानान्तरण का चयन करता है थ्रू-फ़ायरवॉल कनेक्टिविटी, प्रदर्शन की कीमत पर। चूक करने के लिए "नहीं"

अपने चींटी एफ़टीपी कार्य में passive="yes" का उपयोग करने का प्रयास करें।

काफी अच्छी व्याख्या यहां:

425 डेटा कनेक्शन बनाने में असमर्थ: कनेक्शन का समय समाप्त हो गया

यह त्रुटि तब हो सकती है जब किसी फ़ाइल को स्थानांतरित करने या सक्रिय (पोर्ट) मोड में किसी निर्देशिका को सूचीबद्ध करने का प्रयास किया जा रहा हो। समस्या आमतौर पर निष्क्रिय मोड पर स्विच करके हल की जाती है ...

समस्या की व्याख्या: सक्रिय मोड में, डेटा कनेक्शन इस तरह सेटअप होता है: क्लाइंट एक पोर्ट कमांड भेजता है जो सर्वर को बताता है कि वह डेटा कनेक्शन के लिए कहां सुन रहा होगा। सर्वर पोर्ट कमांड प्राप्त करता है और क्लाइंट के आईपी/पोर्ट से कनेक्शन शुरू करता है। हालांकि, अगर फ़ायरवॉल आने वाले कनेक्शन को अवरुद्ध कर रहा है, तो यह अनुत्तरित हो जाएगा, और सर्वर कनेक्शन के स्वीकार किए जाने की प्रतीक्षा में समय समाप्त कर देगा।

मुझे कोई फ़ायरवॉल अपेक्षित नहीं है, लेकिन मैं सोचता हूँ कि आपने अपने फ़ायरवॉल (netsh advfirewall set global StatefulFTP disable) को कॉन्फ़िगर करने के लिए जो आदेश निष्पादित किया है, यदि आप एक FTP सर्वर< चलाना चाहते हैं तो आप क्या करेंगे? /em> फ़ायरवॉल के पीछे आपके विंडोज़ बॉक्स पर। आपके मामले में, मुझे लगता है कि आप विंडोज से क्लाइंट के रूप में रिमोट एफ़टीपी सर्वर से कनेक्ट हो रहे हैं, इसलिए मुझे लगता है कि आप उस कमांड को पूर्ववत कर सकते हैं।

7
sudocode 8 नवम्बर 2011, 17:05
धन्यवाद, यह काम कर रहा है! तो अगर मैं तकनीक को सही तरीके से समझूं तो अब मैं अपने फ़ायरवॉल को फिर से सक्रिय कर सकता हूं?
 – 
lony
8 नवम्बर 2011, 16:42
खुशी है कि यह काम करता है। मैंने आपके प्रश्न के उत्तर में अपना उत्तर अपडेट कर दिया है।
 – 
sudocode
8 नवम्बर 2011, 17:05
अगर मैं पैसिव मोड का उपयोग करता हूं तो भी यह सीम netsh advfirewall set global StatefulFTP disable की जरूरत है। बस इसे साफ करने के लिए।
 – 
lony
8 नवम्बर 2011, 20:43