diff --git a/.gitignore b/.gitignore index a53e940..201cdac 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ test.db bin +.env *-test.log diff --git a/app/demo/etc/config.lisp b/app/demo/etc/config.lisp new file mode 100644 index 0000000..3363aae --- /dev/null +++ b/app/demo/etc/config.lisp @@ -0,0 +1,17 @@ +;;;; cl-scopes/app/demo/etc/config + +(in-package :scopes/app/demo) + +(config:root :env-keys '(:docroot :address :port) + :env-path (util:runtime-path ".env")) + +(config:add :server :class 'server:config + :port "8800" + :address "0.0.0.0" + :routes + `((("api") server:message-handler) + (() server:fileserver + :doc-root + ,(make-pathname + :directory (list :absolute (config:from-env :docroot "/var/www")))))) + ;,(util:home-path "" "hugo" "0-public" "scopes" "hx")))) diff --git a/app/demo/main.lisp b/app/demo/main.lisp index c1d7ea0..4be358d 100644 --- a/app/demo/main.lisp +++ b/app/demo/main.lisp @@ -2,7 +2,11 @@ (defpackage :scopes/app/demo (:use :common-lisp) - (:local-nicknames (:forge :scopes/forge)) + (:local-nicknames (:config :scopes/config) + (:core :scopes/core) + (:forge :scopes/forge) + (:server :scopes/web/server) + (:util :scopes/util)) (:export #:main)) (in-package :scopes/app/demo) @@ -11,6 +15,9 @@ (format t "~%Hello World.~%relative path: ~a~%system source dir: ~a~%" (asdf:system-relative-pathname :scopes-demo "config") (asdf:system-source-directory :scopes-demo)) + (load (util:relative-path "config" "etc")) + (core:setup-services) (setf forge:*forge-env* (forge:forge-env)) (forge:setup-builtins) - (forge:repl)) + (forge:repl) + (core:shutdown)) diff --git a/config.lisp b/config.lisp index 97ccfef..f8134a1 100644 --- a/config.lisp +++ b/config.lisp @@ -48,11 +48,14 @@ (let* ((key (str:concat prefix (string sl))) (env-val (uiop:getenv key)) (dotenv-val (if dotenv-data (gethash key dotenv-data)))) + (format t "~&init after config:root key: ~s, env-val ~s~%" + key dotenv-val) (if env-val (setf (gethash sl data) env-val) (setf (gethash sl data) dotenv-val)))))) (defun root (&rest params &key (class 'root) &allow-other-keys) + (format t "~&config:root params: ~s~%" params) (setf *root* (apply #'make-instance class params))) ;;;; config base class diff --git a/web/server.lisp b/web/server.lisp index 561ceaf..0723213 100644 --- a/web/server.lisp +++ b/web/server.lisp @@ -31,19 +31,23 @@ (clack:clackup #'(lambda (env) (app ctx env)) :port (parse-integer (port cfg)) :address (address cfg) - :server :woo + ;:server :woo :silent t)))) (defun stop (ctx) (clack:stop (listener ctx))) (defun fileserver (ctx env &key doc-root) - (let* ((message-head (getf env :message-head)) - (rel-path (str:join "/" message-head)) + (let ((message-head (getf env :message-head))) + (if (string= (car (last message-head)) "") + (setf message-head (append (butlast message-head) (list "index.html")))) + (let* ((rel-path (str:join "/" message-head)) (file-app (make-instance 'lack/app/file:lack-app-file :file rel-path :root doc-root))) ;(format t "~&file path: ~s~%" (merge-pathnames rel-path doc-root)) - (lack/component:call file-app env))) + ;(format t "~&file head: ~s, rel-path ~s~%" message-head rel-path) + (format t "~&file doc-root ~s~%" doc-root) + (lack/component:call file-app env)))) (defun message-handler (ctx env) ;(print env)