Technologie i narzędzia: język PHP 5, Java, JavaScript, Python, system Zend Framework, Django, biblioteka jQuery, Smarty, platforma Eclipse, MySQL, SVN, CVS, UML, Firefox.
WebProgramming - wszystko o serwisach internetowych
O serwisach internetowych.
[ant|eclipse] Kopiowanie plików na konta FTP.
Tworząc serwis najczęściej pracujemy na lokalnym serwerze www/mysql - dzięki czemu dużo szybciej możemy zobaczyć rezultat naszej pracy (w 99% przypadków wystarczy odświeżyć stronę ;)). Wcześniej, czy później jednak musimy wrzucić wynik naszej ciężkej pracy na serwer FTP (np klienta) - jeżeli to jest po raz pierwszy to nie ma większego problemu - uruchamiamy klienta FTP i kopiujemy pliki. Problem jednak zaczyna się, gdy musimy wdrażać kolejne poprawki. Jak sobie z tym poradzić?
Teoretycznie możemy zrobić tak jak za pierwszym razem - za pomocą klienta FTP wrzucamy cały serwis albo wrzucamy tylko te pliki, które zmieniliśmy. Żadne z tych rozwiązań nie jest wg mnie satysfakcjonujące, ponieważ oba są dość uciążliwe. W pierwszym przypadku kopiowanie całego serwisu jest powolne (przy nawet najdrobniejsze zmianie byśmy musieli wrzucać cały serwis/cały katalog), w drugim natomiast z jednej strony bardzo łatwo pominąć jakiś plik (jest bardzo błednogenne) a z drugiej strony musimy pamiętać (albo ręcznie sprawdzać) jakie pliki zmienialiśmy.
Idealnym rozwiązaniem byłoby “coś”, co pamięta kiedy ostatnio wrzucałem pliki na serwer FTP i przy następnej aktualizacji kopiował tylko te najnowsze. W moim przypadku tym “czymś” jest skrypt biblioteki Ant, biblioteki (zaimplementowanej w języku Java) umożliwiającej tworzenie skryptów w plikach XML realizujących pewne określone zadania (coś w stylu makefile). Więcej informacji na jej temat można przeczytać na stronie producenta Apache Ant.
Przykładowy skrypt wygląda mniej więcej tak (plik o nazwie build.xml):
-
<?xml version="1.0" encoding="utf-8"?>
-
<project name="NazwaProjektu" basedir="." default="ftp">
-
<!– Zadanie kopiujące pliki zmieniane od ostatniego kopiowania –>
-
<target name="ftp">
-
<!– Załaduj plik zawierający datę ostatniego aktualizacji konta FTP –>
-
<loadproperties srcFile="timestamp.dat" />
-
<!– Wyświetl tą datę (informacyjnie) –>
-
<echo message="${timestamp}" />
-
<!– Skopiuj pliki na konto FTP –>
-
<ftp password="…" server="…" userid="…" remotedir="/" binary="no" passive="yes">
-
<!– Wybierz tylko wybrane katalogi oraz pliki –>
-
<fileset dir=".">
-
<!– Z katalogu application pobierz tylko pliki php –>
-
<include name="application/**/*.php" />
-
<!– Z katalogu www pobierz wszystkie pliki (również w podkatalogach) –>
-
<include name="www/**/*.*" />
-
<!– Ale tylko te które zostały zmienione po odpowiedniej dacie –>
-
<date datetime="${timestamp}" when="after" />
-
</fileset>
-
</ftp>
-
<!– Zapisz aktualny czas –>
-
<propertyfile file="timestamp.dat" comment="Upload timestamp">
-
<entry key="timestamp" type="date" value="now" pattern="MM/dd/yyyy hh:mm aa"/>
-
</propertyfile>
-
</target>
-
</project>
Jak widać w/w skrypt jest dość czytelny i prosty w związku z czym nie będę się nad nim rozwodzić
Idea jest natomiast następująca: pobierz datę ostatniej aktualizacji (linia #6), pobierz pliki (tylko z odpowiednich katalogów) zmieniane od ostatniej aktualizacji (linie #12-19), skopiuj na serwer FTP (linia #10), zapisz aktualną datę jako czas ostatniej aktualizacji (linia #22-24).
Jeszcze lepszym rozwiązaniem byłby kopiowanie plików bezpośrednio z serwera SVN (zakładając, że korzystacie z niego) - niestety nie każdy może sobie na takie rozwiązanie pozwolić, więc trzeba sobie radzić inaczej.
PS. Zalecam korzystanie z platformy Eclipse PDT, która ma wbudowaną obsługę skryptów Ant ![]()
Napisz komentarz