feat: unify php_server logic#2499
Conversation
09cd397 to
39db699
Compare
|
Why do we need the index to be explicitly passed? Couldn't we generate it and return it if needed? |
|
Same reason as in #2487. The caddy modules might be converted to and from JSON multiple times between parsing, provisioning and the actual server start. So the index must already be present when parsing the Caddyfile. Not sure how to make it more elegant, maybe somehow like this? type ServerIdx int |
|
Hum ok got it. I indeed prefer having a custom opaque type (could be an unit under the hood btw) |
|
Alright I changed it so type Server struct { idx }
func WithServer(idx int, resolvedDocumentRoot string,splitPath []string,env map[string]string) (Server, Option)
func WithWorkerServerScope(Server) WorkerOption
func Server.ServeHTTP(responseWriter http.ResponseWriter, request *http.Request, opts ...RequestOption) errorI also noticed that currently configuration would bleed across tests, which probably caused some flakiness. I fixed it by purging configuration right after Init(). Also noticed that When refactoring the context I also fixed some inconsistencies with which logger was being used and which original request method was passed in the debug state. |
|
I changed the api again a bit, this feels like it makes the most sense (no idx passing required): server := frankenphp.NewServer(root, env, splitPath)
frankenphp.Init(frankenphp.WithServer(server))
server.ServeHTTP(request, responseWriter) |
|
Another subtlety I fixed: the "external workers" from |
Currently the concept of a
php_serveronly exists on the caddy side and not the FrankenPHP side.Lately we have been moving more and more in a direction of scoping requests or workers to specific
php_serverblocks.This PR is an attempt at refactoring the current
php_serverlogic so it is properly mirrored on the FrankenPHP side without BC breaks for library users (and to prevent future bugs like mentioned in #2487)