2013-10-24 5 views
12

का उपयोग कर आवेदन शुरू करने से पहले 2.2.x मोड का पता लगाएं। मैं अपने प्ले एप्लिकेशन को किसी विशेष एप्लिकेशन कॉन्फ़िगरेशन फ़ाइल में उस वातावरण के आधार पर इंगित करना चाहता हूं जिसमें यह चल रहा है। तीन हैं और वे मानक प्ले स्टेटस से मेल खाते हैं:जावा

  • application.dev.conf
  • application.test.conf
  • application.prod.conf

एक सह कार्यकर्ता इस जो एक OS के माहौल स्थापित करने की आवश्यकता है करने के लिए एक विधि साझा ऑनमेंट चर

मैं ओएस चर सेट करने की आवश्यकता को खत्म करना चाहता हूं। मेरी प्राथमिकता अगर आप कमांड लाइन से play run निष्पादित, उपयोग जो भी प्ले स्टार्टअप पर उपयोग करता है पता है कि मोड में है।

उदाहरण के लिए, उत्पादन के हिस्से के "[info] play - Application started (Dev)"

है मैं इस का उपयोग करना चाहते मेरी Global.java में जानकारी जहां मैं बहुत तरह onLoadConfig ओवरराइड:

public Configuration onLoadConfig(Configuration baseConfiguration, File f, ClassLoader loader) { 
    String playEnv=<some static method to get mode>;   
    Config additionalConfig = ConfigFactory.parseFile(new File(f,"conf/application."+playEnv+".conf")); 
    Config baseConfig = baseConfiguration.getWrappedConfiguration().underlying(); 
    return new Configuration(baseConfig.withFallback(additionalConfig)); 
} 

सब कुछ मुझे लगता है कि कैसे करना है इस के बाद आवेदन isDev(), isTest(), isProd() का उपयोग कर यानी शुरू कर दिया गया ।

क्या स्थिर तरीका है जो मोड प्रदान करता है जबकि मैं ग्लोबल.जावा में लोडकॉन्फिग पर ओवरराइड कर रहा हूं?

+0

स्कैला में पैरामीटर 'मोड' है, जावा में नहीं है। इसलिए मैंने टिकट खोल दिया है: https://github.com/playframework/playframework/issues/2279 –

+0

धन्यवाद एंटोनियो। मैं इस मुद्दे पर नजर रखूंगा। –

उत्तर

3

मुझे लगता है कि play run देव है, play start प्रोड है।

संपादित करें:

Play.current.mode match { 
    case Play.Mode.Dev => "dev" 
    case Play.Mode.Prod => "prod" 
} 
+0

मुझे लगता है कि यह प्रश्न यह निर्धारित करने के बारे में है कि एप्लिकेशन 'dev' या 'prod' में है, न कि' dev' या' prod' मोड में एप्लिकेशन को चलाने के तरीके के बारे में। –

+0

आपके संपादन के अनुसार, मोड वर्तमान में सेट नहीं है क्योंकि कॉन्फ़िगरेशन लोड होने पर कोई रनिंग एप्लिकेशन नहीं होगा। –

0

प्ले कमांड लाइन तो स्थापित करने के लिए कोई ज़रूरत नहीं के साथ specifying alternative configuration file लिए अनुमति देता है: क्या आप को देखने के लिए क्या वर्तमान मोड, है यह play.api.Play.current के माध्यम से पारित कर दिया है में देख रहे हैं ओएस चर

आप निश्चित रूप से कुछ bash स्क्रिप्ट/बल्ला फ़ाइल यह हर बार

+1

वास्तव में उपयोगी नहीं है। मैं अपने आवेदन के भीतर से रन टाइम पर प्ले मोड लाने में सक्षम होना चाहता हूं। –

3

मुद्दा नवीनतम Play (3.0.0) में संबोधित किया जाना दिखाई दिया लेखन से बचने के लिए बना सकते हैं। Global विच में mode: {Dev,Prod,Test} पैरामीटर में जोड़ा गया एक और onLoadConfig विधि है।

public Configuration onLoadConfig(Configuration config, File path, ClassLoader classloader, Mode mode) { 
    return onLoadConfig(config, path, classloader); // default implementation 
} 
+0

प्ले 3.0.0? क्या यह भविष्य पहले से ही है? – nietaki