2012-03-20 12 views
12

जहाँ तक मैं कह सकता हूं, capistrano :db भूमिका केवल माइग्रेशन चलाने के लिए उपयोग की जाती है।capistrano,: डीबी भूमिका, इसके लिए क्या है?

(इस प्रकार, ज्यादातर मामलों में यह शायद नहीं वास्तव में सर्वर है कि अपने डेटाबेस चलाता होना चाहिए। क्यों आप एक गहरे लाल रंग का होता है/रेल वहाँ ढेर (या वहाँ ssh लॉगिन अनुमति देते हैं)? यह सिर्फ जो कुछ सर्वर आप चाहते है वास्तव में रेल माइग्रेशन निष्पादित करने के लिए)।

और केवल :primary => true के साथ डीबी भूमिका के रूप में पहचाना गया सर्वर माइग्रेशन चलाने के लिए उपयोग किया जाता है।

तो किसी भी अन्य सर्वर को 'डीबी' भूमिका के रूप में पहचाना गया लेकिन :primary => true के बिना ... कुछ भी नहीं के लिए उपयोग किया जाता है? तो capify . द्वारा बनाई गई डिफ़ॉल्ट deploy.rb क्यों आपको सूचीबद्ध करने के लिए प्रोत्साहित करती है? आप यहां क्या सूचीबद्ध करेंगे?

मुझे कुछ भी याद आ रहा है?

उत्तर

21

जाहिर है, भूमिका :db का नाम भ्रामक है। जैसा कि आपने बताया है, कैपिस्ट्रानो इसे होस्ट करता है (:primary => true के साथ) एक होस्ट के रूप में जिसे हम rake db:migrate निष्पादित करते हैं, लेकिन डेटाबेस सर्वर हमेशा ऐसे होस्ट पर नहीं चल रहे हैं। हम एक रेल ऐप के माध्यम से रिमोट डेटाबेस सर्वर की स्कीमा बदल सकते हैं। इस प्रकार के होस्ट के लिए सही भूमिका का नाम :db नहीं है।

lib/capistrano/configuration/roles.rb पर टिप्पणियों का जिक्र करते हुए, :db भूमिका का मूल अर्थ एक होस्ट है जिस पर डेटाबेस सर्वर चल रहे हैं। हमें :db होस्ट में लॉगिन करने की उम्मीद है और कुछ कार्य करें।

कैपिस्ट्रानो के डिजाइनरों को :migration भूमिका या deploy:migrate कार्य के लिए कुछ और परिभाषित करना चाहिए था। लेकिन इस कार्य के साथ :db भूमिका के बीच संबंध छह साल पहले 9a6d2fb के साथ परिभाषित किया गया था और तब से बदला नहीं गया है।

आम तौर पर, कैपिस्ट्रानो के उपयोगकर्ता भूमिकाओं को परिभाषित कर सकते हैं और उन्हें कार्यों के साथ स्वतंत्र रूप से जोड़ सकते हैं। deploy:migrate कार्य रेल डेवलपर्स के लिए नुस्खा के रूप में प्रदान किया गया है। दुर्भाग्यवश, इस नुस्खा में एक गलत धारणा शामिल है कि हम डेटाबेस माइग्रेशन कैसे करते हैं और लंबे समय तक व्यापक रूप से उपयोग किया जाता है।

+2

अब आप माइग्रेशन के लिए भूमिका का नाम बदल सकते हैं (जिसे भी अनुशंसित किया जाता है): https://github.com/capistrano/rails#recommendations – NobodysNightmare

4

आपके पास एक सेटअप हो सकता है जिसमें एक मास्टर डेटाबेस सर्वर और एकाधिक गुलाम सर्वर शामिल हों। कुछ मामलों में, आपके पास एक कैपिस्ट्रानो कार्य हो सकता है जिसे सभी डेटाबेस सर्वरों पर चलाने की आवश्यकता होती है। दूसरों में, आप केवल मास्टर सर्वर पर एक कार्य (उदाहरण के लिए, माइग्रेशन) चला सकते हैं और परिवर्तनों को गुलाम उदाहरणों में प्रसारित करने की अनुमति दे सकते हैं।

+0

क्या आप किसी ऐसे कार्य का कोई उदाहरण दे सकते हैं जो सभी डेटाबेस सर्वर पर चल सके? इस मामले में, क्या इसका मतलब यह है कि वास्तविक होस्ट जो डेटाबेस स्वयं चल रहा है? – jrochkind

+0

हां। एक एकल सर्वर कई भूमिकाएं पूरा कर सकता है, लेकिन इसे नहीं करना है। कई मामलों में आप एक ही मास्टर और एकाधिक दासों के साथ अपने डेटाबेस को स्केल कर सकते हैं। आप केवल प्राथमिक (मास्टर) सर्वर पर डेटा माइग्रेशन चला सकते हैं, लेकिन हो सकता है कि यदि आपके पास सभी डेटाबेस इंस्टेंस के लिए लॉगिंग चालू है, तो हो सकता है कि आप उन सभी को हिट करना और लॉग फ़ाइलों को संग्रहित करना चाहें। –

संबंधित मुद्दे