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)])
|
||||
(make-persistent-state '*config* (lambda () config))
|
||||
(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 ()
|
||||
(let ((port-str (getenv "SITE_PORT")))
|
||||
(if port-str (string->number port-str) 7443))))
|
||||
|
|
|
@ -4,14 +4,20 @@
|
|||
(provide poll-signal
|
||||
start-restart-signal-watcher)
|
||||
|
||||
(require (only-in racket/file file->string))
|
||||
(require reloadable)
|
||||
(require "daemon.rkt")
|
||||
|
||||
(define (poll-signal signal-file-name message handler)
|
||||
(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)
|
||||
(handler)))
|
||||
(if (procedure-arity-includes? handler 1)
|
||||
(handler contents)
|
||||
(handler))))
|
||||
|
||||
(define (start-restart-signal-watcher)
|
||||
(daemon-thread
|
||||
|
@ -37,7 +43,12 @@
|
|||
(lookup-reloadable-entry-point 'refresh-packages! "packages.rkt")))
|
||||
(poll-signal "../signals/.rerender"
|
||||
"Static rerender request received"
|
||||
(reloadable-entry-point->procedure
|
||||
(lookup-reloadable-entry-point 'rerender-all! "site.rkt")))
|
||||
(lambda (request-body)
|
||||
(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)
|
||||
(loop)))))
|
||||
|
|
16
src/site.rkt
16
src/site.rkt
|
@ -2,7 +2,7 @@
|
|||
|
||||
(provide request-handler
|
||||
on-continuation-expiry
|
||||
rerender-all!)
|
||||
rerender!)
|
||||
|
||||
(require racket/runtime-path)
|
||||
(require racket/set)
|
||||
|
@ -1421,8 +1421,8 @@
|
|||
(hash))))))
|
||||
(set-package-external-information! package-name external-information))
|
||||
|
||||
(define (rerender-all!)
|
||||
(thread-send (package-change-handler-thread) 'rerender-all!))
|
||||
(define (rerender! items-to-rerender)
|
||||
(thread-send (package-change-handler-thread) (list 'rerender! items-to-rerender)))
|
||||
|
||||
(define (internal:rerender-not-found!)
|
||||
;; TODO: general-purpose error page instead.
|
||||
|
@ -1457,9 +1457,13 @@
|
|||
(internal:rerender-not-found!)
|
||||
(package-change-handler index-rerender-needed?
|
||||
pending-completions)]
|
||||
['rerender-all!
|
||||
(log-info "rerender-all!")
|
||||
(for ((p (all-package-names)))
|
||||
[(list 'rerender! items-to-rerender)
|
||||
(log-info "rerender! ~v" items-to-rerender)
|
||||
(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)
|
||||
(static-render! #:mime-type "text/html"
|
||||
relative-named-url
|
||||
|
|
Loading…
Reference in New Issue
Block a user