web-dev-qa-db-ja.com

Drushは(MAMP上の)mysqlソケットのパスをどこで探しますか?

brewを使用してdrush 6.5.0から8.0.1-devにアップグレードした後、drushターミナルコマンドは一般的な

「PDOException:SQLSTATE [HY000] [2002]」エラー。

それを機能させる唯一の方法は、私のすべてのプロジェクトのunix_socket行をmy Drupal settings.phpファイルに追加することです。

$databases = array (
  'default' =>
  array (
    'default' =>
    array (
      'database' => 'site',
      'username' => 'user',
      'password' => 'pass',
      'Host' => 'localhost',
      'port' => '',
      'driver' => 'mysql',
      'prefix' => '',
      'unix_socket' => '/Applications/MAMP/tmp/mysql/mysql.sock',
    ),
  ),
);

私が/var/mysql/mysql.sockを使用しても、シンボリックリンクがアップしているので機能します。

lrwxr-xr-x  1 root  wheel    39B Mar 11  2015 /var/mysql/mysql.sock -> /Applications/MAMP/tmp/mysql/mysql.sock

しかし、それはまさに私が理解していないことです。また、ある時点で構成したいので、現在および今後のプロジェクトのsettings.phpファイルをすべて編集する必要はありません。

だから私の質問は次のとおりですdrushは(MAMP上の)mysqlソケットのパスをどこで探しますか?

php.iniを介している場合は、それも正しいはずです(/Applications/MAMP/bin/php/php5.6.10/conf/php.ini):

mysql.default_socket = /Applications/MAMP/tmp/mysql/mysql.sock

現在、私の.bash_profileには、以前のDrushのインストールで問題なく動作したため、この問題に関連するエイリアスやエクスポートは含まれていません。

4

まず、phpで使用されているdrushおよびphp.iniファイルを確認します。

$ drush status --full
 Site URI                        :  http://default                                                                                                          
 Database driver                 :  mysql                                                                                                                   
 Database hostname               :  localhost                                                                                                               
 Database username               :  root                                                                                                                    
 Database name                   :  drupal7                                                                                                                  
 Drupal bootstrap                :  Successful                                                                                                              
 Drupal user                     :                                                                                                                          
 PHP executable                  :  /usr/local/opt/php56/bin/php                                                                                            
 PHP configuration               :  /usr/local/etc/php/5.6/php.ini  

次に、その デフォルトのMySQLソケット ローカルdb接続の名前を編集します。

pdo_mysql.default_socket=/path/to/mysql.sock

PHPが異なる(/tmp/mysql.sock)で構成されていない限り、デフォルトでは--with-mysql-sockを指します。

確認する:

$ php -i | grep ^pdo_mysql.default_socket
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

したがって、代わりに/var/mysql/mysql.sockを探していたため、/tmp/mysql.sockが機能しなかったのはおそらくそのためです。

その後、シンボリックリンクは期待どおりに機能するはずです。

drushが間違ったPHPのインスタンスを使用している場合は、それをPATHに追加するか(そうしたように)、または--php=</path/to/file>で指定すると、正しいphp.iniが読み込まれます。

または、設定ファイルでunix_socketを指定します(すでに行ったように)。

4
kenorb

解決策を見つけました...

drush status

PHP実行可能パスはOSXネイティブパスであり、brewによってインストールされたPHP

〜/ .bash_profileに次の行を追加します

export PATH="/Applications/MAMP/bin/php/php5.6.10/bin:/Applications/MAMP/Library/bin:$PATH"

drushを正しいphp.iniファイルにルックアップさせました

しかし私にとって、シンボリックリンクがなぜなのかはまだ謎です

lrwxr-xr-x  1 root  wheel    39B Mar 11  2015 /var/mysql/mysql.sock -> /Applications/MAMP/tmp/mysql/mysql.sock

トリックをしませんでした

0