ডাব্লুএসওডি প্রতিস্থাপনের জন্য বন্ধুত্বপূর্ণ ত্রুটি পৃষ্ঠা


10

এটি করা সবচেয়ে সহজ জিনিস হওয়া উচিত, তবে কোনও কারণে আমি এটি সম্পন্ন করতে পারি না।

আমি দুষ্টু 500 দৃশ্যের প্রতিস্থাপনের জন্য একটি বন্ধুত্বপূর্ণ স্ট্যাটিক ত্রুটি পৃষ্ঠা পাওয়ার চেষ্টা করছি। আপাতত আমি আমার থিমটিতে আমার টেমপ্লেট.এফপি এর শীর্ষে কিছু বকাবকি অক্ষর ফেলে আমার স্থানীয় মেশিনে (দ্রুপাল M এমএএমপিতে চলমান) একটি 500 পরিস্থিতি তৈরির চেষ্টা করছি, যা 500 পরিস্থিতিকে ট্রিগার করে, তবে এর জন্য আমার .htaccessবা অ্যাপাচি কনফিগারেশনের ফাইলটিতে ত্রুটি ডকুমেন্টের নির্দেশের কোনও প্রভাব নেই reason

আমি যা করছি তা হ'ল এটি:

ErrorDocument 500 /500.html

এবং আমার সাইটের মূলটিতে আমার কাছে সবচেয়ে সহজতম স্ট্যাটিক এইচটিএমএল পৃষ্ঠা রয়েছে যার নাম 500 এইচটিএমএল রয়েছে।

তবুও, আমি যখন ইচ্ছাকৃতভাবে টেম্পলেট.এফপি ভেঙে ফেলি, তখন আমি আমার সুন্দর বন্ধুত্বপূর্ণ ত্রুটির পৃষ্ঠার পরিবর্তে ভয়ঙ্কর হোয়াইট স্ক্রিন অফ ডেথ পাই।

আমি এখানে কি ভুল করছি? নন-ড্রপাল সেটআপগুলিতে আমি এটি এক বিলিয়ন বার করেছি তবে কেবল এটিকে ঘিরে আমার মাথা পেতে পারি না।


আপডেট : মনে হচ্ছে এই মুহূর্তে অ্যাকুইয়ার ডেভ ক্লাউড হিসাবে আমাদের নির্দিষ্ট ব্যবহারের ক্ষেত্রে এই প্রশ্নগুলি বেশ নিখরচায় রয়েছে যা আমরা এই মুহূর্তে 500-সিরিজের ত্রুটি পৃষ্ঠাগুলি কাস্টমাইজ করতে সমর্থন করি না question আশা করছি তারা শীঘ্রই এর জন্য সমর্থন বাস্তবায়ন করবে।


আপনি যদি drupal_add_http_header('Status', '503 Service Unavailable');আপনার 500 এইচটিএমএল যুক্ত করেন তবে কী হবে ?
অপেশাদার বারিস্তা

উত্তর:


2

500 ত্রুটি পৃষ্ঠাগুলি কঠোরভাবে সার্ভার ত্রুটি পৃষ্ঠা। একবার সার্ভার পিএইচপি-র কার্যকরকরণ বন্ধ করে দিলে, ড্রুপাল / পিএইচপি তাদের নিজস্ব ত্রুটি পৃষ্ঠা পরিবেশন করার জন্য দায়বদ্ধ। আপনি কোনও HTTP 500 স্ট্যাটাস শিরোনাম সহ যখন কোনও try...catchব্লকের মধ্যে কিছু নির্দিষ্ট ত্রুটি পায় তখন ব্যবহারকারীকে কাস্টম ত্রুটি পৃষ্ঠায় পুনর্নির্দেশ করতে ড্রুপালকে বলার চেষ্টা করতে পারেন ।

