web-dev-qa-db-ja.com

「Drupalサイトが見つかりませんでした」-WindowsおよびSQL Server

Drush 6からDrush 8にシステムをアップグレードしようとしています。これは、現在サポートされているDrushのバージョンであり、Drupal 7をサポートしています。Drushを機能させることができましたが、私たちの環境をDrupal環境として認識しません。

drush cc allを実行すると、次のようになります。

Drupalサイトが見つかりませんでした。'drush 'キャッシュのみがクリアされました。

他のDrushコマンド(サイトディレクトリから)を実行すると、次のようになります。

コマンド 'command'を実行するには、より高いbootstrapレベルが必要です。

drush statusを実行しても、DB情報はまったく返されません。

現在、このようにかなりの数の質問と多くの推奨される解決策があるようですが、私の環境には何も関係がありません。私はWindows ServerマシンでIIS、SQLサーバー(MySQLではない)を使用している)を使用しているため、適用できる解決策はありません。これを私の内で解決するアイデアがあるかどうか疑問に思っています現在の環境?


Drush 8にアップグレードする前に(Drush 6を使用して)、これらの環境はすべて問題なく機能しました。

drush -v statusの出力:

Loading outputformat engine.                                 [notice]
 PHP configuration      :  "C:\Program Files (x86)\PHP\5.6.26\php.ini"
 PHP OS                 :  WINNT
 Drush script           :  location/of/drush
 Drush version          :  8.1.13
 Drush temp directory   :  temp/location
 Drush configuration    :
 Drush alias files      :
Command dispatch complete                                    [notice]

settings.phpファイルデータベースの設定:

$databases['default']['default'] = array(
  'database' => 'databasename',
  'username' => 'username',
  'password' => 'password',
  'Host' => 'hostName',
  'driver' => 'sqlsrv',
);

drush sql-connectコマンドを実行すると、次が返されます。

クラスDrush\Sql\Sqlを読み込めません。

一致するSQLクラスが見つかりません。

Drushはデータベース接続の詳細を見つけることができません。

また、drush site-installは問題なく機能します。これは、機能しない新しく作成された領域内でDrushを実行しているだけです。


明確にするために、私はマルチテナントインストールを使用しているため、sites/tenantsites/tenant2sites/tenant3などの複数のテナントがあります。

たとえば、私はsites/tenantディレクトリからdrushを実行していますが、Drushは私のDrupalインストールを認識しません。伝統的に、更新する前にdrushそれらの内部から、すべてが機能します。

1
Arak Tai'Roth

このパッチは私にとってうまくいきました https://github.com/drush-ops/drush/pull/30

参考までに、これは修正です。Drush内のinclude/environment.incに次の行を追加します。

$path = str_replace('/', DIRECTORY_SEPARATOR, $path);

直前:

$path = explode(DIRECTORY_SEPARATOR, $path);
0
Arak Tai'Roth

