سؤال

لقد كنت أستخدم جملة وأنا أحب منشأتها الإدارية لوضع الموقع للصيانة. كما رأيت، جميع طلبات الموقع إذا كان في وضع الصيانة يتم توجيهها إلى صفحة واحدة. إذا كنت أرغب في إضافة وحدة "موقع لأسفل للصيانة" لموقع غير جملة، كيف أفعل هذا؟ أنا أستخدم إطار MVC في PHP يسمى Kohana في الإصدار 2 الذي يشبه Codeigniter. لدي فئة جهاز التوجيه حيث يمكنني التحكم فيها حيث تذهب عنوان معين. النهج الوحيد الذي يمكنني التفكير فيه هو إعادة توجيه كل طلب إلى وظيفة وحدة تحكم معينة عندما يكون الموقع إلى أسفل، ولكن كيف أفعل هذا؟ لا أستطيع إعادة توجيه جميع عناوين URL يدويا؟

هل كانت مفيدة؟

المحلول

كوهانا 3.: يمكنك تحديد طريق الصيد كل ما في حياتك bootstrap.php قبل Kohana::modules() خطوط:

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'));
    }
}

كما ترون، هناك بالفعل طرق كثيرة كيفية القيام بالأشياء في كوهانا لأنها إطار فب مرن للغاية :)

نصائح أخرى

إلقاء نظرة على التوجيه توثيق. وبعد يجب أن تكون قادرا على استخدام تعبير منتظم يعيد توجيه أي URI إلى وحدة تحكم / إجراءات محددة. السؤال الوحيد المتبقي سيكون كيفية تشغيل هذه القاعدة / إيقاف.

يمكنك التحقق من علامة قاعدة البيانات في رأس مشترك (يفترض أن لديك بعض المشتركة تتضمن قاعدة البيانات وما إلى ذلك)، وإذا تم تعيين العلم، فقم بتقديم صفحة معينة وخروج (تأكد من القيام بكل الأشياء المعتادة بالتنظيف مثل إغلاق اتصالات قاعدة البيانات وغيرها).

هل تقوم بتشغيل Apache؟ أضف هذا إلى .htaccess ملف في جذر الويب الخاص بك (أو إلى إعلان Vhost الخاص بالموقع) لإعادة توجيه جميع الطلبات إلى صفحة "ضمن الصيانة":

Redirect 301 / /maintenace_page.html

أستطيع أن أفكر في أفكارين لجعل هذا يحدث.

  1. وقال مثل لاري، استخدم تعبيرات منتظمة لإعادة توجيه جميع الطلبات إلى موقع معين. لذلك، أولا، ستحدد ما إذا كان الموقع في وضع الصيانة (ربما يستخدم إشارة قاعدة بيانات أو إعداد ملفات التكوين)، ثم إذا كان كذلك، استخدم ميزة التعبير العادية للتوجيه لإعادة توجيه جميع حركة المرور إلى مكان واحد.

  2. يمكنك التحقق مما إذا كان الموقع في وضع الصيانة في منشئ كل وحدة تحكم وإعادة توجيه حسب الحاجة. ربما لا يكون هذا هو الحل الأمثل لأنك تكرر نفس الرمز لكل وحدة تحكم. لذلك، على الرغم من أنه سيعمل، فمن المحتمل أن تكون أفضل حالا مع التعبيرات العادية.

التوجيه في كوهانا: http://docs.kohanaphp.com/general/routing.

تعبيرات PHP العادية: http://www.php.net/manual/en/Reference.pcre.pattern.syntax.php.

تحكم في كوهانا: http://docs.kohanaphp.com/general/controllers.

في index.php تحديد ثابت يسمى in_maintance

خلق رد الاتصال مثل ذلك في ملف هوك:

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_mainense إلى True وستتم إعادة توجيه جميع الطلبات إلى صفحة الصيانة الخاصة بك.

انظر هدف / وثائق هوك لمزيد من المعلومات حول إنشاء خطاف.

طريقة أخرى للتبديل هذا هي التحقق من ملف: إذا كان موجودا، فإن الصيانة بدأت كذلك تشغيل الموقع.

إذا كان الأمر كذلك، يمكنك القيام بأي من الأشياء المذكورة أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top