2010-10-14 15 views
9

Perl için Buildout benzer bir şey arıyorum this question gönderdim. Bence Shipwright aradığım şey ama gerçekten emin değilim. Onunla oynadım ve bir proje yarattım, tüm kaynağımı ve bağımlılıklarımı içe aktardım ve her şeyi bir tekneye verdim, o zaman belgeleme türünü durdurdum. Bir tersane ile ne yapacağım? Gerçek gelişim çalışmamı gemide mi yapıyorum yoksa gelişmemi Tersanede mi yapıyorum? Geminin sadece dağıtım için olduğunu varsayıyorum, ama bir web sunucusuna bir gemiyi nasıl dağıtıyorum (linux, apache kullanıyorum ve sadece cgi'yi çalıştırıyorum).Perl uygulamasını dağıtmanın iyi bir yolu nedir?

Shipwright, yapmaya çalıştığım şey için doğru olanı mı yoksa daha uygun olan başka bir şey var mı? İdeal olarak Shipwright'ı Buildout'u kullanma şeklimdekine benzer bir şekilde kullanabilirim. Buildout'u geliştirmem için güzel bir yalıtılmış ortam oluşturmak için kullanıyorum ve ayrıca uygulamaların tüm bağımlılıklarını yönetmek için sunuculara dağıtım yaparken Buildout'u kullanıyorum.

DÜZENLEME: Bu, Perl'de yapmak isteyebileceğim Buildout ile neler yapabileceğimin önemli noktaları.

Buildout ile kod veritabanımda bağımlılıkları listeleyen bir dosyam var (Perl için CPAN modülleri veya başka bir kaynak deposu olabilir). Tüm bu bağımlılıkları getirecek ve onları projemde bir dizine bırakacak ve sistem düzeyini sistem düzeyinde yükleyemeyecek bir bootstrap komut dosyası çalıştırabilirim. Buildout ayrıca istediğiniz herhangi bir şeyi yapabileceğiniz (komutları çalıştır, diğer komut satırı araçları, gerçekten herhangi bir şey) yardımcı betikler oluşturur ve bu betikler yoldaki bağımlılıkları açıkça ekler, böylece komut dosyalarım çalışırken tüm bağımlılıklarım içe aktarılabilir.

Bu gerçekten çok iyi olan şey, sistem seviyesinde herhangi bir şey yüklemeye gerek kalmadan bağımlılıklarımı yönetmeme izin vermesidir. Hangisi bir versiyondan diğerine geçmeyi çok kolaylaştırıyor. Ayrıca, aynı modülün farklı sürümlerini kullanarak aynı sistem üzerinde çalışan birden fazla Buildout projesine sahip olmamı sağlıyor. Son olarak, büyük bir avantajı, Buildout'un dizin yapısı ile bağımlılıkları sadece kaynak kontrolüne yükleyebilmem ve sadece bir ödeme yapmam gereken yeni bir makineye yerleştirebilmem ve tüm bağımlılıklarımda kurulu olan herhangi bir şeye dokunmak zorunda kalmadan zaten memnunum. bir sistem seviyesi.

+0

Bakmanız gereken seçenekler, yapmaya çalıştığınız şeylere bağlı. PAR'a da bakmak isteyebilirsiniz. – tsee

+0

Hiç Buildout olmadığımdan beri meraklı; Bu gibi sistemler hangi problemleri çözer? Kodu dağıtma? Kodu çalıştırıyor musun? –

+0

Gemwright hakkında bilgi arayarak bunu bulan herkes için, geminizi "nasıl taşıyacağınız" konusunda gerçekten düzgün bir öğretici var. http://serialized.net/2010/08/deploying-self-contained-perl-dancer-applications/ Şu anda bir web uygulaması için bir dağıtım süreci oluşturmaya çalışıyorum. – Relequestual

cevap

3

Perl'deki Buildout gibi bir şey bulacağınızı sanmıyorum, ama hile yapacak birkaç şeyi bir araya getirebilirsiniz. Sen testler komutları bağımlılıkları yönetme ve sahibi olmak için Module::Build için standart Build.PL komut dosyası kullanabilirsiniz

vb Sonra

bir yerel içine bu bağımlılıkları kurulumu yapmak cpanminus kullanabilirsiniz (non sistem) dizini.

Ardından, projenin bu yerel bağlantılarla paketlenmesini ve dağıtılmasını sağlamak için Shipwright'ı kullanabilirsiniz.

+0

Bunun sesini seviyorum. Bunun seslerinden, Module :: Build ve cpanminus ile Shipwright'a ihtiyacım olacağını düşünmüyorum. Onlara bir göz atacağım, teşekkürler! –

+0

Bu, buildout'a benzer şekilde davranabileceği gibi geliyor, ancak aynı zamanda çok sayıda manuel çalışma (her bağımlılığı tek tek yüklemekten kaçınmaya çalıştığım şey) de dahil olmak üzere, tamamen otomatikleştirilmiş bir şey arıyorum. Belki de sadece kapakların altında cpanm kullanacak kendi otomatikleştirilmiş yerel ortamımı geliştirmem gerekecek. –

+0

@matthew - Module :: Build, tüm bağımlılıkları ve bağımlılıklarını yükleyecek bir "installdeps" hedefine sahip. Cpanm'ı bunun içine almanın kolay bir yolu olup olmadığını bilmiyorum ve yerel olarak bir şeyleri kurmak için yerel :: lib gibi bir şeyi kullanmanın en kolay yolunu bilmiyorum. Ama bu sizin başlamanızı sağlamalı. – mpeters

İlgili konular