PHP Uygulamaları doğru dağıtma Nasıl?

3 Cevap php

How to correctly deploy applications from development to production and how to deal with multiple site configurations. All my development are done thru svn located at var/svn/myapp/trunk and the actual production code is in /var/www/myapp.

I check out the latest code to my local machine into a directory called "myapp_latest_svn". I have site and location specific code in my main settings.php, which has H_PATH = 'http://myapp.com' & db config settings for db_host, db_user_name and db_password which is as you know different in local machine settings ( where localhost/myapp.com is just an Apache alias) & on the production ( live site runs on myapp.com) server.

Ayrıca. Htaccess dosyası üretim sunucusunda farklıdır. Kısacası, dev ve üretim arasındaki farkların vardır.

I keep all my work in SVN. Every morning i use SVN Update which updates the latest code to my local svn repository. When I am ready to go live, I build a release with svn Commit.

Then in the release I have to remember to change all the appropriate dev files to their production counterpart. Now I had to manually edit the production settings.php & .htaccess to reflect the site specific changes.

I am looking for an automated way to go from dev to production complete with versioning and no manually editing of files which is error prone and bad practice.

One way is making the production version of files read only (0444). That way when I do a svn export, they are not overwritten by the dev version of the files and I don't have to worry about editing files on each move from dev to production. But that's bad way of doing things like continuous integration.

Also by making multiple copies of the settings.php (one for localhost, beta, and prod). Then using a shell script that exports from svn, and then once the export is done, it replaces the settings.php with the correct settings.php, depending on the location that we are deploying to. That way everything is automated. But this is also a lame way to go.

Son yoludur

if( eregi ("myapp.com$", $_SERVER['HTTP_HOST']) ){

    define('H_PATH', 'myapp.com');

} else {

    define('H_PATH', 'localmyapp.com');

}

This is fine as far as settings.php is concerned. But what abt the .htaccess, u cannot check like the above in .htaccess.

Ben istemiyorum Ne ayarlarını değiştirmek zorunda Ben sitemde dağıtmak her zaman yapıyor sonunda.

Benim DB şema yani db, benimle sadece settings.php ve. Htaccess bir sorun değildir sürüm kontrolü değil.

Also how can i tell svn not to update some directories since that is also site specific (/log, /cache, /assets, /downloads). Also i need to preserve the apache ( www_data) write access intact for the above files as well.

Son olarak i verdiğinizde üretim sunucusuna boş gövde dizini ve. Svn dosyaları kopyalamak istemiyorum.

Nasıl üretim sunucularına SVN oluştururken bu konularda herhangi bir neden olmadan entegre Phing hatta bir kabuk komut dosyası kullanabilirsiniz.

Bu orada vahşi birçok wannabe uygulama geliştiriciler için yararlı olabilir.

Teşekkür peşin,

ocptime

3 Cevap

Ben size dağıtım sıkıntılardan Capistrano bakmak tavsiye ederim. Ben PHP sistemleri dağıtmak için kullanılır ve (sizin dağıtmak tarifi küçük bir betik ile) açıkladığınız her şeyi yapacağız.

Benim uzaktan repo herhangi yapılandırma dosyaları tutmak yok - Ben dev zaman çıkış, Ben bu yüzden kazara im bunları kontrol yok onları görmezden sonra, bunları bir kez ekleyebilirsiniz. Bu dağıtırken söz konusu olduğunda dağıtılan sürümü içine ayarları dosyalarını yazacak ki, benim kapak açılma tarifi kurulur. Bu şekilde, ben hiçbir eleştirel dağıtma ve eksik endişelenmenize gerek asla.

Cap de herhangi bir tarih varlıklarının ilgilenir (dizinleri sembolik bağlantılarını böylece her dağıtmak yerinde kalır) ve aynı zamanda otomatik olarak Amazon S3 daŘıtımı tüm varlık dosyaları ve veritabanını yedekler. Oldukça şık, değil mi?

Ben için kod yapılandırmak istiyorum hangi ortam bana soruyor yapılandırma denilen bir Phing görevi var. Vb yerel kalkınma, evreleme, üretim,: Görev birkaç olası değerleri kabul

Ben o çevreyi anlatmak sonra, uygun okur. Özellikleri dosya (yani local.properties, production.properties, vb)

Sonra onlara bir FilterChain replaceTokens görevi çalıştırmak böylece kendi belirteçleri özelliklerini dosyadan değerleri ile değiştirilir, store TEMPLATES yapılandırma ve htaccess dosyaları: Bir sonraki adım sizin için önemli olacaktır.

Bu dosyaları oluşturun:

ortak / build / templates / settings.tpl

define('H_PATH','##H_PATH##');
define('ENVIRONMENT', '##ENVIRONMENT##');

build / şablonları / htaccess.tpl

http://##H_PATH##

build / özellikleri / local.properties

site.H_PATH = localmyapp.com
site.ENVIRONMENT = local

build / özellikleri / production.properties

site.H_PATH = myapp.com
site.ENVIRONMENT = production

ortak / build / build.xml

<target name="config">
   <input propertyname="env" validargs="local,production">Enter environment name:</input>
   <property file="build/properties/${environment}.properties" />
   <copy file="build/templates/settings.tpl" 
     tofile="config/settings.php" overwrite="true"> 
     <filterchain>
      <replacetokens begintoken="##" endtoken="##">       
          <token key="H_PATH" value="${site.H_PATH}" />
          <token key="ENVIRONMENT" value="${site.ENVIRONMENT}" />
      </replacetokens>          
     </filterchain>
   </copy>      
   <copy file="build / şablonları / htaccess.tpl" 
     tofile="public/.htaccess" overwrite="true">    
     <filterchain>
      <replacetokens begintoken="##" endtoken="##">       
          <token key="H_PATH" value="${site.H_PATH}" />                                                           
      </replacetokens>          
     </filterchain>
   </copy>              
   <echo msg="Configured settings.php and .htaccess for ${environment}" />              
</target>                               

Yerel çalıştırmak için siteyi yapılandırmak istediğinizde Şimdi sadece yazın:

phing config

sonra yazın:

local

and press return. That's it! One huge benefit of this is that you no longer need ANY if/else statements in your code. Plus, it's not dependent on $_SERVER variables, so it'll work fine on the commandline.

Ben ayarları dosyaları depolamak ve. Haccess SVN'de adlandırılmış dosya ile, örneğin, settings.php.example ve. htaccess.example. Ben yeni bir sürümünü yaratmak Bu şekilde ben bir şeyler yazılmadan hakkında endişelenmenize gerek yoktur.