2010-11-18 12 views
8

से जोड़कर हमारी कंपनी ने एक ही उत्पाद, कुछ जावा सेवाओं द्वारा समर्थित रेल ऐप के साथ शुरुआत की, फिर फैसला किया कि वे एक और उत्पाद चाहते थे जो शुरुआत में पहले से काफी अलग था, लेकिन समय बीत चुका है हमने महसूस किया है कि वे अभिसरण शुरू कर रहे हैं, और एक कोड में परिवर्तन करने के लिए एक नई सुविधा/बग फिक्स के लिए दूसरे में समान कोड परिवर्तन की आवश्यकता होती है। यह स्पष्ट रूप से दर्द बन रहा है।2 रेल अनुप्रयोगों को एक कोडबेस

कुछ मामलों में हम जवाहरात है कि यह कार्यक्षमता के कुछ हिस्सा में लेकिन यह जावास्क्रिप्ट, सीएसएस आदि में गहरे लाल रंग का परे चला जाता है ..

तो मैं एक codebase में इन दो क्षुधा विलय करने का काम सौंपा कर रहा हूँ। मुझे लगता है कि अंत में हम अनुमति आधारित भूमिका पहुंच के साथ एक एकल ऐप बनना चाहते हैं लेकिन यह बाद में आएगा।

मेरा पहला विचार है कि उन्हें जल्दी से एक साथ रखा जाए, दो रेल इंजन बनाने और उनके बीच सामान्य libs साझा करना है। मुझे लगता है कि कोड को गठबंधन करने, सामान्य अनुभाग ढूंढने और साझा करना शुरू करने का यह सबसे तेज़ तरीका है।

मेरी पहली समस्या हालांकि ऐप्स के बीच रूट करने का तरीका है। एक ऐप एक एकल डोमेन नाम का उपयोग करता है जो कभी नहीं बदलता है, अन्य ऐप में कई डोमेन हैं। क्या कोई सुझाव दे सकता है कि मैं किसी विशेष ऐप के किसी विशेष अनुरोध को कैसे रूट कर सकता हूं ताकि वे libs के सामान्य कोडबेस साझा करते समय शुरू करने के लिए अलग रह सकें?

या, यदि किसी के पास इन ऐप्स को गठबंधन करने के तरीके के रूप में अन्य सुझाव हैं तो मैं सभी कान हूं।

वे दोनों रेल 2.3.10 क्षुधा JRuby 1.5.3 चल रहा है, लेकिन हम संभवतः Rails3 में अपग्रेड करने से है कि अगर चीजें काफी आसान या क्लीनर होगा खुला रहे हैं (यानी बेहतर रैक एकीकरण के साथ)

मैं किसी भी रैक प्रोग्रामिंग नहीं किया है, लेकिन यह जानने के लिए कभी दर्द नहीं होता है कि इससे हमारे जीवन को आसान बना दिया जाएगा।

+0

रैक एक तैनाती समाधान हो सकता है और शायद यहाँ समाधान नहीं है। – Chirantan

+0

रैक मिडलवेयर सही है? मैं सोच रहा था कि यह अनुरोध और मार्ग को उचित रूप से रोक सकता है? लेकिन फिर मुझे इसके बारे में ज्यादा जानकारी नहीं है – brad

उत्तर

1

इंजन का उपयोग करने का आपका विचार है जो मैं सुझाता हूं।

रूटिंग के लिए, मैं इसे रेल के बाहर संभाल दूंगा।

उदाहरण के लिए, आप क्या करेंगे nginx में निम्नलिखित:

server { 
    # Match only one host.              
    listen 80 default; 
    server_name YOUR_SINGLE_APP_DOMAIN; 

    location/{ 
     upstream YOUR_SINGLE_APP_RAILS; 
    } 
} 


server { 
    # Fall thru and match any other host.              
    listen 80 default; 
    server_name ~^.*$; 

    location/{ 
     upstream YOUR_MULTI_DOMAIN_APP_RAILS; 
    } 
} 
+0

क्या आप अपस्ट्रीम भाग को समझा सकते हैं? मैंने कभी इसका इस्तेमाल nginx के साथ नहीं किया है। साथ ही, मैं डोमेन से मेल खाता हूं और उचित रूप से प्रॉक्सी कर रहा हूं, लेकिन मैं चाहता हूं कि मेरे दो ऐप्स एक रेल ऐप में निहित हों, इसलिए मुझे लगता है कि दो रेल इंजनों के बीच मेरे मार्ग अद्वितीय होने चाहिए? मैं उम्मीद कर रहा था कि वे कुछ मार्ग साझा कर सकते हैं, लेकिन डोमेन के आधार पर सही कार्रवाई के लिए भेजा जाएगा। – brad

+0

मुझे लगता है कि मैं डोमेन के बारे में जो कह रहा था उसके बारे में nginx मार्ग b/c चला गया, जो कुछ है जो मैं आम तौर पर रेल के बाहर संभालता हूं। जहां तक ​​अपस्ट्रीम है, आप केवल एक एंडपॉइंट (या एक से अधिक) को परिभाषित करते हैं जो अनुरोधों को संभालता है। Nginx + यात्री में: "अपस्ट्रीम my_rails_app {सर्वर 10.1.2.3:8000;} सर्वर {सुनो 10.1.2.3:8000 इत्यादि।" –

+0

यह अनिवार्य रूप से हम क्या कर रहे हैं – brad

2

आपको सर्वर स्तर पर कोड साझा करने से बचना चाहिए, ऐसा करने के लिए सबसे अच्छा है जो सामान्य कोड बेस सहित पुस्तकालयों का निर्माण करेगा और विकास के दौरान उनका उपयोग करेगा। शायद सबसे अच्छी शूटिंग हेल्पर्स का उपयोग करेगी क्योंकि मॉड्यूल प्रदान करने का यह सबसे आसान तरीका है जो आपके कोड पर कार्यक्षमता प्रदान करता है।

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

  1. दोनों अनुप्रयोगों को एक अपाचे के माध्यम से सुलभ करने के लिए सेटअप करें।
  2. एक विधि को चुनें जो दोनों में समान है और दोनों अनुप्रयोगों की आवश्यकताओं का समर्थन करने के लिए इसे एक एप्लिकेशन में फिर से लिखें।
  3. अपाचे में केवल इस क्रिया पर एक एप्लिकेशन में यातायात को पुनर्निर्देशित करने के लिए एक mod_rewrite नियम जोड़ें।
  4. सब कुछ फिर से लिखा जाने तक बिंदु दो पर जाएं।
  5. वर्ष आवेदन निकालें और एक आवेदन

आप Apache का उपयोग करने की जरूरत नहीं है का उपयोग करने के मार्ग/mod_rewrite समायोजित, वहाँ URL पुनर्लेखन समर्थन अन्य वेब सर्वर होना चाहिए।

मैं रेलवे 3.0 पर हमारे आवेदन को फिर से लिखने के लिए इस एल्गोरिदम का उपयोग करने के बारे में सोच रहा था।

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