2013-01-08 28 views
14

the documentation पर देखकर, ऐसा लगता है कि ड्रॉपवार्ड केवल स्रोत/मुख्य/संसाधनों में रहने वाली स्थैतिक सामग्री की सेवा करने में सक्षम है। मैं अपनी स्थिर फ़ाइलों को जार फ़ाइल के बाहर एक अलग निर्देशिका में रखना चाहता हूं। क्या यह संभव है? या अधिकांश लोग अपनी स्थिर सामग्री के लिए nginx/Apache का उपयोग करते हैं?क्या ड्रॉपवार्ड जार फ़ाइल के बाहर से संपत्तियां प्रदान कर सकता है?

उत्तर

11

हाँ, यह कर सकते हैं, इस प्लगइन का उपयोग कर - https://github.com/bazaarvoice/dropwizard-configurable-assets-bundle

+4

आपको किसी भी प्लगइन की आवश्यकता नहीं है। बस [क्लासपाथ में दस्तावेज़ रूट जोड़ें] (http://stackoverflow.com/a/22221194/453605)। –

+0

दुर्भाग्यवश यह प्लग-इन वृद्ध है, और केवल 0.7 तक का समर्थन करता है। यह नए ड्रॉपविज़ार्ड (io.dropwizard) क्लासपाथ का उपयोग करने के लिए प्लगइन में बदलने का मामला हो सकता है, लेकिन मैंने कोशिश नहीं की है। कोई अन्य आउट ऑफ़ द बॉक्स जवाब? – Joel

+0

हां, नीचे दिए गए मेरे उत्तर में उल्लिखित चरणों का पालन करें। – craddack

2

स्थैतिक सामग्री की सेवा करने वाली वेबसाइटों की विशाल बहुमत एक समर्पित वेबसर्वर के माध्यम से या बड़े पैमाने पर CDN के माध्यम से ऐसा करती है।

कभी कभी, आप एक आत्म निहित इकाई सभी परिसंपत्तियों है जो जहां Dropwizard में आता है के साथ पूरा के रूप में एक आवेदन को तैनात कर सकते हैं।

यह Dropwizard पाने के लिए classpath बाहर से संपत्ति की सेवा के लिए संभव है, लेकिन ऐसा करने का सबसे आसान तरीका है अपनी खुद की संपत्ति अंतराल लिखना जो बाहरी रूप से कॉन्फ़िगर किए गए फ़ाइल पथ से पढ़ता है।

4

user manual का कहना है:

एक विस्तारित AssetsBundle निर्माता का उपयोग रूट पथ से संपत्ति फ़ोल्डर में संसाधनों की सेवा के लिए।

यानी फाइलें क्लासपाथ से संसाधनों के रूप में लोड की जाती हैं। फिर आपको केवल सेवा के लिए क्लासपाथ सेट करने की आवश्यकता है।

डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ, इसका मतलब है कि आपको दस्तावेज़ रूट assets पर कॉल करने और क्लासपाथ में दस्तावेज़ रूट के मूल फ़ोल्डर को रखने की आवश्यकता है। फिर, उदाहरण के लिए, assets/foo.html उपलब्ध

http://localhost:8080/assets/foo.html 
+0

यह ठीक है अगर आपकी स्थिर संपत्ति वास्तव में HTML फ़ाइलें हैं। अगर वे बड़ी, बाइनरी या संपीड़ित फाइलें हैं, तो उन्हें जार फ़ाइल के बाहर रखना सबसे अच्छा है। –

+0

@ क्रेग.मोटलिन, सिंगल जार फ़ाइल का बड़ा लाभ तैनाती में आसान है: केवल एक फ़ाइल कॉपी करें और सब कुछ अपडेट किया गया है और स्टेजिंग सर्वर पर काम करने की गारंटी है। अक्सर उत्पादन सर्वर पर एक बड़ी फ़ाइल अपलोड करने की आवश्यकता सबसे बड़ी कमी है। इसे हल करने के लिए, मैं नवीनतम तैनाती फ़ाइल की मध्यवर्ती प्रति अद्यतन करने के लिए 'rsync' का उपयोग करता हूं। यह बहुत तेज और भरोसेमंद है। –

+0

@ क्रेग.मोटलिन, स्पष्ट करने के लिए: मैं जार में सभी संपत्तियों को रखने के लिए नहीं कह रहा हूं। जैसा कि मैंने अपने जवाब में कहा है, आपको केवल क्लासपाथ में संपत्ति फ़ोल्डर जोड़ना होगा। दूसरे शब्दों में: जहां भी आप चाहें संपत्ति फ़ोल्डर डाल दें, केवल आवश्यकता यह है कि यह कक्षापथ में पाया जाता है। –

7

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

चलो कहते हैं कि मैं इस निर्देशिका संरचना करते हैं:

  • मेरी-dropwizard-server.jar
  • staticdocs
    • संपत्ति
      • image.png

फिर यह आपको काम करने के लिए करना है:

1) आपके ड्रॉपविज़ार्ड एप्लिकेशन क्लास में, एक नया एसेट्सबंडल जोड़ें। यदि आप अपनी संपत्तियों को एक अलग यूआरएल से सेवा देना चाहते हैं, तो दूसरा पैरामीटर बदलें।

