2011-10-11 29 views
5

Tôi đang sử dụng Phing và ngay bây giờ tôi đang sử dụng mã này để tải lên tập tin của tôi để FTP:Phing - Triển khai với FTP nhưng chỉ ghi đè lên khi kích thước đã thay đổi

<target name="ftp.upload"> 
    <echo>Uploading files to FTP</echo> 
    <ftpdeploy 
     host="${ftp.destination.host}" 
     port="${ftp.destination.port}" 
     username="${ftp.destination.username}" 
     password="${ftp.destination.password}" 
     dir="${ftp.destination.dir}" 
     mode="${ftp.destination.mode}"> 
     <fileset refid="TheFiles" /> 
    </ftpdeploy> 
    <echo>FTP Upload Finished!</echo> 
</target> 

Phải mất một thời gian dài để tải, và Tôi có rất nhiều hình ảnh - vì vậy mỗi lần tôi thực hiện thay đổi văn bản nhỏ, tôi không muốn nó tải lên lại mọi thứ. Có cách nào để phát hiện tệp nào đã bị thay đổi và chỉ tải lên những tệp đó không?

Cảm ơn!

Trả lời

8

Đây là một chút muộn ... nhưng bạn CÓ THỂ thực sự làm điều này với Phing. Việc này yêu cầu một vài bước:

Xác định thuộc tính ngày sẽ tắt. Đây sẽ là cần thiết ở cuối khi bạn đang tiết kiệm cuối cùng ngày xây dựng cho tương lai xây dựng

< tstamp> 
    < format property="builddate" pattern="%m/%d/%Y" /> 
    < format property="buildtime" pattern="%I:%M %p" /> 
< /tstamp> 

Xác định tài sản lastbuilddate. Xác định nó theo cách nào đó. Sau đó, bao gồm một tập tin (sẽ được tạo ra ở cuối chạy của bạn) với cùng một tài sản. Nếu tập tin tồn tại (chạy thứ 2 và sau), nó sẽ ghi đè lên các thiết lập mà bạn định nghĩa với bất cứ ngày qua là

< property name="lastbuilddate" value="01/01/1970 12:00 AM" /> 
< property file="$.\lastbuild.properties" override="true"/> 

Bao gồm ngày nhiệm vụ trong định nghĩa fileset của bạn. Đó là quy định cụ thể để chỉ chọn file có ngày sửa đổi cuối cùng SAU của bạn ngày xây dựng cuối cùng

< fileset id = "TheFiles"> < ngày datetime = "$ {lastbuilddate}" khi = "sau" /> </fileset>

chạy ftp của bạn cho TheFiles fileset

cập nhật file lastbuild.properties với ngày chạy mới nhất. Nhận thấy rằng chúng tôi đang sử dụng thuộc tính ngày/giờ được xác định ban đầu.

< echo msg="lastbuilddate=${builddate} ${buildtime}" file="$./lastbuild.properties" append="false" /> 

Mỗi khi bạn chạy mục tiêu của bạn, nó sẽ file chỉ ftp được thay đổi kể từ ngày quy định trong tài sản lastbuilddate

0

tôi đã viết xuống một kịch bản perl mà hiện nó với một kho svn (http://svnftpdeploy.sourceforge.net/ ... Tôi không biết những gì tôi đã viết bằng tiếng Anh)

Nó đòi hỏi một địa phương thư mục để lấy tệp từ svn, một tệp khác để nhận tệp từ ftp (thay đổi trong bản phát hành svn tiếp theo), tệp cục bộ để lưu trữ bản phát hành svn được tải lên lần cuối, thư mục cục bộ để lưu trữ danh sách tệp đã thay đổi từ ftp. Và nó tương tác yêu cầu hành động trong trường hợp xung đột (ai đó đã thay đổi tệp trong máy chủ độc lập khỏi tập lệnh triển khai của bạn).

Bây giờ tôi đang chuyển sang phing và git, phần cứng sẽ là quản lý tương tác, tôi nghĩ tôi sẽ quản lý nó với -D = để triển khai đích (với -Dconflictaction = stop, viewdiff, viewdiffanddeploy, ignore hoặc such một vật).

0

Bạn có thể sử dụng git-ftp hoặc dandelion tải lên chỉ là những thay đổi qua ftp . Tôi đoán nó không phải là khó khăn như vậy để sử dụng một trong số họ với phing ...

0

Bạn đã thử sử dụng thuộc tính depends="true" của FtpDeployTask?

Nếu phụ thuộc được đặt thành true, tác vụ sẽ chỉ cập nhật tệp có dấu thời gian sửa đổi cục bộ mới hơn dấu thời gian tương ứng trên máy chủ.

Đáng buồn thay, điều này dường như không hiệu quả đối với tôi: tất cả các tệp đang được chuyển.

Các vấn đề liên quan