তবে নোট করুন যে কিছু ডাব্লুএসওডিগুলি সিস্টেম স্তরে ঘটতে পারে এবং এগুলি মারাত্মক ত্রুটি সৃষ্টি করতে পারে যা তাত্ক্ষণিকভাবে কার্যকর করা বন্ধ করে এবং সম্ভবত মৃত্যুদন্ড কার্যকর catchকরতে বাধা দেয় । এর একটি উদাহরণ হ'ল যখন আপনার ডাটাবেসটি নির্দিষ্ট আকারের প্রশ্নগুলি হ্যান্ডেল করার জন্য সঠিকভাবে সুর না করা হয় (যেমন কোনও বৈশিষ্ট্য সমস্ত ক্রিয়াকলাপটি উল্টিয়ে দেওয়ার সময়) - ডাটাবেস শ্বাসরোধ করতে পারে, আপনাকে একটি ইনস্টা-ডাব্লুএসওডি দেয়।

আমি বলতে চাই যে সবচেয়ে ভাল জিনিস হ'ল আপনার অ্যাপাচি, মাইএসকিউএল এবং পিএইচপি ত্রুটিযুক্ত লগগুলি পরীক্ষা করা এবং কেস-বাই-কেস ভিত্তিতে ডাব্লুএসডির মূল কারণকে আলাদা করার চেষ্টা করুন, এগুলি একটি চমত্কারভাবে কভার করার চেষ্টা করার বিপরীতে- ত্রুটি পৃষ্ঠা সাধারণত 500 টি সার্ভারের ত্রুটি পৃষ্ঠাগুলির কারণ হিসাবে ত্রুটিগুলি কখনও কখনও অনিবার্য হয় না এবং উত্পাদনে কাস্টম সার্ভার ত্রুটি পৃষ্ঠাগুলি থাকা সম্ভব হয়, ডাব্লুএসওডিগুলি সরাসরি ঘটে না।

দেখে মনে হচ্ছে আপনার সার্ভারের ত্রুটি পৃষ্ঠাগুলি সঠিকভাবে সেট আপ হয়েছে। আপনার কেবলমাত্র পার্থক্যটি তৈরি করতে হবে যে সাধারণ সার্ভার ত্রুটি পৃষ্ঠাগুলি! = ডাব্লুএসওডস। উচ্চ ট্র্যাফিক এবং রিসোর্স বাধাজনিত কারণে সার্ভার ত্রুটি পৃষ্ঠাগুলি ট্রিগার করা যেতে পারে, তবে আপনার উত্পাদন, পিরিয়ডে সত্যই ডব্লুএসওডি হওয়া উচিত নয়। এগুলি সাধারণত দুর্বল কোডিং, অপ্টিমাইজেশন বা কনফিগারেশনের কারণে ঘটে। আপনি যদি এখনও কোনও ডাব্লুএসওডি দেখতে পান তবে নিশ্চিত হয়ে নিন যে আপনি প্রথমে সমস্যার মূল কারণটি খুঁজে পেয়েছেন (এবং সমাধান করেছেন), এতে ব্যান্ড-এইড প্রয়োগের চেষ্টা করার বিপরীতে।


4
আপনার উত্তরের জন্য ধন্যবাদ. মূল কারণ / চিকিত্সার লক্ষণগুলির বিষয়ে আপনি একেবারেই সঠিক। এটি ত্রুটিযুক্ত পৃষ্ঠাগুলির প্রয়োজনীয়তার সাথে অপ্রাসঙ্গিক কারণ এটি সত্য যে কোনও পরিষেবার জীবনকালীন সময়ে ত্রুটিগুলি ঘটবে এবং সেই পরিস্থিতিতে খালি পৃষ্ঠাগুলি বা সাদাটে জেনেরিক ব্ল্যাক না করে পরিস্থিতিটি সুন্দরভাবে ব্যবহারকারীদের কাছে পৌঁছে দেওয়া ভাল always "সার্ভার ত্রুটি" পৃষ্ঠাগুলি। টুইটার একটি উদাহরণ হিসাবে তিমি ব্যর্থ। এটি পেশাদার ত্রুটির প্রোফাইলিংয়ের প্রয়োজনীয়তা সরিয়ে দেয় না, তবে অন্তর্বর্তীকালীন ব্যবহারকারীদের কম রাগান্বিত করে।
টমমি ফোর্সট্রাম

