fix: workspace delete MissingGreenlet + nginx cache-busting
- Convert WorkspaceHasInstancesError to store plain dicts instead of SQLAlchemy ORM objects, preventing lazy-load failures outside async session context (MissingGreenlet) - Update both delete endpoints (top-level and nested) to use exc.instances directly since they're already plain dicts - Add no-cache headers for index.html in nginx.conf so browsers always fetch new hashed JS/CSS bundles on deploy
This commit is contained in:
@@ -91,7 +91,7 @@ async def delete_workspace_top_level(
|
||||
status_code=409,
|
||||
detail={
|
||||
"message": "Workspace has running tool instances",
|
||||
"instances": [{"id": str(i.id), "name": i.name} for i in exc.instances],
|
||||
"instances": exc.instances,
|
||||
},
|
||||
) from exc
|
||||
except Exception as exc:
|
||||
@@ -358,7 +358,7 @@ async def delete_workspace(
|
||||
status_code=409,
|
||||
detail={
|
||||
"message": "Workspace has running tool instances",
|
||||
"instances": [{"id": str(i.id), "name": i.name} for i in exc.instances],
|
||||
"instances": exc.instances,
|
||||
},
|
||||
) from exc
|
||||
except Exception as exc:
|
||||
|
||||
@@ -37,7 +37,7 @@ class SyncResult:
|
||||
class WorkspaceHasInstancesError(Exception):
|
||||
"""Raised when attempting to delete a workspace with running instances."""
|
||||
|
||||
def __init__(self, instances: list[ToolInstance]) -> None:
|
||||
def __init__(self, instances: list[dict]) -> None:
|
||||
self.instances = instances
|
||||
super().__init__(f"Workspace has {len(instances)} running tool instance(s)")
|
||||
|
||||
@@ -139,7 +139,9 @@ class WorkspaceManager:
|
||||
|
||||
instances = await self._get_instances(workspace, session)
|
||||
if instances and not force:
|
||||
raise WorkspaceHasInstancesError(instances)
|
||||
raise WorkspaceHasInstancesError(
|
||||
[{"id": str(i.id), "name": i.name} for i in instances]
|
||||
)
|
||||
|
||||
# Stop and delete all instances
|
||||
for instance in instances:
|
||||
|
||||
@@ -15,6 +15,12 @@ server {
|
||||
try_files $uri $uri/ /index.html;
|
||||
}
|
||||
|
||||
# Never cache index.html so browsers always fetch new hashed JS/CSS
|
||||
location = /index.html {
|
||||
add_header Cache-Control "no-cache, no-store, must-revalidate";
|
||||
add_header Pragma "no-cache";
|
||||
}
|
||||
|
||||
# Cache static assets
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2)$ {
|
||||
expires 1y;
|
||||
|
||||
Reference in New Issue
Block a user