メインコンテンツに移動
ホーム

古松

メインナビゲーション

  • ホーム
  • ビデオ
  • ご連絡

パンくず

  • ホーム
  • Drupal8 : エラーが発生時にキャッチされないことがしばしばあって、注意する必要がある

Drupal8 : エラーが発生時にキャッチされないことがしばしばあって、注意する必要がある

Drupal8がエラーをキャッチしないことがよくあります

  • デバッグモードでないと、いろいろなエラーがキャッチされなく、そのままスローされてしまい、システムログファイルにも残らず、わからなくなります
    • デバッグモード:例、xdebugを有効化にして、xdebug.show_exception_trace = true を設定すればエラーがDrupalの画面に表示されます
  • 例:Drupal-8.8.5のログインすると、VCCodeのデバッグモードで以下のエラーが表示されます
    • Exception has occurred.
      Drupal\Core\Database\DatabaseExceptionWrapper: SQLSTATE[42S02]: Base table or view not found: 1146 Table '2drills-d8.flood' doesn't exist: SELECT 1 FROM {flood} LIMIT 0, 1; Array
      (
      )
      Drupal8にキャッチされないエラー:flood
    • なぜか、Floodというテーブルがないようです
    • Floodは、Drupal7時にあるセキュリティ関連モジュール:Floodのことから出たと思います。Drupal8が最初このモジュールをコアーに編入したが、いつの間にかこれモジュールをコアーから外したようです。外した時に、コアーのところに、Floodモジュールのコードがそのまま残っていて、Floodロジックが作動したときに、エラーが発生しました。

アンキャッチされたエラーがそのまま放置か、関連モジュールの導入

  • この問題では、関連モジュールの動作でエラーを引き起こしましたが、そのままにしてDrupal8に問題はなさそうです
    • エラーをスローしたが、最後ではキャッチしていないため、なんの問題を生じませんでした
  • 上記モジュール:Floodがコアーから外されたようで、実際に別のモジュール:Flood Settingが同じ機能を果たしています。このモジュールをインストールすれば、上記エラーは発生しませんでした。
    • Flood SettingsがFloodテーブルをDBに作成したので、上記エラーが発生しなくなります
    • Floodのロジックは依然作動していて、パフォーマンスに影響は多少あるでしょう。このモジュールをインストールしたといって、問題解決ではありません

drupal8 : URLをサブディレクトリに転送じに生じたエラー及び対処法

レンタルサーバーでDrupal8のURLをサブディレクトにリダイレクト

  • レンタルサーバーでの複数のURLをそれぞれのディレクトリに振り分け設定が難しい場合があります。
  • .htaccessでそれぞれのURLをルートディレクトからサブディレクトリにリダイレクトすることがよく使われます
    • root directory(document_root): php  ← url(http://2drill.local)がここに来る
    • sub directory: 2drills-d8
    • URL: http://2drill.local
      redirect url to sub directory
  • ここで、.htaccessより2drills-d8サブディレクトリにリダイレクトの記述は以下のよう
    RewriteEngine on 
    
    # automatically load sub-directory: 2drills-d8 <- 2drill.local
    #site
    #RewriteCond %{HTTP_HOST} ^2drill\.local$ [NC]
    RewriteCond %{HTTP_HOST} ^2drill\.local$ [NC]
    RewriteRule ^$ 2drills-d8/index.php [L]
    
    #files
    RewriteCond %{HTTP_HOST} ^2drill\.local$ [NC]
    RewriteCond %{DOCUMENT_ROOT}/2drills-d8%{REQUEST_URI} -f
    RewriteRule .* 2drills-d8/$0 [L]
    
    #url's
    RewriteCond %{HTTP_HOST} ^2drill\.local$ [NC]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)$ 2drills-d8/index.php?q=$1 [L,QSA]

     

  • Drupal8のインストールは無事できました

サブディレクトリよりページがリダイレクト時ににエラーが発生

  • Drupal8インストール直後に、サブディレクトリがURLに反映されています。例:ログインページ→http://2drill.local/2drills-d8/user/login
  • サブディレクトリをURLから削除して、ログインページにもアクセスができます
    • 各リンクのサブディレクト名を消すために、DB上ですべてのキャッシュを消す必要があります
      TRUNCATE `cache_bootstrap`;
      TRUNCATE `cache_config`;
      TRUNCATE `cache_container`;
      TRUNCATE `cache_data`;
      TRUNCATE `cache_default`;
      TRUNCATE `cache_discovery`;
      TRUNCATE `cache_dynamic_page_cache`;
      TRUNCATE `cache_entity`;
      TRUNCATE `cache_menu`;
      TRUNCATE `cache_page`;
      TRUNCATE `cache_render`;

       

  • サブディレクトなしで、ログインページ(http://2drill.local/user/login)でログインをすると、以下のエラーが発生サブディレクトありのエラー
    • Redirects to external URLs are not allowed by default, use \Drupal\Core\Routing\TrustedRedirectResponse for it.
  • このメッセージを調べてみたら、coreのRedirectResponseSubscripber.phpから出たものです
    リダイレクト時にエラーが発生
  • 原因:  $safe_response = LocalRedirectResponse::createFromRedirectResponse($response); に、LocalRedirectResponseに、サブディレクトが含まれると、エラーが発生します
  • ここの記述から見ると、LocalRedirectResponseを使用せず、TrustedRedirectResponseを使用すれば、エラーが発生しないです

サイトの設定ファイル(settings.php)でサブディレクトを消去

  • coreのRedirectResponseSubscripber.phpを修正することができます
    • LocalRedirectResponseを使用せず、TrustedRedirectResponseを使用するように修正
    • この修正が次のDrupal8更新時に消されるでしょう(Drupalのアップグレード)
    • アップグレード都度にこの修正を行うのはナンセンスです
  • Googleで同じ問題の対処法を調べてみたら、サイトの設定ファイル(settings.php)にサブディレクトを消去する方法があります
    • $GLOBALS['request']のSCRIT_NAMEにあるサブディレクト名を消す記述を追加します
      if ( 
      		isset($GLOBALS['request']) && 
      		preg_match('/\/2drills-d8/', $GLOBALS['request']->server->get('SCRIPT_NAME') )
      	) {
      	$GLOBALS['request']->server->set('SCRIPT_NAME', preg_replace('/\/2drills-d8/','',$GLOBALS['request']->server->get('SCRIPT_NAME')) );
      }
      
    • Drupalのアップグレード時に、サイトの設定ファイル(settings.php)が更新されないので、毎回修正する必要はありません

 


検索フォーム

カテゴリ別

  • laravel
  • drupal
  • javascript
  • windows
  • html
  • mysql
  • php
  • apache
  • css
  • SEO
  • video
  • wordpress
  • linux
  • python
  • Electron
  • Visual Studio Code

google ads