1
এছাড়াও, এই ক্ষেত্রে, স্তরগুলির মধ্যে পার্থক্য করার দরকার নেই যা থেকে ত্রুটিটি উদ্ভূত হয় (যতক্ষণ না এটি HTTP সার্ভারের নীচে থাকে) কারণ অ্যাপ্লিকেশন স্তরের ত্রুটিগুলির জন্য আমার কেবল ক্যাচ-সমস্ত প্রক্রিয়া প্রয়োজন, এটি ডাটাবেস ক্রাশ হচ্ছে কিনা? , কেউ ক্রেপ কোড করছে (এবং এটি আমাদের পরীক্ষার কাভারেজ কেটে দিচ্ছে) এবং অন্য কোনও কল্পনাযোগ্য এখনও অপ্রত্যাশিত ত্রুটি পরিস্থিতি রয়েছে। তবে প্রশ্নটিতে আপডেট হওয়া হিসাবে, এই মুহুর্তে এটি আমার কাছে অপ্রাসঙ্গিক কারণ আকুইয়ার দেব মেঘ এই মুহুর্তে 500-সিরিজের ত্রুটি পৃষ্ঠাটি কাস্টমাইজ করার পক্ষে সমর্থন করে না।
টমমি ফোরস্ট্রোম

"আকুইয়ার ডেভ ক্লাউড এই মুহুর্তে 500-সিরিজের ত্রুটি পৃষ্ঠাগুলি কাস্টমাইজ করার পক্ষে সমর্থন করে না" " ওহ শকস, এটি জেনে রাখা ভাল।
অপেশাদার বারিস্তা

যদিও অ্যাকুইয়ার শক্তিশালী দেব ক্লাউডের সাথে মলমে এটি প্রায় একমাত্র উড়াল এবং তারা সম্ভবত অদূর ভবিষ্যতে এটি বাস্তবায়ন করতে পারে। আমি দেব মেঘের পক্ষে যথেষ্ট উচ্চারণ করতে পারি না। এটি ড্রুপাল পরিষেবাগুলি চালু করার জন্য একটি দুর্দান্ত প্ল্যাটফর্ম!
টমমি ফোরস্ট্রোম

1

আপনি ডাব্লুএসওডি পাচ্ছেন কারণ আপনি পিএইচপি.আইএনআই-এ ত্রুটি প্রতিবেদন বন্ধ করে দিয়েছেন। এটি একটি সুরক্ষা ইস্যু - যদি আপনার কোনও ত্রুটি হয় এবং হ্যাকার এটি কী তা দেখেন, তিনি সম্ভবত সাইটটি হ্যাক করার জন্য এটি ব্যবহার করতে পারেন।

আপনি যদি ত্রুটিটি আটকাতে চান তবে, আপনাকে php.ini এ ত্রুটিগুলি দেখানো সক্ষম করতে হবে (উদাহরণে কেবল গুরুতর ত্রুটি দেখা যাবে):

error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT

এবং তারপরে, আপনি htaccess ফাইলে ত্রুটি নথি সেট করতে পারেন:

ErrorDocument 401 http://yourwebsite.com/error-401
ErrorDocument 403 http://yourwebsite.com/error-403
ErrorDocument 500 http://yourwebsite.com/error-500

অন্যথা, আপনি Drupal এর এর মধ্যে ত্রুটি নির্দিষ্ট করতে পারেন settings.php ফাইল।

এনজিআইএনএক্সে:

error_page 403 = /error.php?code=403;   
error_page 404 = /error.php?code=404;
error_page 500 = /error.php?code=500;

যেহেতু আপনি এমএএমপিতে অ্যাপাচি চালাচ্ছেন, তাই এটি htaccess এ সেট করুন। মনে রাখবেন যে AllowOverrideঅ্যাপাচি কনফিগারেশনে থাকা উচিত (সাধারণত এটি থাকে)।


ErrorDocument
দ্রুপালে

500 টি ত্রুটি সাধারণত দ্রুপালে সেট করা যায় না। এগুলি অ্যাপাচি ব্যবহার করা হলে ড্রুপালের - htaccess এর আগে সেট করা দরকার। এনজিআইএনএক্স - আপডেট টিকিট দেখুন।
আলেক্সি রায়ু

