2016-03-21 24 views
0

Adından da anlaşılacağı gibi, DRY'den kaçınmak için farklı projeler arasında paylaşılan bir proje olan bir paylaşılan kütüphanem var. Paylaşılan kitaplık bir GIT deposunun yanı sıra diğer uygulamalar (app1, app2, app3).Aynı anda 2 uygulamanın Capistrano dağıtımı

Uygulamayı dağıtırken1 Önce paylaşımlı ve sonra da uygulama1 dağıtmak istiyorum. App2 ve app3 için aynı. Herhangi bir aksama süresinden kaçınmak için, paylaşımlı kütüphanenin, app1 ile aynı anda konuşlandırılması gerekir. Bu nedenle temel olarak dağıtım: symlink: release, her iki başarılı dağıtımın sonunda gerçekleşir.

zaman ona bağlı tüm projeler aynı zamanda

şimdiye kadar başarıyla kurulum Capistrano ayrı ayrı uygulamayı dağıtmak için gelmiş de dağıtıldığı emin olmak zorunda paylaşılan kitaplıkta kod değişiklikleri. Bazı okumalardan sonra artık caphub kullanıyorum ama bu sorunu çözmeme yardım etmiyor. Şu anda kullanıyorum ne

:

namespace :app1 do 
task :deploy do 
    run_locally do 
     execute 'cap apps:shared staging deploy --dry-run', raise_on_non_zero_exit: true 
     execute 'cap apps:app1 staging deploy --dry-run', raise_on_non_zero_exit: true 
     execute 'cap apps:shared staging deploy', raise_on_non_zero_exit: true 
     execute 'cap apps:app1 staging deploy', raise_on_non_zero_exit: true 
    end 
end 
end 

yürütmek ile sorunu paylaştı güncellenir ise o app1 kesinti yaşıyor olacak ve app1 dağıtma olmasıdır.

Bu sorunu çözmenin en iyi yöntemleri nelerdir? Kapadokya'nın akışını, bir görevin sonunda sadece symlin yapmak için geçersiz kılacak bir yol var mı?

+0

Yeni bir yaklaşım var. Lütfen bu cevaba bakın http://stackoverflow.com/a/40921589/2067375. (Feragatname: Gem'in sahibiyim) –

cevap

1

Farklı insanlar farklı yanıtlar vermesine rağmen, önereceğim "en iyi uygulama", her bir projenin dağıtım içindeki paylaşımlı kütüphaneyi içermesini sağlamak olduğunu düşünüyorum. Kod çok büyük değilse veya gerçekten birbiri ardına konuşlandırılmamışsa (paylaşımlı konfigürasyonun değiştirilmesi gibi), genellikle bunun çok az olumsuz yanı vardır. PHP kullanıyorsanız, bunun için Composer'ı kullanabilirsiniz. Ruby ile, Bundler. Bunların ikisi de Git son noktasına işaret edebilir.

Gems'in Capistrano'da çalıştığı budur, Capistrano::Bundler, o uygulamanın tüm değerli öğelerinin uygulama başına kopyalarını shared/bundler içine kopyalar.

Düzenleme:

  1. (kitaplığınıza bir composer.json dosya ekleme Bunu yapmanın daha kolay/mümkün hale getirecek:

    bir Git deposundan bir Besteci paylaşılan kütüphane eklemek için, iki temel seçenek var PSR-4 otomatik yükleme). Talimatlar: https://getcomposer.org/doc/05-repositories.md#using-private-repositories

  2. Composer'ı kütüphanenizde körü körüne çekin, sadece vendor/'a yapıştırın. Burada Talimatlar: Besteci kullanımıyla ilgili özel bir sorunuz varsa https://getcomposer.org/doc/05-repositories.md#package-2

, sana yeni bir soru yayınlayın düşündürmektedir. Composer'a daha fazla aşina olan diğer kişiler muhtemelen size yardımcı olacaktır. Composer'ı neredeyse diğer araçlar kadar kullanmıyorum.

+0

Paylaşılan kütüphanenin de bir GIT repo olduğunu belirttiğim gibi. Bir capistrano'nun yapılandırma dosyasında 2 GIT deposu belirtmenin bir yolu var mı? Veya paylaşılan kütüphaneyi bir uygulama dağıtımına nasıl dahil edersiniz? –

+0

Tek bir Capistrano yapılandırmasında iki git reposunu dağıtamazsınız. İkinci soruyu cevaplamak için şunu sormam gerekiyor: uygulamanız hangi dil/çerçeve? Farklı sistemler, paylaşılan lib'leri farklı şekilde kullanır. –

+0

Şu anda bir PHP + besteci kurulumundayım.Paylaşılan kitaplık, paylaşılan yapılandırmaların ve bileşenlerin bir karışımıdır. –

İlgili konular