src/main.lisp
(defpackage murja
(:use :cl)
(:import-from :murja.posts.post-db)
(:import-from :murja.middleware.db :with-db)
(:import-from :murja.migrations :migrate)
(:export :main :start-server :stop-server))
(in-package :murja)
(defvar *server* nil)
(defun stop-server ()
(when *server*
(hunchentoot:stop *server*)
(setf *server* nil))
(when murja.newui:*server*
(hunchentoot:stop murja.newui:*server*)
(setf murja.newui:*server* nil)))
(defun start-server (&key (port 3010) stream)
(format t "Starting murja server~%")
(with-db
(migrate))
(let ((server (make-instance 'easy-routes:easy-routes-acceptor :port port))
(ws-server (make-instance 'hunchensocket:websocket-acceptor :port (1+ port))))
(when stream
(setf (hunchentoot:acceptor-access-log-destination server) stream))
(setf *server* server)
(setf murja.newui:*server* ws-server)
(hunchentoot:start server)
(hunchentoot:start murja.newui:*server*)
(format t "Started murja server on ~a ~%" port)
server))
(defun main (&key (port 3010))
(with-open-file (f murja.routes.settings-routes:*log-file* :direction :output :if-does-not-exist :create :if-exists :append)
(let ((*standard-output* f))
(start-server :port port :stream f)
(handler-case
(loop do (sleep 1000))
(condition () nil)))))
(in-package :common-lisp-user)
(defun run ()
"Starts up the aggressive-murja system. Sets logging up in a way that should show up in the logs view"
(setf hunchentoot:*catch-errors-p* nil)
;; for reasons I don't understand user-editor.lisp doesn't see *dev*? as t when let-bound here
(setf lisp-fixup:*dev?* t)
(log:info "Starting murja in *dev?* mode")
(bordeaux-threads:make-thread
(lambda ()
(murja:main))))
;; (start-server :port 3010)