A dev run stopped before its backend loads leaves .web/nocompile, so the next run or export skips the compile

Đang mở Phù hợp với người mới
#7,825 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
75/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
python
Lĩnh vực
build-system, testing

Hướng nghiên cứu

Bắt đầu tại reflex/utils/prerequisites.py, ở get_compiled_app, rồi đọc cách App._should_compile xử lý .web/nocompile và worker backend sử dụng nó như thế nào. Thêm một kiểm thử hồi quy trong tests/units/utils/test_prerequisites.py để tạo marker và xác nhận get_compiled_app chạy biên dịch; công việc hoàn tất khi kiểm thử thất bại trước khi sửa và thành công sau đó.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

Summary

A dev reflex run creates .web/nocompile so that its backend worker does not compile the app a second time. Only that worker deletes the marker, when it first loads the app. If the run stops before the worker loads the app, the marker stays. The next CLI compile then consumes the marker and skips the compile:

  • reflex run serves the old frontend until a file save triggers a hot reload.
  • reflex export skips the compile, builds the old pages, and exits 0. A deploy from that machine ships the old frontend without a warning.

This is the same family as #7089. The fix in #7125 covered backend-only runs only.

Steps to reproduce

Use any app. Use explicit ports.

  1. Run reflex run once to completion, then stop it.
  2. Run reflex run again. Press Ctrl+C right after App running at: is printed. On a small app the window is about 0.8 s. It is longer on a larger app.
  3. Check that .web/nocompile exists.
  4. Change visible text in a page, for example rx.heading("V1") to rx.heading("V2").
  5. Do one of these:
    • Run reflex run. No Compiling: progress bar is shown. The browser shows V1. It stays V1 until you save a file.
    • Run reflex export --frontend-only --no-zip. The command exits 0, but .web/build/client contains V1, not V2.

Expected

A CLI command that compiles (reflex run, reflex export, reflex compile) always compiles. A marker left by an earlier run does not skip the compile.

Cause

  • run_backend creates the marker when a frontend is present.
  • App._should_compile deletes the marker and returns False. The CLI compile and the backend worker compile both call it, so a stale marker skips whichever compile runs first.

Suggested fix

The CLI paths reach the compile only through prerequisites.get_compiled_app (see the comment in App._compile). The backend worker uses App.__call__. So get_compiled_app can delete a stale marker before it compiles:

     app, app_module = get_and_validate_app(reload=reload)
+    # The marker only lets the backend that a dev run starts skip its compile.
+    # A run stopped before that backend loaded leaves it behind.
+    (get_web_dir() / constants.NOCOMPILE_FILE).unlink(missing_ok=True)
     app._compile(

I tested this change with the steps above:

  • reflex run after the early Ctrl+C compiles and serves the new text.
  • reflex export after the early Ctrl+C builds the new text.
  • A normal dev run still compiles once. The backend worker still consumes the marker and skips its own compile.

The fix needs a regression test, for example in tests/units/utils/test_prerequisites.py: create the marker, call get_compiled_app, and assert that a real compile ran.

Ngôn ngữ chính
Python
Star
29k
Fork
1.8k
Merge trung bình
2 ngày 22 giờ
Pull request đã merge (30 ngày)
143

Chuẩn bị môi trường

Mở trong Codespaces

Khởi chạy dev container của dự án ngay trên trình duyệt, bằng tài khoản GitHub của bạn.

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của reflex-dev/reflex

Tất cả issue của reflex-dev/reflex

Issue tương tự

Thêm issue về Python

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.