2011-12-04 2 views
10

मैंने इस बारे में टॉमकैट गाइड here और कुछ SO प्रश्नों पर इसके बारे में पढ़ा। और मुझे लगता है कि मैं वही काम कर रहा हूं। लेकिन किसी भी तरह से सफल होने का प्रबंधन नहीं कर सकता है।टॉमकैट में संदर्भ पथ कैसे सेट करें ताकि कोई तैनात फ़ोल्डर नाम को शामिल किए बिना साइट में प्रवेश कर सके?

सबसे पहले मुझे यह कहना है कि मेरा एप्लिकेशन एक साझा टॉमकैट सर्वर पर तैनात है जिसका मेरा कोई नियंत्रण नहीं है। मैं बस अपना .war फ़ाइल छोड़ देता हूं और इसे तैनात किया जाता है।

मैं के रूप में ROOT.war अपने आवेदन पैकेज करने की कोशिश की लेकिन बात नहीं बनी। व्यवस्थापक ने मुझे इसे जो भी नाम चाहिए, उसे पैकेज करने के लिए कहा और वे इसका ख्याल रखेंगे। मैं इसे अपने-application.war रूप पैक और यह तैनात किया गया है, लेकिन मैं वेबसाइट करने के लिए http://my-host/my-application दर्ज करना होगा।

व्यवस्थापक संपर्क करने के बाद उन्होंने मुझसे कहा कि वे की तरह बिलाव कॉन्फ़िग फ़ाइल में मेरे मेजबान में एक संदर्भ elemnt डाल दिया है:

<Context path="" docBase="path of my-application deployed folder"/> 

जिसके लिए डिफ़ॉल्ट आवेदन के रूप में मेरी आवेदन स्थापित करने के लिए चाहिए था सभी अनुरोध my-host पर आ रहे हैं। लेकिन उसने ऐसा नहीं किया और जब भी मैं http://my-host दर्ज मैं:

HTTP Status 404 -/The requested resource (/) is not available 

लेकिन फिर जब मैं http://my-host/my-application दर्ज यह सब ठीक काम करता है। क्या गलत हो सकता है पर कोई सुझाव निश्चित रूप से सराहना की है।

अपडेट:
मैं चरणों how to make the application default पर बिल्ला दस्तावेज़ में वर्णित का पालन करने की कोशिश की। 3 तरीकों का वर्णन किया गया है और मैंने तीनों तरीकों की कोशिश की और स्थानीय एप्लिकेशन पर रूट के रूप में सफलतापूर्वक मेरे आवेदन को तैनात कर सकता था।

मैंने दूरस्थ सर्वर पर जिस समस्या का सामना कर रहा हूं उसे पुन: उत्पन्न करने का भी प्रयास किया ताकि मुझे कारण मिल सके और व्यवस्थापक को इसकी रिपोर्ट कर सकें। मुझे कुछ समस्याएं मिलती हैं।

  1. server.xml टुकड़ा है कि व्यवस्थापक मुझे भेजा autoDeploy और deployOnStartUp में, सही पर सेट किया जाता है, जबकि वे झूठी होना चाहिए, अगर स्पष्ट रूप से server.xml में प्रसंग तत्व को परिभाषित। यह डबल परिनियोजन का कारण बनता है जो एक रूट फ़ोल्डर और .war फ़ाइल के नाम के साथ एक फ़ोल्डर बनाता है। .war को हटाने से यह संबंधित फ़ोल्डर को हटा देगा और एप्लिकेशन को अनावश्यक कर देगा लेकिन रूट बना रहता है और इसे मैन्युअल रूप से हटा दिया जाना चाहिए और टॉमकैट को पुनरारंभ करना आवश्यक है। जब तक यह ROOT.war की कोई तैनाती को पुनरारंभ नहीं किया जाता है तब तक असफल हो जाएगा।
  2. मुझे लगा कि ROOT.war को तैनात करने से रोकने के कुछ कारण हैं। एक हो सकता है कि रूट।एक्सएमएलconf/{इंजन नाम}/{होस्ट-नाम} में मौजूद है या एक रूट फ़ोल्डर मेजबान के appBase में मौजूद है या के रूप में मैं पिछले तैनाती से एक रूट आवेदन ऊपर वर्णित undeployed नहीं है और बिलाव प्रारंभ करने की आवश्यकता ।

