More fine-grained control over things to rerender without restarting

This commit is contained in:
Tony Garnock-Jones 2016-08-10 12:46:41 -04:00
parent 31bb1312e8
commit bd111aa447
3 changed files with 26 additions and 11 deletions

View File

@ -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))))

View File

@ -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)))))

View File

@ -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