More fine-grained control over things to rerender without restarting
This commit is contained in:
parent
31bb1312e8
commit
bd111aa447
|
@ -8,7 +8,7 @@
|
||||||
(define (main [config (hash)])
|
(define (main [config (hash)])
|
||||||
(make-persistent-state '*config* (lambda () config))
|
(make-persistent-state '*config* (lambda () config))
|
||||||
(void (make-reloadable-entry-point 'refresh-packages! "packages.rkt"))
|
(void (make-reloadable-entry-point 'refresh-packages! "packages.rkt"))
|
||||||
(void (make-reloadable-entry-point 'rerender-all! "site.rkt"))
|
(void (make-reloadable-entry-point 'rerender! "site.rkt"))
|
||||||
(start-service #:port (hash-ref config 'port (lambda ()
|
(start-service #:port (hash-ref config 'port (lambda ()
|
||||||
(let ((port-str (getenv "SITE_PORT")))
|
(let ((port-str (getenv "SITE_PORT")))
|
||||||
(if port-str (string->number port-str) 7443))))
|
(if port-str (string->number port-str) 7443))))
|
||||||
|
|
|
@ -4,14 +4,20 @@
|
||||||
(provide poll-signal
|
(provide poll-signal
|
||||||
start-restart-signal-watcher)
|
start-restart-signal-watcher)
|
||||||
|
|
||||||
|
(require (only-in racket/file file->string))
|
||||||
(require reloadable)
|
(require reloadable)
|
||||||
(require "daemon.rkt")
|
(require "daemon.rkt")
|
||||||
|
|
||||||
(define (poll-signal signal-file-name message handler)
|
(define (poll-signal signal-file-name message handler)
|
||||||
(when (file-exists? signal-file-name)
|
(when (file-exists? signal-file-name)
|
||||||
(log-info message)
|
(define contents (file->string signal-file-name))
|
||||||
|
(if (string=? contents "")
|
||||||
|
(log-info "~a" message)
|
||||||
|
(log-info "~a: ~a" message contents))
|
||||||
(delete-file signal-file-name)
|
(delete-file signal-file-name)
|
||||||
(handler)))
|
(if (procedure-arity-includes? handler 1)
|
||||||
|
(handler contents)
|
||||||
|
(handler))))
|
||||||
|
|
||||||
(define (start-restart-signal-watcher)
|
(define (start-restart-signal-watcher)
|
||||||
(daemon-thread
|
(daemon-thread
|
||||||
|
@ -37,7 +43,12 @@
|
||||||
(lookup-reloadable-entry-point 'refresh-packages! "packages.rkt")))
|
(lookup-reloadable-entry-point 'refresh-packages! "packages.rkt")))
|
||||||
(poll-signal "../signals/.rerender"
|
(poll-signal "../signals/.rerender"
|
||||||
"Static rerender request received"
|
"Static rerender request received"
|
||||||
(reloadable-entry-point->procedure
|
(lambda (request-body)
|
||||||
(lookup-reloadable-entry-point 'rerender-all! "site.rkt")))
|
(define items-to-rerender (read (open-input-string request-body)))
|
||||||
|
((reloadable-entry-point->procedure
|
||||||
|
(lookup-reloadable-entry-point 'rerender! "site.rkt"))
|
||||||
|
(if (eof-object? items-to-rerender)
|
||||||
|
#f
|
||||||
|
items-to-rerender))))
|
||||||
(sleep 0.5)
|
(sleep 0.5)
|
||||||
(loop)))))
|
(loop)))))
|
||||||
|
|
16
src/site.rkt
16
src/site.rkt
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
(provide request-handler
|
(provide request-handler
|
||||||
on-continuation-expiry
|
on-continuation-expiry
|
||||||
rerender-all!)
|
rerender!)
|
||||||
|
|
||||||
(require racket/runtime-path)
|
(require racket/runtime-path)
|
||||||
(require racket/set)
|
(require racket/set)
|
||||||
|
@ -1421,8 +1421,8 @@
|
||||||
(hash))))))
|
(hash))))))
|
||||||
(set-package-external-information! package-name external-information))
|
(set-package-external-information! package-name external-information))
|
||||||
|
|
||||||
(define (rerender-all!)
|
(define (rerender! items-to-rerender)
|
||||||
(thread-send (package-change-handler-thread) 'rerender-all!))
|
(thread-send (package-change-handler-thread) (list 'rerender! items-to-rerender)))
|
||||||
|
|
||||||
(define (internal:rerender-not-found!)
|
(define (internal:rerender-not-found!)
|
||||||
;; TODO: general-purpose error page instead.
|
;; TODO: general-purpose error page instead.
|
||||||
|
@ -1457,9 +1457,13 @@
|
||||||
(internal:rerender-not-found!)
|
(internal:rerender-not-found!)
|
||||||
(package-change-handler index-rerender-needed?
|
(package-change-handler index-rerender-needed?
|
||||||
pending-completions)]
|
pending-completions)]
|
||||||
['rerender-all!
|
[(list 'rerender! items-to-rerender)
|
||||||
(log-info "rerender-all!")
|
(log-info "rerender! ~v" items-to-rerender)
|
||||||
(for ((p (all-package-names)))
|
(define packages-to-rerender
|
||||||
|
(if items-to-rerender
|
||||||
|
(filter symbol? items-to-rerender)
|
||||||
|
(all-package-names)))
|
||||||
|
(for ((p packages-to-rerender))
|
||||||
(update-external-package-information! p)
|
(update-external-package-information! p)
|
||||||
(static-render! #:mime-type "text/html"
|
(static-render! #:mime-type "text/html"
|
||||||
relative-named-url
|
relative-named-url
|
||||||
|
|
Loading…
Reference in New Issue
Block a user