2009-12-03 13 views
5

मैं जूमला का उपयोग कर रहा हूं और मुझे साइट को रखरखाव के लिए नीचे रखने के लिए इसकी प्रशासनिक सुविधा पसंद है। जैसा कि मैंने देखा है, साइट पर सभी अनुरोध अगर रखरखाव मोड में हैं तो एक पृष्ठ पर भेजा जाता है। यदि मैं गैर-जूमला साइट के लिए अपनी "साइट रखरखाव के लिए साइट" मॉड्यूल जोड़ना चाहता हूं, तो मैं यह कैसे कर सकता हूं? मैं अपने संस्करण 2 में कोहाना नामक PHP में एक एमवीसी फ्रेमवर्क का उपयोग कर रहा हूं जो कोडिग्निटर के समान है। मेरे पास राउटर क्लास है जहां मैं नियंत्रित कर सकता हूं कि एक निश्चित पता कहां जाता है। एकमात्र दृष्टिकोण जो मैं सोच सकता हूं, साइट के नीचे होने पर प्रत्येक अनुरोध को किसी विशेष नियंत्रक फ़ंक्शन पर रीडायरेक्ट किया जाता है, लेकिन मैं यह कैसे कर सकता हूं? मैं संभवतः सभी यूआरएल को मैन्युअल रूप से फिर से रूट नहीं कर सकता?"रखरखाव के लिए साइट डाउन" के लिए दृष्टिकोण

उत्तर

6

Kohana 3: आप Kohana::modules() लाइनों से पहले एक कैच-ऑल अपने bootstrap.php में मार्ग को परिभाषित कर सकते हैं:

if (/* check if site is in under maintenance mode */) { 
    Route::set('defaulta', '(<id>)', array('id' => '.*')) 
     ->defaults(array(
      'controller' => 'errors', 
      'action'  => 'maintenance', 
     )); 
} 

या आप भी अनुरोध के साथ गड़बड़ भी ऐसा ही करने कर सकते हैं:

if (/* check if site is in under maintenance mode */) { 
    echo Request::factory('errors/maintenance') 
     ->execute() 
     ->send_headers() 
     ->response; 
} 

कोहाना 2: आपको Controller का विस्तार करना होगा और 'रखरखाव के तहत' एक जोड़कर

abstract class Custom_Controller extends Controller { 

    public function __construct() 
    { 
     parent::__construct(); 
     if (/* check if site is in under maintenance mode */) { 
      $page = new View('maintenance'); 
      $page->render(TRUE); 
      exit; 
     } 
    } 
} 

या आप भी हुक प्रणाली का उपयोग कर सकते यह करने के लिए,: निर्माता में ई 'पेज का प्रदर्शन (लेकिन आप सुनिश्चित करें कि आपके सभी नियंत्रकों वेनिला एक के बजाय इस नियंत्रक वर्ग का विस्तार करने की जरूरत है) अपने hooks फ़ोल्डर में फ़ाइल (सुनिश्चित करें कि आप अपने config.php में हुक करने के लिए सक्षम बनाने के):

Event::add('system.ready', 'check_maintenance_mode'); 

function check_maintenance_mode() { 
    if (/* check if site is in under maintenance mode */) { 
     Kohana::config_set('routes', array('_default' => 'errors/maintenance')); 
    } 
} 

जैसा कि आप देख सकते हैं, वहाँ वास्तव में कई मायनों कैसे Kohana में सामान कर रहे हैं, क्योंकि यह एक बहुत लचीला पीएचपी ढांचे :)

है
2

आप एक सामान्य शीर्षलेख में डेटाबेस ध्वज की जांच कर सकते हैं (संभवतः आपके पास कुछ सामान्य शामिल हैं जो डेटाबेस से कनेक्ट होते हैं), और यदि ध्वज सेट किया गया है, तो एक विशेष पृष्ठ प्रस्तुत करें और बाहर निकलें (सभी को सुनिश्चित करना सुनिश्चित करना डेटाबेस कनेक्शन बंद करने जैसे सामान्य सफाई चीजें आदि)।

9