次のチェックを実行する必要があります。

  • SQL Serverについては、READMEのファイル SQL Server driver for Drupal 7 =適切な要件とインストール手順を確認します。関連項目: MS SQLをDrupalで使用できます

  • データベースクライアント(sqlcmdなど)コマンドがグローバルに(コマンドラインから)存在することを確認します。それ以外の場合は、そのパスがPATHシステム変数に追加されていることを確認してください。参照: Sqlsqlsrv.php

  • Drushの内部キャッシュをクリアして、再試行します。

    drush cc drush
    
  • マルチサイト環境を使用している場合は、使用する適切なDrupalサイトを指定してください。

    drush --uri=http://site1.example.com status
    

    または:

    drush -l http://site2.example.com status
    

    注:特定のsites/defaultフォルダーでコマンドを実行しない限り、Drushはデフォルトでsites/を使用します。

    注:DrupalサイトのURIを定義するには、サイトごとに設定ファイルで$base_urlを設定します(または drushrc.php )。

  • drush status(デバッグ出力に-dを追加)を実行して、Drupal rootDatabase name、およびDatabase driverが正しく検出されているかどうかを確認します。そうでない場合は、コマンドをもう一度実行しますが、settings.phpファイルと同じフォルダーで、Drupal Settings Fileが認識されていることを確認します。適切な読み取り権限があることを確認する

  • drush sql-connectコマンドの出力で、正しいコマンドが返され、エラーがないかどうかを確認します。

    一致するSQLクラスがない場合、これは、drushが設定ファイルからdbドライバーを検出できないことを示しています。したがって、次のコマンドが現在のサイトパス(settings.phpを含むフォルダー)を返すことを確認してください。

    drush ev "echo drush_site_path();"
    

    空の場合は、正しいフォルダでdrushコマンドを実行していて、settings.phpが存在することを確認してください。

  • Drupal bootstrapオブジェクトが適切にロードされているかどうかを確認します。

    drush ev "print_r(drush_get_bootstrap_object());"
    

    その場合は、設定ファイルが読み取り可能かどうかを確認します。

    drush ev 'echo file_get_contents(drush_get_bootstrap_object()->conf_path()."/settings.php");
    

    そうでない場合、bootstrapオブジェクトがEmptyBootである場合、DrushがDrupal rootを有効として定義している方法を確認してください(- 候補 は次のとおりです: DrupalBoot6DrupalBoot7DrupalBoot8 )、for Drupal 7ロジック以下の通りです:

    function valid_root($path) {
      if (!empty($path) && is_dir($path) && file_exists($path . '/index.php')) {
        // Drupal 7 root.
        // We check for the presence of 'modules/field/field.module' to differentiate this from a D6 site
        $candidate = 'includes/common.inc';
        if (file_exists($path . '/' . $candidate) && file_exists($path . '/misc/drupal.js') && file_exists($path . '/modules/field/field.module')) {
          return $candidate;
        }
      }
    }
    

    したがって、次のファイルが存在することを確認してください:includes/common.incmisc/drupal.js、およびmodules/field/field.module Drupal root(ここで、$pathは、Drupal rootですが、 --root=path/to/drupalによって手動で指定されます。また、ファイルがユーザーによって読み取り可能であることを確認します(シンボリックリンクの場合、それらは適切なファイルをポイントしています。 ネットワーク共有 またはLinuxファイルシステムの場合は適切な権限)それ以外の場合はDrupalブートクラスファイル(例 DrupalBoot7.php 、Drushの一部)を編集し、どの条件をチェックして上記のvalid_root()メソッドをデバッグするか試してください。正確に失敗し、その理由。

    index.phpが存在するかどうかを確認するDrushコマンドの例:

    drush ev '$path = drush_get_context("DRUSH_SELECTED_DRUPAL_ROOT"); var_dump(file_exists($path . "/index.php"));'
    
  • 最後に、SQLクラスを次の方法でロードできるかどうかを確認します。

    drush ev 'var_dump(drush_sql_get_class());'
    
  • 異なるPHPバージョンで再テストすることを検討してください。

デバッグ中

drush statusが正しい詳細を返さないと仮定して、drush(シェルコマンド)をデバッグするための推奨手順を以下に示します。

  1. PHP xdebug extension をインストールして有効にします。 php71 -i | grep xdebugで確認します。

    以下のxdebug ini設定を検​​討してください。 xdebug.ini 見やすくするため。

  2. 空のフォルダに、クリーンなDrupalをインストールします。

    drush -y qd --no-server --core=drupal-8
    cd quick-drupal-*/drupal*
    
  3. Drupal root設定ファイルDatabasedrush statusに存在することを確認します。

  4. 動作中のトレースファイルを生成bootstrapプロセス:

    drush ev "xdebug_start_trace(); print_r(_core_site_status_table()); echo xdebug_get_tracefile_name(); xdebug_stop_trace();"
    

    別のPHP=バージョンでxdebugが有効になっている場合は、DRUSH_PHP=/path/to/phpで指定します。

    成功した場合、トレース出力ファイルは最後に出力されるはずなので、メモしておいてください。

  5. 上記と同じコマンドの別のトレースファイルを生成しますが、機能しない場所に作成します。

  6. 次に、いくつかのdiffツール(MeldDiffMergeopendiffなど)、違いを確認します。より適切な形式にするには、これらのファイルから最初の40列を削除します(例:ex +'%norm 40dl' -scwq file.xt)。

Drushバグを見つけたと思われる場合は、 GitHubの問題のページ で詳細を報告してください。

0
kenorb