Skip to content

FrankenPHP upgrade + Ember live demo (IPC talk)#12

Merged
kevariable merged 4 commits into
mainfrom
frankenphp-ember-demo
Jun 9, 2026
Merged

FrankenPHP upgrade + Ember live demo (IPC talk)#12
kevariable merged 4 commits into
mainfrom
frankenphp-ember-demo

Conversation

@kevariable

@kevariable kevariable commented Jun 9, 2026

Copy link
Copy Markdown
Collaborator

What this is

Prep for the IPC Conference Germany FrankenPHP talk: upgrade the stack and add a one-command Ember live demo (the FrankenPHP terminal dashboard from alexandre-daubois/ember).

Highlights

Stack

  • Pin FrankenPHP 1.12.4 / PHP 8.4. PHP 8.5's thread-safe (ZTS) build deadlocks FrankenPHP's worker threads under load, so we stay on 8.4.
  • Switch DB SQLite → MySQL (+ pdo_mysql in the FrankenPHP image).
  • APP_ENV=prod — the key fix. In dev mode FrankenPHP's threads deadlock fighting over the Symfony cache-rebuild lock; prod compiles once and holds 1k+ req/s on classic with zero failures.

Ember demo

  • make ember-install — auto-detects macOS / Linux / Windows.
  • make ember + make ember-load — single-server wave (classic by default, no flags).
  • make compare + make compare-load — FPM vs classic vs worker, side by side (bin/scope).
  • k6/ember_ramp.js — spiky up/down traffic wave.
  • Ember.md — beginner walkthrough with step-by-step screenshots (docs/images/ember-*).
  • Caddy access logging enabled in both Caddyfiles.

Housekeeping

  • README cleanup (removed README.back*.md).
  • Green unit test suite: doctrine-fixtures 2.x getReference() fix, static PHPUnit 11 data providers, excluded legacy symfony/demo functional tests.

Try it

make ember-install
make up && make up-franken && make setup
make ember        # terminal 1
make ember-load   # terminal 2

Note: this branch also bundles the in-progress CQRS app changes that were already on main's working tree, plus the Ember/upgrade work above.

Headline changes for the conference demo:

- Pin FrankenPHP 1.12.4 / PHP 8.4. PHP 8.5's thread-safe (ZTS) build
  deadlocks FrankenPHP's worker threads under load, so we stay on 8.4.
- Switch the DB from SQLite to MySQL (+ pdo_mysql in the FrankenPHP image).
- Run the app in APP_ENV=prod. In dev mode FrankenPHP's threads deadlock
  fighting over the Symfony cache-rebuild lock; prod compiles once and is
  rock-solid (1k+ req/s on classic, zero failures).

Ember demo:
- New Ember.md beginner walkthrough with step-by-step screenshots.
- make ember-install (auto-detects macOS / Linux / Windows).
- make ember / make ember-load (single-server wave, classic by default).
- make compare / make compare-load (FPM vs classic vs worker, side by side).
- bin/scope: the 3-runtime side-by-side TUI.
- k6/ember_ramp.js: spiky up/down traffic wave.
- Caddy access logging enabled in both Caddyfiles.

Housekeeping:
- README cleanup (+ remove README.back*.md backups).
- Green the unit test suite: fix doctrine-fixtures 2.x getReference() calls,
  make PHPUnit 11 data providers static, exclude legacy symfony/demo
  functional tests.
@kevariable kevariable force-pushed the frankenphp-ember-demo branch from f701668 to 53a09ea Compare June 9, 2026 14:05
…ers via compose

Rename Ember.md -> ember.md. The demo runtimes (app/franken/franken-worker)
get APP_ENV=prod + MySQL through docker-compose; .env stays local/SQLite so
the lint/test tooling behaves as on main.
bin/open-url.sh detects WSL ($WSL_DISTRO_NAME / /proc/version) and hands the URL
to the Windows browser via wslview/explorer.exe/cmd.exe; uses 'open' on macOS,
'xdg-open' on Linux, 'start' on Git Bash. Falls back to printing a Ctrl+click URL.
'make urls' lists every demo URL. Per Paul's request for WSL browser-open support.
- Swap ember-04-threads.png for the 12-thread classic view
- Step 3 text now says classic/12 threads (matches the 'make ember' default);
  worker/20 threads is the alternative
- README: PHP 8.4, not 8.5
@kevariable kevariable merged commit cf88c58 into main Jun 9, 2026
1 of 5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant