今回の教材
課題に取り組む前にLaravelのMigrateで沼にハマる
Reset
docker desktop のアンインストール
スタート -> 設定 -> アプリ(ふつーに消えてくれる)
explorerで普通に消そうとするとブルースクリーンが出て再起動になり、永遠に消せない(この時代にブルースクリーンなんて久しぶりに見たわ...)。powershell管理者モードでバチンと消すしか無いらしい
PS C:\WINDOWS\system32> cd D:\OneDrive\dev
PS D:\OneDrive\dev> rm -Force learning-laravel-tdd
Docker Desktop for Windows のインストール
https://hub.docker.com/editions/community/docker-ce-desktop-windows/
インストール自体はすんなりいく
Docker 用 git リポジトリのクローン
$ mkdir learning-laravel-tdd
$ cd learning-laravel-tdd
$ git clone https://github.com/nunulk/learning-laravel-tdd-docker docker
$ mkdir app
現在の状態
learning-laravel-tdd
├── app
└── docker
$ cd docker
$ cp .env.example .env
$ docker-compose up -d
Portのかぶりを解決する(DB_PORTを3308に)
僕の場合は 3306 がかぶっていることがわかった(普段pythonで使ってるから)
COMPOSE_PROJECT_NAME=learning-laravel-tdd
APP_PATH=../app
TZ=Asia/Tokyo
WEB_PORT=80
- DB_PORT=3306
+ DB_PORT=3308
DB_DATABASE=learning_laravel_tdd
DB_USERNAME=root
DB_PASSWORD=root
DB_TESTING_DATABASE=learning_laravel_tdd_testing
DB_TESTING_PORT=3307
DB_TESTING_USERNAME=root
DB_TESTING_PASSWORD=root
するとDockerのコントロールパネルでstartしたときに全部つく
動作確認
以下のコマンドを実行して、すべてのコンテナが起動しているかどうか確認
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------------------------------
learning-laravel-tdd_app_1 docker-php-entrypoint php-fpm Up 9000/tcp
learning-laravel-tdd_db-testing_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3307->3306/tcp, 33060/tcp
learning-laravel-tdd_db_1 docker-entrypoint.sh mysqld Up 0.0.0.0:3308->3306/tcp, 33060/tcp
learning-laravel-tdd_web_1 nginx -g daemon off; Up 0.0.0.0:80->80/tcp
アプリケーションの初期化
$ docker exec -it learning-laravel-tdd_app_1 ash
# composer create-project --prefer-dist "laravel/laravel=7.*" .
# 中略
LOG_CHANNEL=stack
- DB_CONNECTION=mysql
- DB_HOST=127.0.0.1
- DB_PORT=3306
- DB_DATABASE=laravel
- DB_USERNAME=root
- DB_PASSWORD=
+ DB_CONNECTION=mysql
+ DB_HOST=db
+ DB_PORT=3306
+ DB_DATABASE=learning_laravel_tdd
+ DB_USERNAME=root
+ DB_PASSWORD=root
+ DB_TESTING_HOST=db-testing
+ DB_TESTING_PORT=3306
+ DB_TESTING_DATABASE=learning_laravel_tdd_testing
+ DB_TESTING_USERNAME=root
+ DB_TESTING_PASSWORD=root
BROADCAST_DRIVER=log
# 中略
'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
- 'port' => env('DB_PORT', '3306'),
+ 'port' => env('DB_PORT', '3308'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
+ 'mysql_testing' => [
+ 'driver' => 'mysql',
+ 'host' => env('DB_TESTING_HOST', '127.0.0.1'),
+ 'port' => env('DB_TESTING_PORT', '3307'),
+ 'database' => env('DB_TESTING_DATABASE', 'forge'),
+ 'username' => env('DB_TESTING_USERNAME', 'forge'),
+ 'password' => env('DB_TESTING_PASSWORD', ''),
+ 'unix_socket' => env('DB_SOCKET', ''),
+ 'charset' => 'utf8mb4',
+ 'collation' => 'utf8mb4_unicode_ci',
+ 'prefix' => '',
+ 'prefix_indexes' => true,
+ 'strict' => true,
+ 'engine' => null,
+ 'options' => extension_loaded('pdo_mysql') ? array_filter([
+ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
+ ]) : [],
+ ],
'pgsql' => [
'driver' => 'pgsql',
'url' => env('DATABASE_URL'),
<server name="CACHE_DRIVER" value="array"/>
- <!-- <server name="DB_CONNECTION" value="sqlite"/> -->
- <!-- <server name="DB_DATABASE" value=":memory:"/> -->
+ <server name="DB_CONNECTION" value="mysql_testing"/>
+ <server name="DB_DATABASE" value="learning_laravel_tdd_testing"/>
<server name="MAIL_MAILER" value="array"/>
Models ディレクトリの作成と User.php の移動
Laravel は、デフォルトでは Model クラスを artisan コマンドで生成すると app ディレクトリ直下に生成しますが、本教材では、Models ディレクトリを作って、そこに配置していきます。インストールで自動的に作られる User.php をあらかじめ Models ディレクトリに移しておきましょう。
まずは以下のコマンドを実行してディレクトリを作成します(コンテナ側でもホスト側でもどちらでも大丈夫です)。
# mkdir app/Models
続いて、app/User.php を app/Models 以下へ移動し、名前空間を変更します。
namespace App\Models;
User クラスを参照している箇所の名前空間もあわせて変更します。
変更するのは以下の2つのファイルです。
'providers' => [
'users' => [
'driver' => 'eloquent',
- 'model' => App\User::class,
+ 'model' => App\Models\User::class,
],
- use App\User;
+ use App\Models\User;
config is ignored
learning-laravel-tdd\docker\db\my.cnf
を読み取り専用にする
Windowsだけの問題らしい
mysqld: [Warning] World-writable config file '/etc/mysql/my.cnf' is ignored. がでる
[Docker+Windows]mysqlのdockerイメージがmy.cnfのマウントのエラーで起動しない時の対処法
アプリケーションの確認
最後に、アプリケーションが動作するか確認するため、コンテナ内で以下のコマンドを実行してください。
/app # php artisan migrate
ちなみに未解決事件と化した。だれかだすけてよぉ~