5 Commits

Author SHA1 Message Date
yann64 4110caa25a Release 1.0.3 — changelog + bump version dev 1.0.4
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 23:03:14 +02:00
yann64 9225abc804 Fix wizard : migrations via Artisan::call() pour éviter l'héritage d'env pgsql
Cause racine : public/index.php charge le .env auto-créé (pgsql) et appelle
putenv('DB_CONNECTION=pgsql'). Les sous-processus exec() héritent cet env OS.
phpdotenv en mode immutable refuse d'écraser une variable déjà définie →
le nouveau .env mysql est ignoré, la migration tente une connexion pgsql.

Fix : reconfiguration de la connexion BDD en mémoire via config() + DB::purge()
puis exécution des migrations via Artisan::call() dans le processus courant.
Plus aucun subprocess pour les migrations → aucun héritage d'env parasite.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:19:50 +02:00
yann64 56dbd8a0bf Setup : affichage du numéro de version dans l'assistant d'installation
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:12:04 +02:00
yann64 79b831367c Release 1.0.2 — changelog + bump version dev 1.0.3
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:04:55 +02:00
yann64 715aad58e1 Fix wizard : config:clear avant migrations pour éviter conflit pgsql/mysql
Sans ce clear, un bootstrap/cache/config.php résiduel (produit par
php artisan optimize en dev) est lu en priorité sur le .env réécrit
par writeEnv(), forçant une connexion pgsql même quand mysql est choisi.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-04 22:02:45 +02:00
4 changed files with 73 additions and 6 deletions
+22
View File
@@ -5,6 +5,28 @@ Format : [Keep a Changelog](https://keepachangelog.com/fr/1.0.0/) — versionnag
--- ---
## [1.0.3] — 2026-06-04
### Ajouté
- **Numéro de version dans l'assistant d'installation** — affiché sous le titre « Assistant d'installation » dans le layout du wizard (lu depuis le fichier `VERSION`)
### Corrigé
- **Assistant d'installation — conflit pgsql/mysql (cause racine)** : lors d'un démarrage sur serveur vierge, `public/index.php` auto-crée un `.env` depuis `.env.example` (driver `pgsql`) et Laravel charge cet env via `putenv()` au niveau OS. Les sous-processus `exec()` héritent cet env ; `phpdotenv` en mode immutable refuse d'écraser une variable déjà présente dans l'env OS → le `.env` réécrit avec `DB_CONNECTION=mysql` par le wizard était ignoré par le subprocess de migration, qui tentait une connexion PostgreSQL. Correction : les migrations sont maintenant exécutées via `Artisan::call()` dans le processus courant, après reconfiguration explicite en mémoire (`config(['database.default' => ...]`) + `DB::purge()` — aucun héritage d'env parasite.
- **`.htaccess`** — suppression des directives `php_flag display_errors on` ajoutées temporairement pour déboguer l'erreur 500 sur hébergement mutualisé.
---
## [1.0.2] — 2026-06-04
### Corrigé
- **Assistant d'installation — conflit de connexion pgsql/mysql** : un fichier `bootstrap/cache/config.php` résiduel (produit par `php artisan optimize` sur le poste de développement) était lu en priorité sur le `.env` réécrit par le wizard, forçant une connexion PostgreSQL même quand MySQL était sélectionné. Un appel à `config:clear` est maintenant effectué entre l'écriture du `.env` et l'exécution des migrations.
- **Archives de déploiement** : `bootstrap/cache/*.php` exclu du build rsync pour éviter qu'un cache de configuration de développement ne soit embarqué dans les distributables.
---
## [1.0.1] — 2026-06-04 ## [1.0.1] — 2026-06-04
### Ajouté ### Ajouté
+1 -1
View File
@@ -1 +1 @@
1.0.2 1.0.4
+42 -4
View File
@@ -3,6 +3,8 @@
namespace App\Http\Controllers; namespace App\Http\Controllers;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Hash; use Illuminate\Support\Facades\Hash;
use PDO; use PDO;
use PDOException; use PDOException;
@@ -145,11 +147,47 @@ class SetupController extends Controller
if (! $ok) $success = false; if (! $ok) $success = false;
} }
// 3. Migrations // 2b. Reconfiguration de la connexion BDD dans le processus courant.
//
// Problème : public/index.php charge le .env auto-créé (pgsql) au premier boot
// et appelle putenv('DB_CONNECTION=pgsql'). Les sous-processus exec() héritent
// cet env OS. phpdotenv en mode immutable (défaut Laravel) refuse d'écraser une
// variable déjà présente dans l'env → le nouveau .env (mysql) est ignoré par le
// subprocess de migration qui continue à tenter une connexion pgsql.
//
// Solution : exécuter les migrations via Artisan::call() dans le processus courant
// après avoir écrasé la config BDD en mémoire — pas de subprocess, pas d'héritage.
if ($success) { if ($success) {
[$ok, $out] = $this->artisanRun($artisan, 'migrate --force'); $connConfig = $dbData['driver'] === 'pgsql'
$steps[] = ['ok' => $ok, 'label' => 'Migration de la base de données', 'error' => $ok ? null : $out]; ? ['driver' => 'pgsql', 'host' => $dbData['host'], 'port' => (int) $dbData['port'],
if (! $ok) $success = false; 'database' => $dbData['database'], 'username' => $dbData['username'],
'password' => $dbData['password'] ?? '', 'charset' => 'utf8', 'prefix' => '',
'schema' => 'public', 'sslmode' => 'prefer']
: ['driver' => 'mysql', 'host' => $dbData['host'], 'port' => (int) $dbData['port'],
'database' => $dbData['database'], 'username' => $dbData['username'],
'password' => $dbData['password'] ?? '', 'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'strict' => true];
config([
'database.default' => $dbData['driver'],
"database.connections.{$dbData['driver']}" => $connConfig,
]);
DB::purge($dbData['driver']);
}
// 3. Migrations (dans le processus courant, config BDD déjà écrasée ci-dessus)
if ($success) {
try {
$exitCode = Artisan::call('migrate', ['--force' => true]);
$out = trim(Artisan::output());
$ok = $exitCode === 0;
$steps[] = ['ok' => $ok, 'label' => 'Migration de la base de données', 'error' => $ok ? null : $out];
if (! $ok) $success = false;
} catch (\Exception $e) {
$steps[] = ['ok' => false, 'label' => 'Migration de la base de données', 'error' => $e->getMessage()];
$success = false;
}
} }
// 4. Création du compte administrateur // 4. Création du compte administrateur
+8 -1
View File
@@ -16,7 +16,14 @@
<div class="text-center mb-8"> <div class="text-center mb-8">
<div class="inline-flex items-center justify-center w-14 h-14 rounded-2xl bg-blue-600 text-white text-2xl font-bold mb-3 select-none">M</div> <div class="inline-flex items-center justify-center w-14 h-14 rounded-2xl bg-blue-600 text-white text-2xl font-bold mb-3 select-none">M</div>
<h1 class="text-2xl font-bold text-slate-800">MesRelevés</h1> <h1 class="text-2xl font-bold text-slate-800">MesRelevés</h1>
<p class="text-slate-500 text-sm mt-1">Assistant d'installation</p> <p class="text-slate-500 text-sm mt-1">
Assistant d'installation
@php $version = trim(@file_get_contents(base_path('VERSION')) ?: ''); @endphp
@if($version)
<span class="mx-1.5 text-slate-300">·</span>
<span class="font-mono text-slate-400">v{{ $version }}</span>
@endif
</p>
</div> </div>
{{-- Indicateur d'étapes --}} {{-- Indicateur d'étapes --}}