किसी भी तरह से मैं सटीकता से नहीं कर सकता है वास्तव में क्या है कि के बाद से की तैनाती से ROOT.war रोक रहा है मामलों मैं ऊपर वर्णित जाँच करने के लिए बिलाव लॉग फाइल और conf फ़ाइल पर पहुंच की आवश्यकता है।

इसके अलावा मैं देखता हूं कि मेरा व्यवस्थापक टॉमकैट सर्वर को बनाए रखने और समस्या को ढूंढने में असमर्थ लगता है। इसलिए मैंने साझा किए गए एक के साथ संघर्ष करने के बाद समर्पित टोमकैट सर्वर के साथ जाने का फैसला किया।

+0

क्या टोमकैट स्टैंडअलोन का उपयोग किया जा रहा है और HTTP की सेवा कर रहा है या क्या कोई और सर्वर हैडलिंग कर रहा है और एएमपी के माध्यम से टॉमकैट से संचार कर रहा है? ऐसा लगता है जैसे कुछ वर्चुअल होस्टिंग चल रहा है। क्या यह टोमकैट के मुख्य 'server.xml' में परिभाषित किया गया है या' conf/Catalina' के अंतर्गत अलग मेजबान विशिष्ट कॉन्फ़िगरेशन फ़ाइल के रूप में किया गया है? – laz

+0

मैंने बस अपने tomcat की server.xml फ़ाइल में संदर्भ पथ जोड़ने का प्रयास किया और यह एक चैंप की तरह रीडायरेक्ट किया। मैंने जो कुछ किया था उसे docBase = "my-application" रखा गया था, न कि पूर्ण पथ या ऐसा कुछ भी। उपरोक्त आपके नमूना कोड में, क्या "मेरे एप्लिकेशन को तैनात फ़ोल्डर का पथ" का अर्थ है? –

+0

इसके अलावा, क्या आपके पास पूरे तत्व तक पहुंच है जिसमें तत्व शामिल है? इसकी सेटिंग्स के आधार पर, यह संदर्भ सेटिंग को आपके काम की अपेक्षा से रोक सकता है। –

उत्तर

4

आम तौर पर इस के लिए निम्न चरणों के द्वारा प्राप्त किया जा सकता है:

  • conf में एक ROOT.xml प्रसंग फ़ाइल को परिभाषित करें/कैटालिना/स्थानीय होस्ट
  • नाम अपने webapp युद्ध "ROOT.war" या फ़ोल्डर युक्त "रूट "

हालांकि, मुझे संदेह है कि आप साझा किए गए टोमकैट उदाहरण पर ऐसा करने में सक्षम होंगे। केवल एक आवेदन डिफ़ॉल्ट अनुप्रयोग के रूप में चलाया जा सकता है। होस्टिंग कंपनी शायद इसे अन्यथा अनुमति नहीं देगी, अन्यथा वे उसी टोमकैट इंस्टेंस को साझा करने वाले कई लोगों के डिफ़ॉल्ट से बाहर होने की अनुमति देंगे? http://staraphd.blogspot.com/2009/10/change-default-root-folder-in-tomcat.html

+0

संदर्भ के लिए धन्यवाद। लेकिन लेख का सुझाव देने वाले अधिकांश हिस्सों पर मेरा नियंत्रण नहीं है। और मुझे लगता है कि व्यवस्थापक ने उल्लेख किया है कि व्यवस्थापक ने पहले से ही संदर्भ भाग सेट कर दिया है। – doctrey

+0

यदि व्यवस्थापक ने आपका संदर्भ पथ निर्धारित किया है ... आपका उत्तर है, तो आप इसे http // myapp.com/myapp जैसे कुछ "फ़ोल्डर" पर आने के बिना ऐसा नहीं कर सकते हैं। इसका एकमात्र तरीका यह है कि आप इसे प्राप्त कर सकते हैं, व्यवस्थापक को ROOT.war के रूप में तैनात करने के लिए या अपने युद्ध को ROOT.xml से इंगित करें। –

+0

