mirror of
https://codeberg.org/PostERG/xamxam.git
synced 2026-05-06 19:19:19 +02:00
fix(config): auto-route test.db locally, posterg.db on production
- config.php: getDatabasePath() detects php built-in CLI server (php_sapi_name() === 'cli-server') and routes to test.db; all other SAPIs (nginx/fpm) get posterg.db. DB_ENV env-var still overrides either way. - migrate.sh: auto-initialise the target DB from storage/schema.sql when the file is absent or has no tables yet. Existing DBs with data are left completely untouched (table_count check, no re-run of schema on populated DB). Idempotent: safe to run repeatedly. - justfile: serve still calls migrate (which now handles init too), no DB_ENV prefix needed since sapi detection handles routing.
This commit is contained in:
2
TODO.md
2
TODO.md
@@ -6,3 +6,5 @@
|
|||||||
- [x] Fix wrong `require_once` depth in `public/admin/actions/page.php` (`../../` → `../../../`)
|
- [x] Fix wrong `require_once` depth in `public/admin/actions/page.php` (`../../` → `../../../`)
|
||||||
- [x] Fix same path depth bug in `formulaire.php` and `publish.php`
|
- [x] Fix same path depth bug in `formulaire.php` and `publish.php`
|
||||||
- [x] Fix CSV import: imported theses not visible on public site (is_published defaulted to 0, access_type_id never set)
|
- [x] Fix CSV import: imported theses not visible on public site (is_published defaulted to 0, access_type_id never set)
|
||||||
|
- [x] Fix DB routing: local dev (php -S) auto-uses test.db, production (nginx/fpm) uses posterg.db — no env var needed
|
||||||
|
- [x] migrate.sh auto-initialises DB from schema when absent/empty; existing DBs untouched
|
||||||
|
|||||||
@@ -63,9 +63,13 @@ migrate_db() {
|
|||||||
local db="$1"
|
local db="$1"
|
||||||
local label="$2"
|
local label="$2"
|
||||||
|
|
||||||
if [ ! -f "$db" ]; then
|
# Auto-create from schema only when the file is absent or truly empty (no tables)
|
||||||
echo " [$label] database not found, skipping: $db"
|
local table_count
|
||||||
return
|
table_count=$(sqlite3 "$db" "SELECT COUNT(*) FROM sqlite_master WHERE type='table';" 2>/dev/null || echo 0)
|
||||||
|
if [ "$table_count" -eq 0 ]; then
|
||||||
|
echo " [$label] initialising from schema…"
|
||||||
|
sqlite3 "$db" < "$REPO_ROOT/storage/schema.sql"
|
||||||
|
echo " [$label] schema applied."
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Ensure tracking table exists
|
# Ensure tracking table exists
|
||||||
|
|||||||
@@ -8,27 +8,33 @@
|
|||||||
// Database paths relative to repository root
|
// Database paths relative to repository root
|
||||||
define('DB_ROOT', __DIR__ . '/..');
|
define('DB_ROOT', __DIR__ . '/..');
|
||||||
|
|
||||||
// Test database (used in development)
|
// Local dev database (php -S, never committed)
|
||||||
define('DB_TEST_PATH', DB_ROOT . '/storage/test.db');
|
define('DB_TEST_PATH', DB_ROOT . '/storage/test.db');
|
||||||
|
|
||||||
// Production database (used on server)
|
// Production database (nginx/php-fpm on server)
|
||||||
define('DB_PROD_PATH', DB_ROOT . '/storage/posterg.db');
|
define('DB_PROD_PATH', DB_ROOT . '/storage/posterg.db');
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Determine which database to use.
|
* Determine which database to use.
|
||||||
*
|
*
|
||||||
* Always defaults to the production database.
|
* - php built-in server (php -S …) → storage/test.db (local dev)
|
||||||
* Set DB_ENV=test explicitly to use the test database.
|
* - everything else (nginx/fpm) → storage/posterg.db (production)
|
||||||
*
|
*
|
||||||
* export DB_ENV=test # use storage/test.db
|
* The DB_ENV env-var can still override either way:
|
||||||
* export DB_ENV=prod # use storage/posterg.db (default)
|
* DB_ENV=test → force test.db
|
||||||
*
|
* DB_ENV=prod → force posterg.db
|
||||||
* The old file-existence auto-detection has been removed: a leftover
|
|
||||||
* test.db on a developer machine no longer silently redirects all
|
|
||||||
* requests to test data.
|
|
||||||
*/
|
*/
|
||||||
function getDatabasePath(): string {
|
function getDatabasePath(): string {
|
||||||
if (getenv('DB_ENV') === 'test') {
|
$env = getenv('DB_ENV');
|
||||||
|
if ($env === 'test') {
|
||||||
|
return DB_TEST_PATH;
|
||||||
|
}
|
||||||
|
if ($env === 'prod') {
|
||||||
|
return DB_PROD_PATH;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auto-detect: php built-in CLI server == local development
|
||||||
|
if (php_sapi_name() === 'cli-server') {
|
||||||
return DB_TEST_PATH;
|
return DB_TEST_PATH;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -36,8 +42,8 @@ function getDatabasePath(): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check if running in test/development mode
|
* Check if running in local dev mode
|
||||||
*/
|
*/
|
||||||
function isTestMode() {
|
function isTestMode(): bool {
|
||||||
return getDatabasePath() === DB_TEST_PATH;
|
return getDatabasePath() === DB_TEST_PATH;
|
||||||
}
|
}
|
||||||
|
|||||||
Binary file not shown.
BIN
storage/test.db
BIN
storage/test.db
Binary file not shown.
Reference in New Issue
Block a user