मैं एएनटी एफ़टीपी के माध्यम से एक छोटी सी साइट की तैनाती को स्वचालित करने का प्रयास करता हूं। मैं 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 उत्तर
मुझे संदेह है कि आपके पास अभी भी फ़ायरवॉल समस्या है।
जहां FTP फ़ायरवॉल से होकर गुजरता है, वहां आमतौर पर निष्क्रिय मोड का उपयोग करना सहायक होता है।
कई एफ़टीपी क्लाइंट (फाइलज़िला कई का एक उदाहरण लेने के लिए) निष्क्रिय मोड में डिफ़ॉल्ट हैं।
Ant FTP टास्क डिफॉल्ट रूप से सक्रिय मोड में आ जाता है:
निष्क्रिय बेहतर के लिए, पैसिव-मोड ("हां") स्थानान्तरण का चयन करता है थ्रू-फ़ायरवॉल कनेक्टिविटी, प्रदर्शन की कीमत पर। चूक करने के लिए "नहीं"
अपने चींटी एफ़टीपी कार्य में passive="yes"
का उपयोग करने का प्रयास करें।
काफी अच्छी व्याख्या यहां:
425 डेटा कनेक्शन बनाने में असमर्थ: कनेक्शन का समय समाप्त हो गया
यह त्रुटि तब हो सकती है जब किसी फ़ाइल को स्थानांतरित करने या सक्रिय (पोर्ट) मोड में किसी निर्देशिका को सूचीबद्ध करने का प्रयास किया जा रहा हो। समस्या आमतौर पर निष्क्रिय मोड पर स्विच करके हल की जाती है ...
समस्या की व्याख्या: सक्रिय मोड में, डेटा कनेक्शन इस तरह सेटअप होता है: क्लाइंट एक पोर्ट कमांड भेजता है जो सर्वर को बताता है कि वह डेटा कनेक्शन के लिए कहां सुन रहा होगा। सर्वर पोर्ट कमांड प्राप्त करता है और क्लाइंट के आईपी/पोर्ट से कनेक्शन शुरू करता है। हालांकि, अगर फ़ायरवॉल आने वाले कनेक्शन को अवरुद्ध कर रहा है, तो यह अनुत्तरित हो जाएगा, और सर्वर कनेक्शन के स्वीकार किए जाने की प्रतीक्षा में समय समाप्त कर देगा।
मुझे कोई फ़ायरवॉल अपेक्षित नहीं है, लेकिन मैं सोचता हूँ कि आपने अपने फ़ायरवॉल (netsh advfirewall set global StatefulFTP disable
) को कॉन्फ़िगर करने के लिए जो आदेश निष्पादित किया है, यदि आप एक FTP सर्वर< चलाना चाहते हैं तो आप क्या करेंगे? /em> फ़ायरवॉल के पीछे आपके विंडोज़ बॉक्स पर। आपके मामले में, मुझे लगता है कि आप विंडोज से क्लाइंट के रूप में रिमोट एफ़टीपी सर्वर से कनेक्ट हो रहे हैं, इसलिए मुझे लगता है कि आप उस कमांड को पूर्ववत कर सकते हैं।
netsh advfirewall set global StatefulFTP disable
की जरूरत है। बस इसे साफ करने के लिए।