@Override 
public void initialize(Bootstrap<AppConfiguration> bootstrap) { 
    bootstrap.addBundle(new AssetsBundle("/assets/", "/assets/"));  
} 

2) इस तरह मेवेन-जार-प्लगइन को कॉन्फ़िगर करके दस्तावेज़ क्लास को अपने क्लासपाथ में जोड़ें। ("./staticdocs/" सही रूप में हो रही है मुझे कुछ समय लिया। Classpaths माफ कर रहे हैं।)

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-jar-plugin</artifactId> 
    <version>2.4</version> 
    <configuration> 
    <archive> 
     <manifest> 
     <addDefaultImplementationEntries>true</addDefaultImplementationEntries> 
     <addClasspath>true</addClasspath> 
     </manifest> 
     <manifestEntries> 
     <Class-Path>./staticdocs/</Class-Path> 
     </manifestEntries> 
    </archive> 
    </configuration> 
</plugin> 

3) यह कदम पूरी तरह से वैकल्पिक है।आप एक अलग रूट पथ से अपने जर्सी बाकी संसाधन की सेवा करना चाहते हैं (उदाहरण के लिए "एप्लिकेशन"), निम्नलिखित आपके विन्यास YML में जोड़ें:

server: 
    rootPath: /app/* 

अब आप उदाहरण के लिए, इस तरह से अपनी स्थिर सामग्री का उपयोग कर सकते हैं:

localhost:8080/assets/image.png 
+0

आप 'src/main/resource' में 'संपत्ति' फ़ोल्डर डालकर 'maven-jar-plugin' के उपयोग से बच सकते हैं। –

+2

लेकिन वह संपत्ति को जार में पैकेज करेगा, है ना? इस सवाल का पूरा बिंदु जार के बाहर से संपत्ति की सेवा करना है। – craddack

+0

आप सही हैं। महत्वपूर्ण बात यह है कि: जहां भी आप चाहें अपनी संपत्तियां रखें, लेकिन सुनिश्चित करें कि वे कक्षा में पाए जाते हैं। यह एकमात्र आवश्यकता है। –

1

क्रैडैक के उत्तर को पूरक करने के लिए: सही है, जब तक आप अपने क्लासपाथ में संपत्ति जोड़ते हैं, तब तक आप नियमित संपत्ति बंडल का उपयोग कर सकते हैं। आप Gradle और oneJar का उपयोग करते हैं, तो आप oneJar कार्य में classpath के लिए एक निर्देशिका जोड़ सकते हैं:

task oneJar(type: OneJar) { 
    mainClass = '...' 
    additionalDir = file('...') 
    manifest { 
    attributes 'Class-Path': '.. here goes the directory ..' 
    } 
} 

https://github.com/rholder/gradle-one-jar

2

देख वहाँ एक तक की तारीख dropwizard-configurable-assets-bundle आधिकारिक dropwizard-बंडलों पर बनाए रखा है। आप इसे github https://github.com/dropwizard-bundles/dropwizard-configurable-assets-bundle पर पा सकते हैं। वर्तमान संस्करण ड्रॉपविज़ार्ड का समर्थन करता है 0.9.2

इसका उपयोग मनमाने ढंग से फ़ाइल सिस्टम पथ से स्थिर फ़ाइलों को करने के लिए किया जा सकता है।

+0

के साथ इस काम की पुष्टि कर सकता है मैं दिनों के लिए अपडेट ढूंढ रहा था! धन्यवाद!! – Olesia

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

  • कोई संबंधित समस्या नहीं^_^