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/tenant
、sites/tenant2
、sites/tenant3
などの複数のテナントがあります。
たとえば、私はsites/tenant
ディレクトリからdrush
を実行していますが、Drushは私のDrupalインストールを認識しません。伝統的に、更新する前にdrush
それらの内部から、すべてが機能します。
このパッチは私にとってうまくいきました https://github.com/drush-ops/drush/pull/30 。
参考までに、これは修正です。Drush内のinclude/environment.incに次の行を追加します。
$path = str_replace('/', DIRECTORY_SEPARATOR, $path);
直前:
$path = explode(DIRECTORY_SEPARATOR, $path);
次のチェックを実行する必要があります。
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 root
、Database 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を有効として定義している方法を確認してください(- 候補 は次のとおりです: DrupalBoot6
、 DrupalBoot7
、 DrupalBoot8
)、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.inc
、misc/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(シェルコマンド)をデバッグするための推奨手順を以下に示します。
PHP xdebug
extension をインストールして有効にします。 php71 -i | grep xdebug
で確認します。
以下のxdebug ini設定を検討してください。 xdebug.ini
見やすくするため。
空のフォルダに、クリーンなDrupalをインストールします。
drush -y qd --no-server --core=drupal-8
cd quick-drupal-*/drupal*
Drupal root、設定ファイル、Databaseがdrush status
に存在することを確認します。
動作中のトレースファイルを生成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
で指定します。
成功した場合、トレース出力ファイルは最後に出力されるはずなので、メモしておいてください。
上記と同じコマンドの別のトレースファイルを生成しますが、機能しない場所に作成します。
opendiff
など)、違いを確認します。より適切な形式にするには、これらのファイルから最初の40列を削除します(例:ex +'%norm 40dl' -scwq file.xt
)。Drushバグを見つけたと思われる場合は、 GitHubの問題のページ で詳細を報告してください。