| name | env-health |
| description | Diagnose and fix Laravel environment configuration issues, cache problems, and database connection errors. Use when user reports "configuration not applied", "database connection error", "SQLite connection attempt", "hosts array is empty", or any environment-related issues. Also use after .env file modifications. |
| allowed-tools | ["Bash","Read","Grep"] |
Environment Health Checker
๋น์ ์ด Laravel ํ๊ฒฝ ์ค์ , ์บ์, ๋๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ๋ฌธ์ ๋ฅผ ์ง๋จํด์ผ ํ ๋ ์ด Skill์ ์ฌ์ฉํ์ธ์.
๐ฏ ์๋ ์คํ ํธ๋ฆฌ๊ฑฐ
๋ค์ ์ํฉ์์ ์๋์ผ๋ก ์คํ:
- ์ฌ์ฉ์๊ฐ "์ค์ ์ด ๋ฐ์ ์๋ผ" ๋๋ "configuration not applied" ์ธ๊ธ
- "Database connection error" ๋๋ "SQLite connection attempt" ์ค๋ฅ
- "Database hosts array is empty" ์ค๋ฅ
- ".env ํ์ผ ์์ ํ๋๋ฐ ๋ณํ ์์"
- "์ Laravel์ด [์๋ชป๋ DB]๋ก ์ฐ๊ฒฐํ๋ ค๊ณ ํด?"
๐ ์ง๋จ ์ฒดํฌ๋ฆฌ์คํธ
1. ํ์ฌ ํ๊ฒฝ ์ํ ํ์ธ
php artisan tinker --execute="
echo 'APP_ENV: ' . config('app.env') . PHP_EOL;
echo 'APP_DEBUG: ' . (config('app.debug') ? 'true' : 'false') . PHP_EOL;
echo 'DB_CONNECTION: ' . config('database.default') . PHP_EOL;
echo 'DB_DATABASE: ' . DB::connection()->getDatabaseName() . PHP_EOL;
echo 'SESSION_DRIVER: ' . config('session.driver') . PHP_EOL;
echo 'CACHE_STORE: ' . config('cache.default') . PHP_EOL;
echo 'QUEUE_CONNECTION: ' . config('queue.default') . PHP_EOL;
"
๊ธฐ๋๊ฐ (๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ):
APP_ENV: local
DB_CONNECTION: pgsql_local
DB_DATABASE: ykp_dashboard_local
SESSION_DRIVER: file
CACHE_STORE: file
QUEUE_CONNECTION: sync
2. .env ํ์ผ ๊ฒ์ฆ
grep -E "^(APP_ENV|DB_CONNECTION|DB_HOST_LOCAL|DB_DATABASE_LOCAL|SESSION_DRIVER|CACHE_STORE|QUEUE_CONNECTION)=" .env
๊ฒ์ฆ ํญ๋ชฉ:
- โ
APP_ENV=local (ํ๋ก๋์
์๋)
- โ
DB_CONNECTION=pgsql_local (๋ก์ปฌ PostgreSQL)
- โ
SESSION_DRIVER=file (database ์๋)
- โ
CACHE_STORE=file (database ์๋)
- โ
QUEUE_CONNECTION=sync (database ์๋)
3. ์บ์ ์ํ ์ง๋จ
ls -la bootstrap/cache/*.php 2>/dev/null | grep -E "(config|routes|services)"
๋ฌธ์ ๊ฐ์ง:
config.php ์กด์ฌ โ ์บ์๋ ์ค์ ์ฌ์ฉ ์ค โ .env ๋ณ๊ฒฝ ๋ฌด์๋จ!
routes.php ์กด์ฌ โ ๋ผ์ฐํธ ์บ์ ์ฌ์ฉ ์ค
services.php ์กด์ฌ โ ์๋น์ค ์บ์ ์ฌ์ฉ ์ค
4. ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฐ๊ฒฐ ํ
์คํธ
php artisan tinker --execute="
try {
\$count = DB::table('users')->count();
echo 'DB ์ฐ๊ฒฐ ์ฑ๊ณต! Users: ' . \$count . PHP_EOL;
} catch (Exception \$e) {
echo 'DB ์ฐ๊ฒฐ ์คํจ: ' . \$e->getMessage() . PHP_EOL;
}
"
๐ง ์๋ ํด๊ฒฐ ์ ์ฐจ
๋ฌธ์ 1: ์บ์ ๋ฌธ์ (๊ฐ์ฅ ํํจ!)
์ฆ์: .env ๋ณ๊ฒฝํ๋๋ฐ ๋ฐ์ ์๋จ, ๊ตฌ ์ค์ ์ฌ์ฉ ์ค
ํด๊ฒฐ:
php artisan optimize:clear
php artisan config:clear
php artisan cache:clear
php artisan route:clear
php artisan view:clear
์ฌ์ฉ์์๊ฒ ์๋ด:
โ
์บ์ ํด๋ฆฌ์ด ์๋ฃ!
Laravel์ด ์บ์๋ ์ค์ ์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๋ค์ ๋ช
๋ น์ด๋ก ๋ชจ๋ ์บ์๋ฅผ ์ญ์ ํ์ต๋๋ค:
php artisan optimize:clear
๋ค์ ๋จ๊ณ: ์๋ฒ๋ฅผ ์ฌ์์ํ์ธ์:
php artisan serve
๋ฌธ์ 2: ์๋ชป๋ DB ์ฐ๊ฒฐ
์ฆ์: "SQLite connection attempt", "pgsql ๋์ sqlite ์ฌ์ฉ", "Supabase ๋์ ๋ก์ปฌ DB ์ฌ์ฉ"
ํด๊ฒฐ:
.env ํ์ผ์์ DB_CONNECTION ํ์ธ
- ์ฌ๋ฐ๋ฅธ ๊ฐ์ผ๋ก ์์ ์ ์:
- ๋ก์ปฌ:
DB_CONNECTION=pgsql_local
- ํ๋ก๋์
:
DB_CONNECTION=pgsql
์ฌ์ฉ์์๊ฒ ์๋ด:
โ ๏ธ ์๋ชป๋ DB ์ฐ๊ฒฐ ๊ฐ์ง!
ํ์ฌ ์ค์ : DB_CONNECTION=sqlite (๋๋ ์๋ชป๋ ๊ฐ)
๋ก์ปฌ ๊ฐ๋ฐ์ฉ ๊ถ์ฅ ์ค์ :
DB_CONNECTION=pgsql_local
DB_HOST_LOCAL=localhost
DB_DATABASE_LOCAL=ykp_dashboard_local
.env ํ์ผ์ ์์ ํ ํ ์บ์๋ฅผ ํด๋ฆฌ์ดํ์ธ์:
php artisan optimize:clear
๋ฌธ์ 3: Session/Cache ๋๋ผ์ด๋ฒ ๋ฌธ์
์ฆ์: "Database hosts array is empty" (session/cache๊ฐ DB ์ฌ์ฉํ๋ ค ํจ)
ํด๊ฒฐ:
.env ํ์ผ์์ ๋ค์ ๊ฐ ํ์ธ:
SESSION_DRIVER=file # database ์๋!
CACHE_STORE=file # database ์๋!
QUEUE_CONNECTION=sync # database ์๋!
์ฌ์ฉ์์๊ฒ ์๋ด:
โ ๏ธ Session/Cache ๋๋ผ์ด๋ฒ ๋ฌธ์ !
๋ก์ปฌ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ํ์ผ ๊ธฐ๋ฐ ๋๋ผ์ด๋ฒ๋ฅผ ์ฌ์ฉํ์ธ์:
SESSION_DRIVER=file
CACHE_STORE=file
QUEUE_CONNECTION=sync
์? ๋ ๋น ๋ฅด๊ณ , DB ์ฐ๊ฒฐ ๋ฌธ์ ์๊ณ , ๋๋ฒ๊น
์ฌ์!
.env ์์ ํ:
php artisan optimize:clear
๋ฌธ์ 4: ์๋ฒ ์ฌ์์ ํ์
์ฆ์: ์บ์ ํด๋ฆฌ์ดํ๋๋ฐ๋ ๋ณํ ์์
ํด๊ฒฐ:
taskkill /F /IM php.exe
php artisan serve
์ฌ์ฉ์์๊ฒ ์๋ด:
๐ ์๋ฒ ์ฌ์์ ํ์!
์บ์๋ฅผ ํด๋ฆฌ์ดํ์ง๋ง, ์คํ ์ค์ธ PHP ์๋ฒ๊ฐ ์ด์ ์ค์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ๊ณ ์์ ์ ์์ต๋๋ค.
ํด๊ฒฐ: ์๋ฒ ์ฌ์์
php artisan serve
๐ ์ต์ข
๋ณด๊ณ ์ ํ์
์ง๋จ ์๋ฃ ํ ๋ค์ ํ์์ผ๋ก ๋ณด๊ณ :
๐ฅ ํ๊ฒฝ ๊ฑด๊ฐ ์ง๋จ ์๋ฃ
โ
์ ์ ํญ๋ชฉ:
- APP_ENV: local
- DB_DATABASE: ykp_dashboard_local
โ ๏ธ ๋ฌธ์ ๋ฐ๊ฒฌ:
1. ์บ์ ๋ฌธ์ : config.php ํ์ผ ์กด์ฌ (์บ์๋ ์ค์ ์ฌ์ฉ ์ค)
โ ํด๊ฒฐ: php artisan optimize:clear ์คํ ์๋ฃ
2. Session ๋๋ผ์ด๋ฒ ๋ฌธ์ : SESSION_DRIVER=database
โ ๊ถ์ฅ: SESSION_DRIVER=file (๋ก์ปฌ ๊ฐ๋ฐ์ฉ)
๐ ๊ถ์ฅ ์กฐ์น:
1. .env ํ์ผ์์ SESSION_DRIVER=file ์ค์
2. ์๋ฒ ์ฌ์์: Ctrl+C ํ php artisan serve
๐ก ์ฐธ๊ณ : CLAUDE.md "Environment Configuration" ์น์
์ฐธ์กฐ
๐จ ํ๋ก๋์
ํ๊ฒฝ ๊ฐ์ง ์
๋ง์ฝ APP_ENV=production ๊ฐ์ง ์:
๐จ ๊ฒฝ๊ณ : ํ๋ก๋์
ํ๊ฒฝ ๊ฐ์ง!
ํ์ฌ ์ค์ :
- APP_ENV: production
- DB_CONNECTION: pgsql (Supabase๋ก ์ถ์ )
โ ๏ธ ๋ก์ปฌ ๊ฐ๋ฐ ์ค์ด๋ผ๋ฉด ์ฆ์ ์์ ํ์:
.env ํ์ผ:
APP_ENV=local
DB_CONNECTION=pgsql_local
โ ๏ธ ์ค์ ํ๋ก๋์
(Railway)์ด๋ผ๋ฉด:
- Railway ํ๊ฒฝ๋ณ์์์ ๊ด๋ฆฌ (ํ์ผ ์์ ๊ธ์ง)
- DB ๋ฐฑ์
ํ์ธ ํ ์์
์งํ
๐ ํ์ต ํฌ์ธํธ
์ด Skill์ด ๋ฐ๊ฒฌํ ๋ฌธ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ์์ฝ:
- Laravel ์บ์ ๋ฉ์ปค๋์ฆ:
php artisan config:cache ์คํ ์ .env ๋ฌด์๋จ
- ํ๊ฒฝ ํ์ผ ๋ก๋ฉ ์์:
.env.local์ production ๋ชจ๋์์ ๋ก๋ ์๋จ
- ํ์ผ vs DB ๋๋ผ์ด๋ฒ: ๋ก์ปฌ ๊ฐ๋ฐ์ ํ์ผ ๋๋ผ์ด๋ฒ๊ฐ ๋น ๋ฅด๊ณ ์์ ์
๋ค์์ ๋น์ทํ ๋ฌธ์ ๋ฐ์ ์:
- ๋จผ์ ์บ์ ํด๋ฆฌ์ด:
php artisan optimize:clear
- ์๋ฒ ์ฌ์์
- ๊ทธ๋๋ ์๋๋ฉด
.env ํ์ผ ํ์ธ