যে আমি বোঝানো কি. আপনি কি কোনও htaccess এ সেট করা 500 টি ত্রুটির জন্য একটি ত্রুটিযুক্ত ডকুমেন্টের নির্দেশিকা পেতে সক্ষম হয়েছেন বা একটি ড্রুপাল সাইটের জন্য কার্যত কোনও vhost কনফিগারেশন রয়েছে? আমার অভিজ্ঞতাগুলিতে সেই নির্দেশগুলি অগ্রাহ্য করা হয়েছে, দ্রুপাল ত্রুটি পরিচালনার দায়িত্ব নেয়।
সিডিএমও

0

আপনি কি ত্রুটি রিপোর্টিং চালু করেছেন? (প্রশাসক / কনফিগারেশন / উন্নয়ন / লগিং -> ত্রুটি বার্তাগুলি প্রদর্শনের জন্য সমস্ত বার্তা সেট করুন )

ডিফল্টরূপে, দ্রুপাল একটি সুরক্ষা বৈশিষ্ট্য হিসাবে একটি ডাব্লুএসওডি দেখায়।


যথেষ্ট মজার, এটি চালু আছে এবং আমি এখনও ডাব্লুএসওডি পেয়েছি।
টমমি ফোর্সট্রাম

সেক্ষেত্রে এটি সম্ভবত এমএএমপি ইস্যু, কোনও দ্রুপাল সমস্যা নয়। Php.ini এ ত্রুটি প্রতিবেদন চালু করার চেষ্টা করুন ( ফোরাম.ম্যাম্প.इन.ফো / ভিউটোপিক.পিপি? ফাফ ২২ & টি=৮7777 )) এমএএমপিতে ত্রুটি প্রদর্শন ডিফল্টরূপে অক্ষম করা আছে।
প্যাট্রিক কেনি

1
আমি পিএইচপি ত্রুটিগুলি সূক্ষ্ম প্রদর্শিত পেতে পারি। এটা আসলে সমস্যা নয়। টুইটারের ব্যর্থ তিমির মতো ত্রুটিগুলি ঘটলে আমি বন্ধুত্বপূর্ণ কিছু প্রদর্শন করতে সক্ষম হতে চাই। এটিই আমি ঘটতে পারি না: 500-সিরিজের ত্রুটির জন্য কাস্টম ত্রুটি পৃষ্ঠা।
টমমি ফোর্সট্রাম

0

আমি অনুমান করি উত্তরটি "ডক্সগুলি পড়ুন", https://www.drupal.org/node/195435 দেখুন

তাই মূলত আপনি টেমপ্লেট ফাইল নামে তৈরি করতে পারেন maintenance-page.tpl.phpএবং maintenance-page--offline.tpl.phpএবং হার্ড কোড কিছু সেটিংস settings.php

সম্পাদনা করুন:

এটা কোন ব্যাপার কি স্তর বলে মনে হচ্ছে না error_reportingঅথবা কিনা সেট করেছেন সেট করা হয় display_errorsকরতে onবা off। আপনার যখন maintenance-page--offline.tpl.phpজায়গায় একটি ফাইল থাকবে তখন ডাটাবেস চলে গেলে ড্রুপাল এই পৃষ্ঠাটি প্রদর্শন করবে। আপনি /admin/config/development/loggingঅ্যাডমিন দিক থেকে কী সেট করেছেন তা বিবেচনা করে না । যদি আপনার কেবল সিনট্যাক্স ত্রুটি থাকে, যা ওপি-র পরিস্থিতি ছিল, যা আসলে 500 টি ট্রিগার করবে না, এটি একটি 200 পিএইচপি ত্রুটি সহ php.ini display_errorসেট প্রদর্শিত হয় বা লুকানো থাকে । প্রয়োজন অনুসারে আপনার কাস্টম কোড জুড়ে আপনার কাস্টম ত্রুটি পরিচালনা করার যুক্তি যুক্ত করা ছাড়া আর কোনও উপায় নেই।


