Проблема с установкой
Итак, у меня стояло bordeaux-threads v0.7. Я установил hunchentoot и restas (удачно). Но ни hunch, ни restas не запускались (hunch при попытке запуска выдавал: undefined function^ bordeaux-threads:make-thread). На сайте тредсов есть таблица совместимости, для линукса указана версия 0.6. Итак, я поставил тредсы 0.6, и hunch заработал. Но restas перестал загружаться
erred while invoking #<COMPILE-OP NIL {10046FE691}> on
#<CL-SOURCE-FILE "module" {10051CE8C1}>
[Condition of type ASDF:COMPILE-FAILED]
erred while invoking #<COMPILE-OP NIL {10046FE691}> on
#<CL-SOURCE-FILE "route" {10051CE8E1}>
[Condition of type ASDF:COMPILE-FAILED]
это в слиме с sbcl. clisp компилит нормально, но не запускает (restas:start ...). пустая строчка в репле, ничего не происходит, браузер страницу не грузит
как быть?
[#]
Для начала что за система? Я понял, что linux, но какой? Как ставишь пакеты?
> На сайте тредсов есть таблица совместимости, для линукса указана версия 0.6
Таблица эта очень древняя, давно не обновлялась, не обращай на неё внимание, я меня bordeaux-threads версии 0.7.0
> Итак, я поставил тредсы 0.6, и hunch заработал.
Очень странно, hunchentoot какой версии? Требуется по крайней мере 1.0, а лучше 1.1
> clisp компилит нормально, но не запускает (restas:start ...).
В clisp так и должно происходить, ибо он скорей всего однопоточный, и запуск hunchentoot занимает единственный поток.
По ошибкам: нужен более развернутый backtrace, так ничего не понятно. Какой restas, 0.0.4?
[#]
Kubuntu 9.10, x86_64, ставлю вручную, качаю с cliki.
с тредсами версии 0.6 не запускается веб-сервер.
hunch v 1.1.0, restas 0.0.4
Backtrace:
0: ((SB-PCL::FAST-METHOD ASDF:PERFORM (ASDF:COMPILE-OP ASDF:CL-SOURCE-FILE)) ..)
1: ((LAMBDA (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-PCL::.ARG1.)) ..)
2: ((SB-PCL::FAST-METHOD ASDF:PERFORM ASDF:AROUND (ASDF:COMPILE-OP ASDF:CL-SOURCE-FILE)) ..)
3: ((LAMBDA ()))
4: ((FLET SB-THREAD::WITH-RECURSIVE-LOCK-THUNK))
5: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-RECURSIVE-LOCK]291))
6: (SB-THREAD::CALL-WITH-RECURSIVE-LOCK ..)
7: (SB-C::%WITH-COMPILATION-UNIT #<CLOSURE (LAMBDA #) {10035E5349}>)[:EXTERNAL]
8: (ASDF:OPERATE ASDF:LOAD-OP RESTAS)[:EXTERNAL]
9: (ASDF::MODULE-PROVIDE-ASDF RESTAS)
10: ((LAMBDA (#:G[REQUIRE]13)) ASDF::MODULE-PROVIDE-ASDF)
11: (SB-IMPL::%MAP-FOR-EFFECT-ARITY-1 #<CLOSURE (LAMBDA #) {100336D309}> (ASDF::MODULE-PROVIDE-ASDF SB-IMPL::MODULE-PROVIDE-CONTRIB))
12: (REQUIRE RESTAS NIL)
13: (SB-INT:SIMPLE-EVAL-IN-LEXENV (REQUIRE 'RESTAS) #<NULL-LEXENV>)
14: (SWANK::EVAL-REGION "(require 'restas)\n")
15: ((LAMBDA ()))
16: (SWANK::TRACK-PACKAGE #<CLOSURE (LAMBDA #) {100336CCA9}>)
17: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation request." #<CLOSURE (LAMBDA #) {100336CBC9}>)
18: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA #) {100336CB99}>)
19: (SWANK::REPL-EVAL "(require 'restas)\n")
20: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:LISTENER-EVAL "(require 'restas)\n") #<NULL-LEXENV>)
21: (SWANK::EVAL-FOR-EMACS (SWANK:LISTENER-EVAL "(require 'restas)\n") "COMMON-LISP-USER" 13)
22: (SWANK::PROCESS-REQUESTS NIL)
23: ((LAMBDA ()))
24: ((LAMBDA (SWANK-BACKEND::HOOK SWANK-BACKEND::FUN)) #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA #) {1002C8D159}>)
25: (SWANK::CALL-WITH-BINDINGS ..)
26: (SWANK::CALL-WITH-CONNECTION #<SWANK::CONNECTION {1003132571}> #<CLOSURE (LAMBDA #) {1002C8D159}>)
27: (SWANK::HANDLE-REQUESTS #<SWANK::CONNECTION {1003132571}> NIL)
28: (SWANK::CALL-WITH-BINDINGS NIL #<CLOSURE (LAMBDA #) {1002C8D109}>)
29: ((FLET #:WITHOUT-INTERRUPTS-BODY-[BLOCK360]365))
30: ((FLET SB-THREAD::WITH-MUTEX-THUNK))
31: ((FLET #:WITHOUT-INTERRUPTS-BODY-[CALL-WITH-MUTEX]267))
32: (SB-THREAD::CALL-WITH-MUTEX ..)
33: ((LAMBDA ()))
34: ("foreign function: #x421C90")
35: ("foreign function: #x4183E7")
[#]
Лучше не стало, но подозреваю, что чего-то не хватает. Как отслеживаешь зависимости? RESTAS кроме hunchentoot также требует мои cl-rotues (требуемые для него пакеты указаны по ссылке) и garbage-pools. Тоже самое возможно и с bordeaux-threads. Для Kubuntu возможно наиболее простой способ установки, это использовать clbuild, для которого есть мой форк содержащий мои пакеты: http://github.com/archimag/clbuild-archimag
[#] Ответ на комментарий от memnek 31.03.2010 14:51
Не пойму в чём проблема. Запускаю пример с "Hello, World" b и вываливается следующее:
CL-USER> (restas:define-module #:restas.hello-world
(:use :cl))
#<PACKAGE "RESTAS.HELLO-WORLD">
CL-USER> (in-package #:restas.hello-world)
#<PACKAGE "RESTAS.HELLO-WORLD">
HELLO-WORLD> (restas:define-route main ("")
"<h1>Hello world!</h1>")
; No value
HELLO-WORLD> (restas:start '#:restas.hello-world :port 8080)
The function BORDEAUX-THREADS:MAKE-THREAD is undefined.
[Condition of type UNDEFINED-FUNCTION]
Backtrace:
0: ("undefined function")
1: ((SB-PCL::FAST-METHOD HUNCHENTOOT:EXECUTE-ACCEPTOR (HUNCHENTOOT:ONE-THREAD-PER-CONNECTION-TASKMASTER)) ..)
2: ((SB-PCL::FAST-METHOD HUNCHENTOOT:START (HUNCHENTOOT:ACCEPTOR)) #<unavailable argument> #<unavailable argument> #<RESTAS:RESTAS-ACCEPTOR (host *, port 8080)>)
3: (RESTAS:START #:RESTAS.HELLO-WORLD :SSL-CERTIFICATE-FILE NIL :SSL-PRIVATEKEY-FILE NIL :SSL-PRIVATEKEY-PASSWORD NIL :HOSTNAME NIL :PORT 8080 :ADDRESS NIL :ACCEPTOR-CLASS NIL :CONTEXT NIL)
4: (SB-INT:SIMPLE-EVAL-IN-LEXENV (RESTAS:START '#:RESTAS.HELLO-WORLD :PORT 8080) #<NULL-LEXENV>)
5: (EVAL (RESTAS:START '#:RESTAS.HELLO-WORLD :PORT 8080))
6: (SWANK::EVAL-REGION "(restas:start '#:restas.hello-world :port 8080)\n")
7: ((LAMBDA () :IN SWANK::REPL-EVAL))
8: (SWANK::TRACK-PACKAGE #<CLOSURE (LAMBDA # :IN SWANK::REPL-EVAL) {1006A859FB}>)
9: (SWANK::CALL-WITH-RETRY-RESTART "Retry SLIME REPL evaluation request." #<CLOSURE (LAMBDA # :IN SWANK::REPL-EVAL) {1006A8591B}>)
10: (SWANK::CALL-WITH-BUFFER-SYNTAX NIL #<CLOSURE (LAMBDA # :IN SWANK::REPL-EVAL) {1006A858EB}>)
11: (SWANK::REPL-EVAL "(restas:start '#:restas.hello-world :port 8080)\n")
12: (SB-INT:SIMPLE-EVAL-IN-LEXENV (SWANK:LISTENER-EVAL "(restas:start '#:restas.hello-world :port 8080)\n") #<NULL-LEXENV>)
13: (EVAL (SWANK:LISTENER-EVAL "(restas:start '#:restas.hello-world :port 8080)\n"))
14: (SWANK:EVAL-FOR-EMACS (SWANK:LISTENER-EVAL "(restas:start '#:restas.hello-world :port 8080)\n") "RESTAS.HELLO-WORLD" 21)
15: (SWANK::PROCESS-REQUESTS NIL)
16: ((LAMBDA () :IN SWANK::HANDLE-REQUESTS))
17: ((LAMBDA () :IN SWANK::HANDLE-REQUESTS))
18: (SWANK-BACKEND::CALL-WITH-BREAK-HOOK #<FUNCTION SWANK:SWANK-DEBUGGER-HOOK> #<CLOSURE (LAMBDA # :IN SWANK::HANDLE-REQUESTS) {10038A938B}>)
19: ((FLET SWANK-BACKEND:CALL-WITH-DEBUGGER-HOOK :IN "/home/alex/quicklisp/dists/quicklisp/software/slime-20120407-cvs/swank-sbcl.lisp") ..)
20: (SWANK::CALL-WITH-BINDINGS ..)
21: (SWANK::HANDLE-REQUESTS #<SWANK::MULTITHREADED-CONNECTION {1003136CC3}> NIL)
22: ((FLET #:WITHOUT-INTERRUPTS-BODY-238208 :IN SB-THREAD:MAKE-THREAD))
23: ((FLET SB-THREAD::WITH-MUTEX-THUNK :IN SB-THREAD:MAKE-THREAD))
24: ((FLET #:WITHOUT-INTERRUPTS-BODY-88859 :IN SB-THREAD::CALL-WITH-MUTEX))
25: (SB-THREAD::CALL-WITH-MUTEX ..)
26: (SB-THREAD::INITIAL-THREAD-FUNCTION)
27: ("foreign function: call_into_lisp")
28: ("foreign function: new_thread_trampoline")
Все пакеты подгружал quicklisp-oм (в т. ч. и "BORDEAUX-THREADS"), SBCL 1.0.55, Debian stable AMD64. Буду очень признателен за помощь.
[#] Ответ на комментарий от alexloc 10.04.2012 21:11
Хм, если загрузить отдельно bordeaux-threads и проверить есть ли в этом пакете такая функция?
[#] Ответ на комментарий от lithp 11.04.2012 00:52
; SLIME 2012-04-07
CL-USER> (ql:quickload "restas")
To load "restas":
Load 1 ASDF system:
restas
; Loading "restas"
........
("restas")
CL-USER> (bt:make-thread #'(lambda ()
(sleep 1)
(format t "Hello from ~A (~A).~%"
(lisp-implementation-type)
(lisp-implementation-version)))
:initial-bindings `((*standard-output* . ,*standard-output*)))
Hello from SBCL (1.0.55).
#<SB-THREAD:THREAD "Anonymous thread" RUNNING {C2FD5A1}>
CL-USER> (restas:define-module #:restas.hello-world
(:use :cl))
#<PACKAGE "RESTAS.HELLO-WORLD">
CL-USER> (in-package #:restas.hello-world)
#<PACKAGE "RESTAS.HELLO-WORLD">
HELLO-WORLD> (restas:define-route main ("")
"<h1>Hello world!</h1>")
; No value
HELLO-WORLD> (restas:start '#:restas.hello-world :port 8080)
; No value
HELLO-WORLD>
CL-USER> (ql:quickload "restas")
To load "restas":
Load 1 ASDF system:
restas
; Loading "restas"
........
("restas")
CL-USER> (bt:make-thread #'(lambda ()
(sleep 1)
(format t "Hello from ~A (~A).~%"
(lisp-implementation-type)
(lisp-implementation-version)))
:initial-bindings `((*standard-output* . ,*standard-output*)))
Hello from SBCL (1.0.55).
#<SB-THREAD:THREAD "Anonymous thread" RUNNING {C2FD5A1}>
CL-USER> (restas:define-module #:restas.hello-world
(:use :cl))
#<PACKAGE "RESTAS.HELLO-WORLD">
CL-USER> (in-package #:restas.hello-world)
#<PACKAGE "RESTAS.HELLO-WORLD">
HELLO-WORLD> (restas:define-route main ("")
"<h1>Hello world!</h1>")
; No value
HELLO-WORLD> (restas:start '#:restas.hello-world :port 8080)
; No value
HELLO-WORLD>
[#] Ответ на комментарий от alexloc 10.04.2012 21:11
если стоит debian-based дистрибутив, убедись, что не устaнoвлено никаких пакетов из репозитария. Только из Quicklisp.
[#] Ответ на комментарий от lithp 11.04.2012 00:56
Также проверь, что твоя версия SBCL поддерживает треды (все последние версии на линукс используют треды по умолчанию):
HELLO-WORLD> (find :sb-thread *features*)
:SB-THREAD
:SB-THREAD
[#] Ответ на комментарий от lithp 11.04.2012 01:08
Огромное спасибо за ответ.
1. Никаких пакетов из репозиториев, только quicklisp
2. Треды в 64-битных системах SBCL устанавливает по дефолту (" :SB-THREAD
Native threads. Enabled by default on x86[-64] Linux only")
3.; SLIME 2012-04-07
CL-USER> (ql:quickload "restas")
To load "restas":
Load 1 ASDF system:
restas
; Loading "restas"
........
("restas")
CL-USER> (bt:make-thread #'(lambda ()
(sleep 1)
(format t "Hello from ~A (~A).~%"
(lisp-implementation-type)
(lisp-implementation-version)))
:initial-bindings `((*standard-output* . ,*standard-output*)))
; in:
; BORDEAUX-THREADS:MAKE-THREAD #'(LAMBDA ()
; (SLEEP 1)
; (FORMAT T "Hello from ~A (~A).~%"
; (LISP-IMPLEMENTATION-TYPE)
; (LISP-IMPLEMENTATION-VERSION)))
; (BORDEAUX-THREADS:MAKE-THREAD
; #'(LAMBDA ()
; (SLEEP 1)
; (FORMAT T "Hello from ~A (~A).~%" (LISP-IMPLEMENTATION-TYPE)
; (LISP-IMPLEMENTATION-VERSION)))
; :INITIAL-BINDINGS `((*STANDARD-OUTPUT* ,@*STANDARD-OUTPUT*)))
;
; caught STYLE-WARNING:
; undefined function: BORDEAUX-THREADS:MAKE-THREAD
;
; compilation unit finished
; Undefined function:
; BORDEAUX-THREADS:MAKE-THREAD
; caught 1 STYLE-WARNING condition
; Evaluation aborted on #<UNDEFINED-FUNCTION MAKE-THREAD {1005C324C3}>.
4. Это сообщение стало вылезать после вчерашнего обновления (ql:update-all-dists).
Эх, а я уже губу раскатал заюзать restas...:(
[#] Ответ на комментарий от alexloc 11.04.2012 12:14
Поскольку quicklisp я не использую, то понять что происходит тяжело. Есть предложение поставить bordeaux-threads "вручную", без quicklisp.
[#] Ответ на комментарий от alexloc 11.04.2012 12:14
какая-то непонятная хрень...
Попробуй снести текущую установку quicklisp:
mv $HOME/quicklisp $HOME/quicklisp_bak
И поставь все заново. Занимaет это дело всего пару минут.
Попробуй снести текущую установку quicklisp:
mv $HOME/quicklisp $HOME/quicklisp_bak
И поставь все заново. Занимaет это дело всего пару минут.
[#] Ответ на комментарий от lithp 11.04.2012 13:06
> Это сообщение стало вылезать после вчерашнего обновления (ql:update-all-dists).
Эх, а я уже губу раскатал заюзать restas...:(
Зак рекомендует обновлять quicklisp так:
может проблема в этом.
Зак рекомендует обновлять quicklisp так:
(ql:update-dist "quicklisp")
может проблема в этом.
[#] Ответ на комментарий от lithp 11.04.2012 13:08
желательно перед установкой свежего quicklisp почистить кэш:
rm -rf ~/.cache/common-lisp/*
[#] Ответ на комментарий от lithp 11.04.2012 13:17
Точно, проблема была с quicklisp-ом (http://blog.quicklisp.org/2012/03/march-bugfix-update.html)
>(ql:update-dist "quicklisp") может проблема в этом.
Именно в этом!
Спасибо за поддержку !:)