PHP Subversion Kurulumu FTP

7 Cevap php

Ben küçük bir php dükkanında çalışmaya ve ben son zamanlarda biz paylaşılan kod tabanı olarak nas kullanarak uzaklaşmaya ve kaynak denetimi için hainlere kullanmaya başlamak önerdi.

Eminim bizim dev sunucu her geliştirme şube taahhüt ile güncellenir yapmak için nasıl düşündüm ... ve biz bunların her ikisini de doğrudan erişim var, çünkü gövde içine birleştirme ve güncelleştirme bizim evreleme sunucu var biliyorum ama benim en büyük soru pek çok kez sadece ftp erişimi üretim sunucu, güncelleme olacak bir senaryo yazmak için nasıl. Ben (otomatik olmak istemiyorum bunu çalıştırdığınızda web sunucusuna sadece ne değişti yüklemek için yeterince akıllı bir senaryo yazmak için herhangi bir yolu yoktur ... tüm siteyi her zaman yüklemek istemiyorum Üretim çevreye yükleyerek, biz) elle çalıştırmak ister?

Benim soru bile mantıklı mı?

7 Cevap

Temelde, sorun, üretim sunucusunda hainlere kullanamazsınız olmasıdır. Yapmanız gereken ayrı bir (ideal aynı yapılandırılmış) sunucusuna üretim kasada bir kopyası üzerinde tutmak, ve o yoluyla kopya olduğu üretim sunucusuna her türlü yöntem. O da onları yayıyoruz önce bültenleri son testler yapmak için yararlı olacaktır yana, aslında, sizin hazırlama sunucusu olarak düşünebiliriz.

Bildiğim kadarıyla kopya gider gibi, sağlayıcı destekler rsync , set eğer. Yalnızca FTP'ye varsa FTP üzerinden rsync karşılığı yapmanın bazı yöntem bulmak gerekir. Bu herkes bu ihtiyacı gördü ilk kez değil; Bir web arama orada size yardımcı olacaktır. Ama sen hiçbir şey bulamazsanız, bana bir not bırakın ve ben biraz daha kendime etrafına bakacağız.

EDIT: yazar beni bu ekleyerek akla gelmez Umarım, ama buraya ait düşünüyorum. , Ftp ile rsync yaklaşık benzer bir şey yapmak Weex bakmak için http://weex.sourceforge.net/. Sadece değişen dosyaları göndermek böylece uzak sunucuda whats takip etmek için yerel bir ayna kullanan komut satırı ftp etrafında sarıcı. Benim için harika çalışıyor.

Bu doesn't sound like SVN FTP ile iyi oynar, ancak kullanarak değişiklikler itmek için yeterli ispat edebilir http erişimi varsa, svnsync. Yani bizim üretim sunucularının değişiklik itme nasıl - biz mevcut depo salt okunur bir ayna tutmak için SVNSync kullanın.

Ben aşağıdaki çözümü kullanın. Sadece web sunucusu üzerinde SVN istemcisi yüklemek ve bir özel erişilebilir url içine bu eklemek:

 <?php

    // make sure you have a robot account that can't commit ;) 
    $username = Settings::Load()->Get('svn', 'username');
    $password = Settings::Load()->Get('svn', 'password');
    $repos = Settings::Load()->Get('svn', 'repository');

    echo '<h1>updating from svn</h1><pre>';
    // for secutity, define an array of folders that you do want to be synced from svn. The rest should be skipped.
    $svnfolders = array(    'includes/' ,'plugins/' ,'images/' ,'templates/', 'index.php' => 'index.php');

    if(!empty($_GET['justthisone']) && array_search($_GET['justthisone'], $svnfolders) !== false){ // you can also just update one of above by passing it to $_GET
        $svnfiles = array($_GET['justthisone']);
    }

    foreach($svnfiles as $targetlocation)
    {   
        echo system("svn export --username={$username} --password {$password} {$repos}{$targetlocation} ".dirname(__FILE__)."/../{$targetlocation} --force");
    }

    die("</pre><h1>Done!</h1>");

Ben burada bir varsayım yapacak ve size hazırlama sunucusuna sizin birleştirilmesi / güncelleme yapmak için bir post-commit kanca kullanarak söylüyorlar ediyorum. Bu işe yarayabilir, ama güçlü bir Continuous Integration çözeltisi içine bakmak tavsiye ederim. Aşağıdaki ben farkındayım ki bazıları şunlardır:

  1. Xinc - http://code.google.com/p/xinc/ (PHP Özel)
  2. CruiseControl - http://cruisecontrol.sourceforge.net/ (Wildly popular.) PHP integration made possible with http://phpundercontrol.org/about.html
  3. Hudson - [https://hudson.dev.java.net/] (tabanlı Java olmak Görünüyor, ancak eklentileri / uzantıları sağlar)

LFTP ftp üzerinde dizinleri senkronize etme yeteneğine sahiptir.

Sadece bir fikir:

You could hold a revision of your project on a host you have access to and where subversion is installed. This single revision reflects the production server's version. You could now write a PHP script that makes this repository update over svn and then find all files that have been changed since the rep was updated. These files you can upload.

Böyle bir senaryo bu gibi görünebilir:

$path = realpath( '/path/to/production/mirror' );
chdir( $path );

$start = time();
shell_exec( 'svn co' );

$list = array();
$i = new RecursiveIteratorIterator( new RecursiveDirectoryIterator( $path ), RecursiveIteratorIterator::SELF_FIRST );

foreach( $i as $node )
{

    if ( $node->isFile() && $node->getCTime() > $start )
    {

        $list[] = $node->getPathname();

    } 

    // directories should also be handled

}

$conn = ftp_connect( ... );

// and so on

O aklıma geldi gibi.

Bu size yardımcı olacağını düşünüyorum

https://github.com/midhundevasia/deploy

onun Windows'da iyi çalışır.