@Bob [यहां] के अनुसार (http://wiki.apache.org/tomcat/HowTo#How_do_I_make_my_web_application_be_the_Tomcat_default_application.3F) ऊपर वर्णित विधि को एप्लिकेशन को डिफ़ॉल्ट रूप से सेट करना है। हालांकि मैं इस पर स्पष्ट नहीं हूं कि यह रूट आवेदन को ओवरराइड करेगा और नया रूट बन जाएगा या यह उन अनुप्रयोगों के लिए डिफ़ॉल्ट रूप से कार्य करता है जो रूट को असाइन नहीं किए गए हैं और किसी भी अन्य संदर्भ को पहले से परिभाषित किया गया है जिसे बाद में समझ में नहीं आता है । – doctrey

3

बिलाव विकी डिफ़ॉल्ट संदर्भ में आवेदन पत्र डाल पर एक section है:

यह लिंक देखें। हालांकि, ऐसा करने के लिए यह टॉमकैट सर्वर पर कुछ नियंत्रण का तात्पर्य है जो आपके द्वारा वर्णित साझा संदर्भ में संभव नहीं हो सकता है।

यदि आपके पास सर्वर पर अन्य सिस्टम स्थापित करने की क्षमता है, तो एक वैकल्पिक समाधान एनजीआईएनएक्स जैसे प्रॉक्सी सर्वर का उपयोग करना होगा। यह आपकी युद्ध फ़ाइल ROOT.war नाम देने से कहीं अधिक जटिल है, लेकिन कभी-कभी यह एकमात्र विकल्प है।

आप nginx सर्वर पर सुन रहा है और आप अपने खुद के यूआरएल है, तो आप के रूप में ऐसी स्थापित करने के साथ HttpProxyModule का उपयोग करें:

server { 
     listen   80; 
     server_name  my.domain.com; 
     location/{ 
      proxy_pass    http://my-host/my-application; 
      proxy_set_header  X-Real-IP $remote_addr; 
      proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
      proxy_set_header  Host $http_host; 
     } 
    } 

इसके अलावा इस काम बनाने के लिए, आप खुद करना होगा "my.domain.com" url और इसे साझा किए गए टोमकैट सर्वर के लिए उपयोग करने वाले प्रत्येक व्यक्ति से अलग होना चाहिए।

समाधान का nginx हिस्सा नि: शुल्क है, लेकिन यदि आपको एक नया यूआरएल पंजीकृत करने की आवश्यकता है और फिर इसे टॉमकैट सर्वर पर रीडायरेक्ट करने के लिए no-ip.com जैसी कुछ चीज़ों का उपयोग करें तो इससे पैसे खर्च होंगे।

+0

मुझे लगता है कि परिणाम प्राप्त करने के लिए मैं टॉमकैट को कॉन्फ़िगर करने के साथ चिपक गया हूं। फिर भी धन्यवाद। – doctrey

+0

हाँ, मैंने सोचा। यह समाधान वास्तव में एक परिदृश्य के लिए अधिक है जहां आपके पास बहुत सी साइटें हैं और कई यूआरएल रीडायरेक्ट करने के लिए हैं। लेकिन मैंने सोचा कि यह किसी के लिए सहायक हो सकता है। –

+0

यह मेरे लिए काम किया। पारितोषिक के लिए धन्यवाद। मैं यूआरएल के अंत में हर आवेदन के "संदर्भ" से वास्तव में नाराज था। – alfredocambera

5

अपने प्रश्न में, आप राज्य व्यवस्थापक के रूप में संदर्भ द्वारा सेट किए गए: उपरोक्त टिप्पणी के आधार पर

<Context path="" docBase="path of my-application deployed folder"/> 

, मैं से पूर्ण बल्कि रिश्तेदार अपने आवेदन के पथ का उपयोग करने की कोशिश कर सुझाव देते हैं पथ।

मैं के साथ मेरी बिल्ला सर्वर पर इस की कोशिश की:

<Context path="/" docBase="my-application/" /> 

और है कि चाल किया था।

होस्ट तत्व जिसमें कॉन्टेक्स्ट तत्व होता है वास्तव में कुछ पैरामीटर सेट करता है जो संदर्भ को भी प्रभावित कर सकते हैं। यदि यह डिफ़ॉल्ट सेटिंग्स है, तो एक सापेक्ष संदर्भ बस वेबपैस फ़ोल्डर को इंगित करना चाहिए। यदि यह बदला गया है, तो परिणाम अलग-अलग हो सकते हैं।

+0

मैंने सापेक्ष पथ के साथ प्रयास किया, अगर _appBase_ और _docBase_ के पूर्ण पथ कुछ विवाद हैं, लेकिन ऐसा लगता है कि यह समस्या नहीं है। – doctrey

+0

आपने मुझे बहुत समय बचाया। बहुत बहुत धन्यवाद। – dementiev

+0

मैंने पूर्ण पथ देने के बजाय सापेक्ष पथ देने की कोशिश की, लेकिन टॉमकैट सर्वर नहीं चल रहा था .. –

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