LINUX.ORG.RU

[restas]404


0

1

Начал как всегда с хеловорда опубликованного на сайте restas

(asdf:operate 'asdf:load-op '#:restas)

(restas:define-module #:restas.hello-world
  (:use :cl))

(in-package #:restas.hello-world)

(restas:define-route main ("")
  "<h1>Hello world!</h1>")

(restas:start '#:restas.hello-world :port 8080)
Это работает, заходишь на 127.0.0.1:8080 и видишь текст «Hello world». Теперь делаем проект более правильно, разбиваем на файлы, делаем определение системы, маршруты выносим в отдельный файл:

cat hello-world.asd

(defsystem #:hello-world
  :depends-on (#:restas)
  :components ((:file "package")
               (:file "main" :depends-on ("routes" "package"))
               (:file "routes" :depends-on ("package"))))

cat package.lisp

(restas:define-module #:restas.hello-world
  (:use :cl)
  (:export #:main))

cat routes.lisp

(in-package #:restas.hello-world)

(restas:define-route main ("")
  "<h1>Hello world!</h1>")

cat main.lisp

(in-package #:restas.hello-world)

(defun main()
  (restas:start '#:restas.hello-world :port 8080))

Теперь делаем

(restas.hello-world:main)
выполняется без ошибок, заходим на 127.0.0.1:8080 и видим
Not Found
The requested URL / was not found on this server
статус 404.

ЧЯДНТ ?

А еще restas-wiki тоже не работает, возвращает 500 если зайти на порт открырый вот так

(restas:start #:restas.wiki :port 8081)
И кстати: если происходит ошибка сервера, как узнать что именно не так ?

ЧЯДНТ ?

Функция main определена в routes.lisp, потом переопределена в main.lisp.

cat routes.lisp

(in-package #:restas.hello-world)

(restas:define-route main-route ("")
  "<h1>Hello world!</h1>")
quasimoto ★★★★
()

выполняется без ошибок

CL-USER> (asdf:operate 'asdf:load-op '#:hello-world)
...
STYLE-WARNING: redefining RESTAS.HELLO-WORLD:MAIN in DEFUN
...
quasimoto ★★★★
()
Ответ на: комментарий от s9gf4ult

Кто ж знал что макрос define-route определяет функцию

Не поленился бы жмакнуть C-c Ret - узнал бы.

anonymous
()
Ответ на: комментарий от s9gf4ult

Кто ж знал что макрос define-route определяет функцию

Никогда не смотришь во что макры раскрываются? Это часть разработки в REPL. А со SLIME'ом это вообще до автоматизма доводится.

gensym ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.