2011-12-04 12 views
9

PHP विकास में, यह निर्धारित करना संभव है कि ऐप किसी उत्पादन में या सर्वर के पर्यावरण 'चर से विकास वातावरण में चल रहा है या नहीं।टोमकैट उत्पादन/देव वातावरण

क्या टोमकैट सर्वर पर एक समान चर उपलब्ध है, या क्या उत्पादन और विकास के लिए अनुप्रयोगों को लक्षित करने का एक बेहतर तरीका है?

उत्तर

0

आप टॉमकैट स्टार्टअप स्क्रिप्ट्स (उदाहरण के लिए लिनक्स पर्यावरण पर run.sh) में ओएस पर्यावरण चर सेट अप कर सकते हैं और उन्हें अपने प्रोग्राम से पढ़ सकते हैं। इसके अलावा आप जावा पर्यावरण चर सेट कर सकते हैं (जैसे: Passing environment variables to a JVM, in a platform-independent manner)। मैं व्यक्तिगत रूप से dev/prod/etc के लिए अलग-अलग संपत्ति फ़ाइलों का उपयोग करता हूं और संपत्ति फ़ाइल के लिए इस चर को पढ़ता हूं। केवल आवश्यक संपत्ति फ़ाइल तैनात की गई है।

2

आप डिफ़ॉल्ट रूप से ऐसी चीज नहीं कर सकते हैं। किसी भी मामले में, (वरीयता के क्रम में) निर्धारित करने के लिए जब भी एप्लिकेशन पर्यावरण X में है मैं कहेंगे कि आप इसे निम्न विधियों में से एक का उपयोग करना चाहिए कंटेनर पर भरोसा नहीं करते:

  1. जो भी आपका निर्माण उपकरण प्रदान करता है उसका प्रयोग करें। उदा।: मेवेन प्रोफाइल का उपयोग करें। http://maven.apache.org/guides/introduction/introduction-to-profiles.html
  2. ऐप के लिए "मोड" संपत्ति के साथ एक प्रॉपर्टी फ़ाइल का उपयोग करें।
  3. एक OS प्रणाली संपत्ति

JVM

  • उपयोग करने के लिए XXXX संपत्ति एक -Dmyproject.mode दर्रा = मैं # 1 की तरह कुछ का उपयोग करने के लिए प्रोत्साहित करते हैं। निश्चित रूप से आप अपने ऐप (चींटी, एसबीटी, आदि) बनाने के लिए किसी प्रकार का टूल इस्तेमाल कर रहे हैं।

    कल्पना करें कि गलती से कोई व्यक्ति टॉमकैट को पुनर्स्थापित करता है, ओएस गुणों या इसी तरह को हटा देता है। आपका ऐप प्रोड मोड में चला सकता है।

  • 6

    प्रत्येक टोमकैट उदाहरण हमारे पास isProduction फ़ाइल के GlobalNamingResources अनुभाग में परिभाषित ध्वज है।

    server.xml:

    context.xml:

    <?xml version="1.0" encoding="UTF-8"?> 
    <Context ...> 
        <ResourceLink name="isProduction" global="isProduction" type="java.lang.Boolean" /> 
        ... 
    </Context> 
    

    <Server ...> 
        ... 
        <GlobalNamingResources> 
        <Environment name="isProduction" value="false" type="java.lang.Boolean" override="false" /> 
        </GlobalNamingResources> 
    
        <Service name="Catalina"> 
        ... etc ... 
        </Service> 
    </Server> 
    

    यह गुण context.xml में एक संपत्ति संसाधन का संदर्भ देता है बनाने के द्वारा पूरे एप्लिकेशन में उपलब्ध होने की अनुमति देता है मूल्य लाने के लिए:

    public boolean isProduction() { 
        Object o; 
        try { 
         o = (new InitialContext()).lookup("java:comp/env/isProduction"); 
        } catch (NamingException e) { 
         o = Boolean.FALSE; // assumes FALSE if the value isn't declared 
        } 
        return o == null ? Boolean.FALSE : (Boolean) o; 
    } 
    
    संबंधित मुद्दे