Compare commits
5 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 4110caa25a | |||
| 9225abc804 | |||
| 56dbd8a0bf | |||
| 79b831367c | |||
| 715aad58e1 |
@@ -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
|
||||
|
||||
### Ajouté
|
||||
|
||||
@@ -3,6 +3,8 @@
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Artisan;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Hash;
|
||||
use PDO;
|
||||
use PDOException;
|
||||
@@ -145,11 +147,47 @@ class SetupController extends Controller
|
||||
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) {
|
||||
[$ok, $out] = $this->artisanRun($artisan, 'migrate --force');
|
||||
$steps[] = ['ok' => $ok, 'label' => 'Migration de la base de données', 'error' => $ok ? null : $out];
|
||||
if (! $ok) $success = false;
|
||||
$connConfig = $dbData['driver'] === 'pgsql'
|
||||
? ['driver' => 'pgsql', 'host' => $dbData['host'], 'port' => (int) $dbData['port'],
|
||||
'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
|
||||
|
||||
@@ -16,7 +16,14 @@
|
||||
<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>
|
||||
<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>
|
||||
|
||||
{{-- Indicateur d'étapes --}}
|
||||
|
||||
Reference in New Issue
Block a user