web-dev-qa-db-ja.com

Drush 8データベース接続の問題

データベースへの接続に問題があります。数日前に機能しましたが、なぜ機能しないのか理解できません。それはD8サイトです。 Drushのバージョンは8.1.12です。

Alias-fileとsettings.php-files(サーバーとローカルの両方)とデータベースの設定がすべて正しく表示されていることを確認しました。私のローカルサイトはMamp 4.1.1で実行されています。ネットワークアクセスが許可されます。

これは、sql-syncを実行するときに発生するエラーですdrush sql-sync @local @dev。 Rsyncは正常に動作します。

Unable to load class Drush\Sql\Sql                                                                                                                                                                                                                                 [error]
exception 'Drush\Sql\SqlException' with message 'Unable to find a matching SQL Class. Drush cannot find your database connection details.' in /vendor/drush/drush/commands/sql/sql.drush.inc:541                [error]
Stack trace:
#0 /vendor/drush/drush/commands/sql/sql.drush.inc(252): drush_sql_get_class()
#1 [internal function]: drush_sql_dump()
#2 /vendor/drush/drush/includes/command.inc(422): call_user_func_array('drush_sql_dump', Array)
#3 /vendor/drush/drush/includes/command.inc(231): _drush_invoke_hooks(Array, Array)
#4 [internal function]: drush_command()
#5 /vendor/drush/drush/includes/command.inc(199): call_user_func_array('drush_command', Array)
#6 /vendor/drush/drush/lib/Drush/Boot/BaseBoot.php(67): drush_dispatch(Array)
#7 /vendor/drush/drush/includes/preflight.inc(66): Drush\Boot\BaseBoot->bootstrap_and_dispatch()
#8 /vendor/drush/drush/drush.php(12): drush_main()
#9 {main}
sql-dump failed.

そして、これがaliases.drushrc.phpです(もちろん、私のローカルコピーには認証情報が含まれています)。

<?php

/* Tambourhinoceros Site */

$aliases["local"] = array (
 'root' => '', // local path
 'uri' => 'local.tambourhinoceros.net',  // local uri
 'path-aliases' =>
 array (
   '%dump-dir' => '/tmp',
   '%drush' => '/usr/local/bin',
   '%site' => 'sites/default',
 ),
 'remote-user' => 'tamb_dev', 
 'ssh-options' => '-T',
 'databases' =>
 array (
   'default' =>
   array (
     'default' =>
     array (
        'database' => '', // local database 
        'username' => '', // local database user
        'password' => '', // local database pw
        'Host' => 'localhost',
        'port' => '8889',
        'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
        'driver' => 'mysql',
        'prefix' => '',
      ),
    ),
  ),
);

$aliases["dev"] = array (
  'root' => '', // remote path
  'uri' => 'drupal-85630-297475.cloudwaysapps.com', // remote uri
  'path-aliases' =>
  array (
  ),
  'remote-Host' => '', remote IP
  'remote-user' => '', remote User
  'command-specific' =>
 array (
   'rsync' =>
   array (
     'mode' => 'rlptzO',
     'verbose' => true,
     'no-perms' => true,
   ),
 ),
 'databases' =>
 array (
   'default' =>
   array (
     'default' =>
     array (
        'database' => '', remote database
        'username' => '', remote  user
        'password' => '', remote pw
        'Host' => 'localhost',
        'port' => '',
        'driver' => 'mysql',
        'prefix' => '',
      ),
    ),
  ),
)
?>
1
Kristoffer Rom

解決しました。そしていつものように、問題は思ったよりずっと小さくてシンプルであることがわかりました...

ローカルパスの最後に「/ web」セグメントがありませんでした。追加すると、rsyncとsql-syncの両方が機能します。

すべての入力の人々に感謝します。

1
Kristoffer Rom

追加することで解決します

--root=/full/path/to/your/webroot

drushコマンドに。

1
Sourabhutani

ローカル接続で、「unix_socket」オプションを追加して、ローカルのmysqlソケットを指すようにします。

$databases['default']['default'] = array (
  'database' => '',
  'username' => '',
  'password' => '',
  'prefix' => '',
  'Host' => 'localhost',
  'port' => '3306',
  'namespace' => 'Drupal\\Core\\Database\\Driver\\mysql',
  'driver' => 'mysql',
  'unix_socket' => '/var/mysql/mysql.sock',
);

デバッグのより完全な手順: https://drupal.stackexchange.com/a/174128/25221

1
daggerhart