2012-03-07 18 views
5

मैंने वेब की खोज की है, लेकिन मुझे केवल कई साइटों के बीच कोड साझा करने और अलग-अलग मॉडलों को डेटाबेस को अलग करने पर जानकारी मिल सकती है। यह वह नहीं है जिसकी मुझे चाहत है। http://myportal.com - - कि कई अन्य साइटों संभाल लेंगे -एक ही रेल सर्वर पर कई परियोजनाओं में एकाधिक साइटें

मैं एक DNS पते और एक भी बंदरगाह के साथ एक एकल रेल सर्वर को चलाने के लिए, चाहते हैं http://myportal.com/site1, http://myportal.com/site2 आदि

मैं प्रत्येक साइट चाहते हैं के लिए यह खुद फ़ोल्डर है (और एससीएम भंडार), यह स्वयं का डेटाबेस है, यह स्वयं का मार्ग है - यह सब कुछ है। यही है - मैं प्रत्येक साइट को स्टैंडअलोन के रूप में विकसित करने में सक्षम होना चाहता हूं - इसका मतलब है कि मुझे साइट 1 साइट को http://localhost:3000 के रूप में चलाने में सक्षम होना चाहिए और http://localhost:3000/site1 नहीं।

सर्वर पर, रूट साइट (जो http://myportal.com पता का जवाब देता है वह एक होना चाहिए जिसे मैं सर्वर चलाता हूं, और इसे अन्य साइटों के पूर्ण पथ पता होना चाहिए (जो कि विभिन्न निर्देशिकाओं में होगा सर्वर, रूट साइट की बाल निर्देशिका में नहीं) और उनके लिए रूटिंग जानकारी प्रदान करते हैं - लेकिन इसे अन्य साइटों routes.rb फ़ाइलों को भी चेन करना चाहिए। इसका मतलब है कि यदि मैं http://myportal.com/site1/books/ को संबोधित करने के लिए जाता हूं तो रूट साइट http://myportal.com/site1 को संभालना चाहिए, और साइट 1 को संभालना चाहिए /books/। रूट साइट को अन्य साइटों की आंतरिक रूटिंग संरचनाओं के बारे में जानने की आवश्यकता नहीं है।

क्या यह संभव है? अभी मैं रेल सर्वर चला रहा हूं जो जी के साथ आता है कमांड लाइन से em (rails server) Windows Server 2008 सर्वर पर, लेकिन यदि मैं वर्णित लक्ष्य को पूरा करने के लिए आवश्यक है तो मैं एक और सर्वर स्थापित करने के लिए तैयार हूं।

अग्रिम धन्यवाद!

उत्तर

1

आपको अपाचे या nginx और संभवतः आईआईएस के साथ ऐसा करने में सक्षम होना चाहिए यदि सही तरीके से कॉन्फ़िगर किया गया हो। मैं अपाचे और लचीला mod_rewrite और mod_proxy घटकों से परिचित हूं जो इसे सुविधाजनक बना सकते हैं।

विचार आप http://example.com/ पुनर्लेखन http://example.com:3000/ और http://example.com/site2http://example.com:3001/site2 और इसके आगे के रूप में हो रहा है।

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

+0

तो, अगर मैं सही ढंग से समझ, मैं कई बंदरगाहों उपयोग करने की आवश्यकता है, और ऐसा करने के लिए DNS में रूटिंग कार्य? क्या एक बंदरगाह के साथ ऐसा करने का कोई तरीका नहीं है? –

+0

DNS ग्राहकों को आपके सर्वर पर निर्देशित करता है। आपके सर्वर को उचित बंदरगाह के अनुरोधों को आंतरिक रूप से रूट करने की आवश्यकता है। यह शायद कई साइटों को तोड़ने का सबसे आसान तरीका है क्योंकि 'वर्चुअलहोस्ट' निर्देश डिफ़ॉल्ट रूप से किसी विशिष्ट होस्ट नाम से कुछ भी कैप्चर करता है, लेकिन केवल एक विशिष्ट पोर्ट पर। एकाधिक होस्ट + पोर्ट संयोजनों का उपयोग करके आप लचीलापन चाहते हैं। – tadman

+0

ठीक है, मैं इसे आज़मा दूंगा। रेल में 'वर्चुअलहोस्ट' के बारे में कोई सभ्य ट्यूटोरियल मिला? –

0

एक सिमलिंक बनाएँ:

cd ~/Sites 
ln -s /Users/hg/Developer/Rails/railsproj1/public ./railsproj1 

अपाचे config फ़ाइल को संशोधित

<VirtualHost *:80> 
    ServerName localhost 
    DocumentRoot /Users/hg/Sites 
    <Directory /Users/hg/Sites> 
    AllowOverride All 
    Options Indexes FollowSymLinks MultiViews 
    Order allow,deny 
    Allow from all 
    </Directory> 
    RailsBaseURI /railsproj1 
    RailsEnv development 
</VirtualHost> 

उत्तर स्रोत: http://collab.stat.ucla.edu/users/jose/weblog/9e335/

+0

अधिक स्रोत: http://www.modrails.com/documentation/Users%20guide%20Apache.html#deploying_rails_to_sub_uri – dinnouti

+0

यही वह होगा जो मैंने किया होगा - अगर मुझे विंडोज मशीन पर चलाने की ज़रूरत नहीं है ... –

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