আমি কেন এখানে নীচে নামলাম তা নিশ্চিত নই, আমি যখন অনুগ্রহটি সেট করি তখন এই উত্তরটি আমি খুঁজছিলাম। অপর পক্ষে অন্য কোনও নয়, আপনি যদি নিজের স্ট্যান্ডার্ড ত্রুটি পৃষ্ঠাটি আরও বিশদভাবে জানাতে চান তবে আপনি ত্রুটি-পূর্বকে সেট করতে পারেন এবং স্ট্যান্ডার্ড পিএইচপি ত্রুটি বিজ্ঞপ্তিতেও যুক্ত করতে পারেন।
সিডিএমও

0

অন্য কোনও ডাব্লুএসওডকে প্রতিস্থাপনের জন্য হ্যাকিং কোরের প্রয়োজন হবে: আপনি এটি করতে চান না। ড্রুপাল তার নিজস্ব ত্রুটি হ্যান্ডলারগুলি বুটস্ট্র্যাপ.ইনক এবং ত্রুটি.সকে সংজ্ঞায়িত করে। আপনি যদি সেই কোডটি নিয়ে ঘাঁটাঘাঁটি করেন তবে আপনাকে অবশ্যই নিশ্চিত করতে হবে যে কার্যকর হওয়া এই পর্যায়ে পৌঁছানোর সময় ভুল হতে পারে এমন সমস্ত জিনিসের জন্য আপনি জবাবদিহি করেছেন (কোনও ডাটাবেস, কোনও থিম ইঞ্জিন, কোনও থিম, কোনও কনফিগারেশন ইত্যাদি)।


কখনও কি পিএইচপি এর ত্রুটি_অ্যাপেন্ড এবং ত্রুটি_প্রিপেন্ড বিকল্পগুলি ব্যবহার করার চেষ্টা করেছেন? ত্রুটি বার্তাটি এখনও প্রদর্শিত হবে বলে মনে হচ্ছে, আপনি অনেক ভাল 500 টির প্রস্তাব দিতে পারেন (মঞ্জুরিপ্রাপ্ত, সমস্ত পিএইচপি ত্রুটিগুলি যে একটি হোয়াইটস্ক্রিন প্রযুক্তিগতভাবে অনেকগুলি সিনট্যাক্স ত্রুটির মতো 500 প্রতিক্রিয়া সৃষ্টি করে।)
সিডিএমও

সত্য। যেভাবেই আপনাকে একই সাধারণ পয়েন্টে নিয়ে যায়: আপনি এটি করতে পারবেন না।
অ্যাক্রোসম্যান

0

এটি করার জন্য আমি একটি স্যান্ডবক্স প্রকল্প তৈরি করেছি ।

আমি / src/ EventSubscriber/ fiveh শতাব্দী এভেনটিউসসক্রাইবার.এফপি এইচটিপিএক্সসেপশনসুবসক্রাইবারকে বাড়িয়ে এটি সম্পাদন করতে সক্ষম হয়েছি

    <?php
namespace Drupal\five_hundred\EventSubscriber;

use Drupal\Core\EventSubscriber\HttpExceptionSubscriberBase;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\Serializer\SerializerInterface;

class five_hundredEventSubscriber extends HttpExceptionSubscriberBase {

      public function __construct($stack) {

        if(
          (
            null !== $stack->getCurrentRequest()->attributes->get('exception')->getCode()
            && $stack->getCurrentRequest()->attributes->get('exception')->getCode() == 500
          )||(
            null !== $stack->getCurrentRequest()->attributes->get('exception')->getStatusCode()
            && $stack->getCurrentRequest()->attributes->get('exception')->getStatusCode() == 500
          )
        ){
            $response = new Response();
            $errorDocumentHtml = 'html here';
            $response->setContent($errorDocumentHtml);
            $response->setStatusCode(500, '500 Internal Server Error');
            $response->send();
            die();
        }
      }

      /**
       * {@inheritdoc}
       */
      protected function getHandledFormats() {
        return array('html','');
      }


    }
?>

এবং আপনার পরিষেবাটি আপনার মডিউল. সার্ভিসেস.আইএমএলে যুক্ত করতে হবে

services:
  five_hundred.:
    class: Drupal\five_hundred\EventSubscriber\five_hundredEventSubscriber
    arguments: ['@request_stack']
    tags:
      - { name: event_subscriber }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.