2012-03-20 25 views
12

Anlatabildiğim kadarıyla, capistrano :db rolü yalnızca geçişleri çalıştırmak için kullanılır.capistrano,: db rolü, ne için?

(Böylece, çoğu durumda muhtemelen aslında bir yakut olurdu Neden/raylar orada yığını (ya da orada ssh girişlerini açar. Veritabanınızı çalıştıran sunucu olmamalı)? İstediğin sadece ne olursa olsun sunucu var ray geçişlerini gerçekte yürütmek için).

Ve :primary => true ile db rolü olarak tanımlanan yalnızca sunucu

göçler çalıştırmak için kullanılır.

Yani 'db' rolü olarak ancak :primary => true olmadan belirtilen diğer sunucular ... hiç boşuna kullanılmaktadır? Peki neden capify . tarafından oluşturulan varsayılan deploy.rb onları listelemenizi teşvik ediyor? Burada neyi listeleyecektiniz? Ben

şey kaçırıyorum?

cevap

21

Açıkçası, rol :db adı yanıltıcı. Belirttiğiniz gibi, Capistrano (:primary => true ile) rake db:migrate'u çalıştırdığımız bir ana bilgisayar olarak tanımlar, ancak veritabanı sunucuları her zaman bu tür ana bilgisayarlarda çalışmaz. Bir Rails uygulaması aracılığıyla uzak veritabanı sunucusunun şemasını değiştirebiliriz. Bu tür bir ana bilgisayar için doğru rol adı :db değil.

lib/capistrano/configuration/roles.rb'daki yorumlardan çıkarıldığında, :db rolünün özgün anlamı, veritabanı sunucularının üzerinde çalıştığı bir ana bilgisayardır. :db ana bilgisayarına giriş yapmamız ve bazı görevler yapmamız bekleniyor.

Capistrano tasarımcıları, deploy:migrate görevi için :migration rolünü veya başka bir şeyi tanımlamış olmalıdır. Ancak bu görevle :db arasındaki ilişki altı yıl önce 9a6d2fb ile tanımlandı ve o zamandan beri değişmedi.

Genel olarak konuşursak, Capistrano'nun kullanıcıları rolleri tanımlayabilir ve serbestçe görevleri ile ilişkilendirebilirsiniz. deploy:migrate görevi, Rails geliştiricileri için bir tarifi olarak sağlanmıştır. Ne yazık ki, bu tarif, veritabanı geçişini nasıl yaptığımız ve uzun bir süre boyunca yaygın olarak kullandığımız hakkında bir yanlış anlama içermektedir.

+2

Artık geçişler için rol adını değiştirebilirsiniz (bu ayrıca önerilir): https://github.com/capistrano/rails#recommendations – NobodysNightmare

4

Bir ana veritabanı sunucusu ve birden köle sunucularını içeren bir kurulum sahip olabilir. Bazı durumlarda, tüm veritabanı sunucularında çalıştırılması gereken bir capistrano görevi olabilir. Diğerlerinde, yalnızca ana sunucuda bir görevi (örneğin, bir geçiş) çalıştırmak ve değişikliklerin köle örneklerine yayılmasına izin vermek isteyebilirsiniz.

+0

Tüm veritabanı sunucularında çalışacak bir görev örneği verebilir misiniz? Bu durumda, bu veritabanının kendisi üzerinde çalıştığı gerçek ana bilgisayar anlamına mı geliyor? – jrochkind

+0

Evet. Tek bir sunucu birden fazla rolü yerine getirebilir, ancak zorunda değildir. Çoğu durumda veritabanınızı tek bir master ve çoklu slave ile ölçeklendirebilirsiniz. Yalnızca birincil (ana) sunucuda bir veri geçişi çalıştırmak isteyebilirsiniz, ancak tüm veritabanı örnekleri için günlüğe kaydetme açıksa, hepsine vurmak ve günlük dosyalarını arşivlemek isteyebilirsiniz. –