3

composer を使用して Symfony 3.1.8 から 3.2.1 にアップグレードしようとしました。キャッシュのクリア中に、次のエラーを受け取りました

ドライバーで例外が発生しました: SQLSTATE[HY000] [1045] ユーザー '########'@'IpAddress' のアクセスが拒否されました (パスワードを使用: YES)

ただし、データベースのユーザー名は #######_# にする必要があります。最後から 2 番目の文字位置にアンダースコアがあることに注意してください。parameter.yml ファイルを見ると、database_user がユーザー名から _ を削除するように変更されていることがわかりました (アンダースコアが削除されました)。次に、アンダースコアを追加し、開発キャッシュを削除して、アプリケーションを再試行しました。以前と同じエラーを受け取りました。

composer は doctrine と FOSuser バンドルも同時に更新したため、更新を元に戻し、composer.lock ファイルを元に戻して以前の構成に戻しました。その後、Symfony アプリケーションをバージョン 3.1.8 で再度実行したところ、問題なく動作しました。

問題をさらに切り分けるために、composer を使用し、symfony のみを 3.1.8 から 3.2.1 にアップグレードしました。アップグレードにより、上記のエラー メッセージとともにキャッシュ クリアでエラーが発生し、parameters.yml ファイルで、database_user のユーザー名からアンダースコアが削除されました。アンダースコアを再挿入しましたが、引き続きエラー メッセージが表示されます。

ドライバーで例外が発生しました: SQLSTATE[HY000] [1045] ユーザー '########'@'IpAddress' のアクセスが拒否されました (パスワードを使用: YES)

database_user の末尾に「#######_#a」の文字を追加すると、エラー メッセージに _ が表示されます。

ドライバーで例外が発生しました: SQLSTATE[HY000] [1045] ユーザー '#######_#a'@'IpAddress' のアクセスが拒否されました (パスワードを使用: YES)

その後、文字を削除すると、エラー メッセージはアンダースコアなしに戻ります

ドライバーで例外が発生しました: SQLSTATE[HY000] [1045] ユーザー '########'@'IpAddress' のアクセスが拒否されました (パスワードを使用: YES)

このことから、Symfony の 3.1.8 と 3.2.1 の間の変更により、parameters.yml ファイルの database_user からアンダースコアが削除されていると思われます。残念ながら、私はそのコードがどこにあるかを理解するのに十分なスキルを持っていません。

4

1 に答える 1

4

githubの助けを借りて少し読んだ結果、これは Symfony 3.1 での数値の処理方法の変更に関連していることがわかりました (ブログ投稿)。yml ファイルのすべての数値からアンダースコア文字を自動的に削除するようになりました。

ただし、私の場合、ユーザー名 (Web ホスティング会社から提供されたもの) はすべて、最後から 2 番目の文字にアンダースコアが付いた数字であり、文字列として解析する必要があります。これは Symfony によって (YAML 仕様に準拠して) 数値として解釈され、アンダースコアが削除されます。

これを解決するために、yml ファイルで自分のユーザー名を引用符で囲むだけで、Symfony が値を正しく処理し始め、アプリケーションを実行できるようになりました。

于 2017-01-02T18:24:28.073 に答える