← Архив: Обсуждение проекта

Пытаюсь поднять rulisp у себя...

Author: · 10.03.2013 07:43
· original author: motopeh
Собрал вроде всё самое свежее:
$ ls cl-closure-template esrap restas-colorize restas-planet wiki-parser cl-data-forms-master hunchentoot-master restas-directory-publisher restas-simple-auth data-sift-master restas restas-forum restas-wiki
Остальное на доле quicklisp.
Все мои патчи:
  • В restas-directory-publisher:
    diff --git a/restas-directory-publisher.asd b/restas-directory-publisher.asd
    index e56cb6d..7b51e39 100644
    --- a/restas-directory-publisher.asd
    +++ b/restas-directory-publisher.asd
    @@ -9,6 +9,6 @@
      :defsystem-depends-on (#:closure-template)
      :depends-on (#:restas #:local-time)
      :pathname "src"
    -  :serial t
    +;  :serial t
      :components ((:closure-template "autoindex")
                   (:file "directory-publisher")))
    Без этого почему-то исходники модуля тупо не грузились. ASDF от sbcl.
  • В самом rulisp:
    diff --git a/src/rulisp.lisp b/src/rulisp.lisp
    index ac911ed..8183330 100644
    --- a/src/rulisp.lisp
    +++ b/src/rulisp.lisp
    @@ -196,7 +196,7 @@
                                                     :content (restas.directory-publisher.view:autoindex-content data))
                               out)))
          (closure-template:ttable-register-template ttable "AUTOINDEX" #'rulisp-autoindex :supersede t)
    -      (closure-template:ttable-sync-package ttable '#:rulisp.directory-publisher.view))))
    +      (closure-template:ttable-extend-package ttable '#:rulisp.directory-publisher.view))))

    (restas:mount-module -static- (#:restas.directory-publisher)
      (restas.directory-publisher:*directory* (merge-pathnames "static/" *resources-dir*)))
    В связи с изменениями.
Сейчас разбираю ошибку в маршруте "/forum". Сервер просто занимается какой-то фигнёй, вместо того чтобы достать упакованный рендер при монтировании форума:
0: (RESTAS:RENDER-OBJECT # (:FORUMS ((:TITLE "Common Lisp" :HREF "/forum/common%20lisp")) :FEED-HREF "/forum/rss/all.rss" :TITLE "Все форумы")) 1: (RESTAS:RENDER-OBJECT NIL (:FORUMS ((:TITLE "Common Lisp" :HREF "/forum/common%20lisp")) :FEED-HREF "/forum/rss/all.rss" :TITLE "Все форумы"))
· original author: motopeh
Первый аргумент нулевого вызова -
#<FUNCTION IDENTITY>
· original author: motopeh
Короче, restas::route-render-method просто обходит систему монтирования.
· original author: archimag
Я пока не могу помочь :( Другим сильно занят.
· original author: motopeh
Вот мои грязные хаки и костыли:
Modified src/route.lisp diff --git a/src/route.lisp b/src/route.lisp index b7d7e48..b4e71e3 100644 --- a/src/route.lisp +++ b/src/route.lisp @@ -23,9 +23,15 @@ (additional-variables :initarg :additional-variables :initform nil))) (defun route-render-method (route) - (or (slot-value route 'render-method) - (module-render-method (route-module route)) - #'identity)) + (let* ((module (route-module route)) + (symbol (module-symbol module))) + (or (gethash :render-method + (nth 2 + (gethash symbol + (pkgmodule-traits-modules (symbol-package symbol))))) + (slot-value route 'render-method) + (module-render-method module) + #'identity)))
Но ИМХО надо систему монтирования переделывать, там какая-то лапша из списков и хэш-таблиц.