रूटिंग documentation पर नज़र डालें। आपको एक नियमित अभिव्यक्ति का उपयोग करने में सक्षम होना चाहिए जो किसी भी यूरी को किसी विशिष्ट नियंत्रक/क्रिया पर रीडायरेक्ट करता है। एकमात्र सवाल यह होगा कि उस नियम को चालू/बंद कैसे करें।

+0

मुझे यह विचार पसंद है। +1 – Abinadi

0

मैं ऐसा करने के लिए दो विचारों के बारे में सोच सकता हूं।

  1. लैरी की तरह, सभी अनुरोधों को किसी विशिष्ट स्थान पर रीडायरेक्ट करने के लिए नियमित अभिव्यक्तियों का उपयोग करें। तो, सबसे पहले आप यह निर्धारित करेंगे कि साइट रखरखाव मोड में है (शायद डेटाबेस ध्वज या कॉन्फ़िगरेशन फ़ाइल सेटिंग का उपयोग कर), तो यदि यह था, तो सभी ट्रैफ़िक को एक स्थान पर रीडायरेक्ट करने के लिए रूटिंग की नियमित अभिव्यक्ति सुविधा का उपयोग करें।

  2. आप यह जांच सकते हैं कि साइट प्रत्येक नियंत्रक के निर्माता में रखरखाव मोड में थी या आवश्यकतानुसार रीडायरेक्ट करें। यह शायद सबसे इष्टतम समाधान नहीं है क्योंकि आप प्रत्येक नियंत्रक के लिए एक ही कोड दोहराएंगे। तो, भले ही यह काम करेगा, आप शायद नियमित अभिव्यक्तियों के साथ बेहतर हो जाएंगे। Kohana में

रूटिंग: http://docs.kohanaphp.com/general/routing

पीएचपी रेग्युलर एक्सप्रेशंस: http://www.php.net/manual/en/reference.pcre.pattern.syntax.php

Kohana में नियंत्रकों: http://docs.kohanaphp.com/general/controllers

1

आप अपाचे चला रहे हैं? अपने वेब जड़ में अपने .htaccess फाइल करने के लिए इस जोड़ें (या साइट के लिए vhost घोषणा करने के लिए) एक "रखरखाव के अंतर्गत" पृष्ठ पर सभी अनुरोधों पुनर्निर्देशित करने के लिए:

Redirect 301//maintenace_page.html

+0

जो अच्छा होगा लेकिन क्या मैं इसे एक php स्क्रिप्ट के साथ बंद कर सकता हूं यदि मैं चाहता हूं? – yretuta

+1

निश्चित रूप से। बस एक PHP स्क्रिप्ट संपादित करें। Htaccess और '#Redirect 301// maintainenace_page.html' के साथ' रीडायरेक्ट 301// maintainenace_page.html' को प्रतिस्थापित करें - '#' एक टिप्पणी पंक्ति को इंगित करता है, और रीडायरेक्ट निष्पादित नहीं किया जाएगा। – leepowers

0

अपने index.php में एक निरंतर बुलाया परिभाषित IN_MAINTENANCE

एक hook file में तो जैसे एक कॉलबैक बनाएँ:

function in_maintenance() 
{ 
    if(IN_MAINTENANCE) 
    { 
     Router::$controller = 'my_maintenance_controller'; 
     Router::$method = 'index'; 
    } 
} 

और system.post_routing घटना में रूप में जोड़ें।

Event::add('system.post_routing', 'in_maintenance'); 

आप अपनी साइट सही और सभी अनुरोधों का IN_MAINENANCE का मूल्य बदल अपलोड किए जाने पर अपने रखरखाव पृष्ठ पर पुनः निर्देशित किया जाएगा।

एक हुक बनाने के बारे में अधिक जानकारी के लिए Event/Hook documentation देखें।

0

फ़ाइल को जांचकर इसे टॉगल करने का एक और तरीका है: यदि यह मौजूद है, रखरखाव शुरू हो रहा है तो साइट को बंद कर दें।

यदि ऐसा है, तो आप ऊपर वर्णित किसी भी चीज को कर सकते हैं।

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