2017-09-13 203 views
1

我想用Ceramic构建一个应用程序包。我可以用它运行应用程序。从陶瓷:包得到了uiop/run-program:subprocess-error没有找到我的组件(并没有显示太多)

(ceramic:bundle :WEBLOCKS-TODOMVC :bundle-pathname #p"build/todomvc.tar") 

运行...

Ceramic: Compiling app... 
Launch: 
"/usr/local/bin/sbcl" --noinform --no-userinit --no-sysinit 
--load "/home/vince/quicklisp/setup.lisp" 
--eval "(setf *debugger-hook* 
       #'(lambda (c h) 
        (declare (ignore h)) 
        (uiop:print-condition-backtrace c) 
        (uiop:quit -1)))" 
--eval "(asdf:load-system :WEBLOCKS-TODOMVC)" 
--eval "(setf uiop:*image-entry-point* 
       #'(lambda() 
        (ceramic-entry::weblocks-todomvc)))" 
--eval "(uiop:dump-image #P\"/home/vince/.ceramic/working/weblocks-todomvc\" 
          :executable t 
          #+sb-core-compression :compression 
          #+sb-core-compression t)" 

和崩溃:有错误出现

Subprocess with command "\"/usr/local/bin/sbcl\" --noinform --no-userinit --no-sysinit --load \"/home/vince/quicklisp/setup.lisp\" --eval \"(setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (uiop:print-condition-backtrace c) (uiop:quit -1)))\" --eval \"(asdf:load-system :WEBLOCKS-TODOMVC)\" --eval \"(setf uiop:*image-entry-point* #'(lambda() (ceramic-entry::weblocks-todomvc)))\" --eval \"(uiop:dump-image #P\\\"/home/vince/.ceramic/working/weblocks-todomvc\\\" :executable t #+sb-core-compression :compression #+sb-core-compression t)\"" exited with error code 255 [Condition of type UIOP/RUN-PROGRAM:SUBPROCESS-ERROR]

但是,日志错误,回溯并不包含太多的信息在所有。有没有办法要求更多?

我确实做了mkdir build/

image


鉴于核心转储的回答是:

我在源上升(与M-.)从陶瓷:捆绑找到调用uiop:run-process,我添加了两个参数和缠一个多值绑定:

(multiple-value-bind (zero one two) 
    (uiop:run-program command 
        :output *standard-output* 
        :error :output 
        :error-output :lines 
        :ignore-error-status t) 
    (format t "------------ printing error messages:") 
    (log:info zero) 
    (log:info one) 
    (log:info two)))) 

并再次运行构建命令:

```

------------ printing error messages: 
<INFO> [19:09:32] trivial-build slimeCUlUAR (boot-and-build) - 
    TRIVIAL-BUILD::ZERO: NIL 
<INFO> [19:09:32] trivial-build slimeCUlUAR (boot-and-build) - 
    TRIVIAL-BUILD::ONE: ("WARNING: Setting locale failed." 
         " Check the following variables for correct values:" 
         " LC_CTYPE=en_US.UTF-8" " LANG=fr_FR.UTF-8" 
         "Backtrace for: #<SB-THREAD:THREAD \"main thread\" RUNNING {10019BB4E3}>" 
         "0: ((LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE))" 
         "1: ((FLET \"THUNK\" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX))" 
         "2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (FLET \"THUNK\" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX) {7FFFF70BF27B}>)" 
         "3: (UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE) {10035ABAAB}> :PACKAGE :CL)" 
         "4: (UIOP/IMAGE:PRINT-CONDITION-BACKTRACE Component :WEBLOCKS-TODOMVC not found :STREAM NIL :COUNT NIL)" 
         "5: ((LAMBDA (COMMON-LISP-USER::C COMMON-LISP-USER::H)) 
          Component :WEBLOCKS-TODOMVC not found #<unused argument>)" 
         "6: (SB-DEBUG::RUN-HOOK *DEBUGGER-HOOK* 
         Component :WEBLOCKS-TODOMVC not found)" 
         "7: (INVOKE-DEBUGGER 
          Component :WEBLOCKS-TODOMVC not found)" 
         "8: (ERROR ASDF/FIND-SYSTEM:MISSING-COMPONENT :REQUIRES :WEBLOCKS-TODOMVC)" 
         "9: ((:METHOD ASDF/OPERATE:OPERATE (SYMBOL T)) ASDF/LISP-ACTION:LOAD-OP :WEBLOCKS-TODOMVC) [fast-method]" 
         "10: ((SB-PCL::EMF ASDF/OPERATE:OPERATE) #<unused argument> #<unused argument> ASDF/LISP-ACTION:LOAD-OP :WEBLOCKS-TODOMVC)" 
         "11: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))" 
         "12: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP :WEBLOCKS-TODOMVC) [fast-method]" 
         "13: ((LAMBDA NIL :IN ASDF/OPERATE:OPERATE))" 
         "14: (ASDF/CACHE:CALL-WITH-ASDF-CACHE #<CLOSURE (LAMBDA NIL :IN ASDF/OPERATE:OPERATE) {1001ED497B}> :OVERRIDE NIL :KEY NIL)" 
         "15: ((:METHOD ASDF/OPERATE:OPERATE :AROUND (T T)) ASDF/LISP-ACTION:LOAD-OP :WEBLOCKS-TODOMVC) [fast-method]" 
         "16: (ASDF/OPERATE:LOAD-SYSTEM :WEBLOCKS-TODOMVC)" 
         "17: (SB-INT:SIMPLE-EVAL-IN-LEXENV (ASDF/OPERATE:LOAD-SYSTEM :WEBLOCKS-TODOMVC) #<NULL-LEXENV>)" 
         "18: (EVAL (ASDF/OPERATE:LOAD-SYSTEM :WEBLOCKS-TODOMVC))" 
         "19: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:LOAD . \"/home/vince/quicklisp/setup.lisp\") (:EVAL . \"(setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (uiop:print-condition-backtrace c) (uiop:quit -1)))\") (:EVAL . \"(asdf:load-system :WEBLOCKS-TODOMVC)\") (:EVAL . \"(setf uiop:*image-entry-point* #'(lambda() (ceramic-entry::weblocks-todomvc)))\") (:EVAL . \"(uiop:dump-image #P\\\"/home/vince/.ceramic/working/weblocks-todomvc\\\" :executable t" 
         " #+sb-core-compression :compression #+sb-core-compression t)\")))" 
         "20: (SB-IMPL::TOPLEVEL-INIT)" 
         "21: ((FLET \"WITHOUT-INTERRUPTS-BODY-6\" :IN SB-EXT:SAVE-LISP-AND-DIE))" 
         "22: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))" 
         "Above backtrace due to this condition:" 
         "Component :WEBLOCKS-TODOMVC not found") 

<INFO> [19:09:32] trivial-build slimeCUlUAR (boot-and-build) - 
    TRIVIAL-BUILD::TWO: 255 
Ceramic: Compressing... 

```

如此看来,构建找不到我的组件 “weblocks-todomvc”。我觉得这令人惊讶,因为我.asdf文件编译正确,我可以运行一个陶瓷窗口,...


考虑下这个问题的评论,我做琐碎的建造加入(format nil "(load #p\"/home/vince/projets/weblocks-todomvc/weblocks-todomvc.asd/\"")trivial-build:load-and-build-code装入我的包,我去不同的堆栈跟踪:

```

------------ printing error messages: 
<INFO> [21:49:12] trivial-build trivial-build.lisp (boot-and-build) - 
    TRIVIAL-BUILD::ZERO: NIL 
<INFO> [21:49:12] trivial-build trivial-build.lisp (boot-and-build) - 
    TRIVIAL-BUILD::ONE: ("WARNING: Setting locale failed." 
         " Check the following variables for correct values:" 
         " LC_CTYPE=en_US.UTF-8" " LANG=fr_FR.UTF-8" 
         "Backtrace for: #<SB-THREAD:THREAD \"main thread\" RUNNING {10019BB783}>" 
         "0: ((LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE))" 
         "1: ((FLET \"THUNK\" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX))" 
         "2: (SB-IMPL::%WITH-STANDARD-IO-SYNTAX #<CLOSURE (FLET \"THUNK\" :IN UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX) {7FFFF70BF66B}>)" 
         "3: (UIOP/STREAM:CALL-WITH-SAFE-IO-SYNTAX #<CLOSURE (LAMBDA NIL :IN UIOP/IMAGE:PRINT-BACKTRACE) {1001EB3A2B}> :PACKAGE :CL)" 
         "4: (UIOP/IMAGE:PRINT-CONDITION-BACKTRACE 
        #<END-OF-FILE {1001EB3473}> :STREAM NIL :COUNT NIL)" 
         "5: ((LAMBDA (COMMON-LISP-USER::C COMMON-LISP-USER::H)) 
        #<END-OF-FILE {1001EB3473}> #<unused argument>)" 
         "6: (SB-DEBUG::RUN-HOOK *DEBUGGER-HOOK* 
        #<END-OF-FILE {1001EB3473}>)" 
         "7: (INVOKE-DEBUGGER #<END-OF-FILE {1001EB3473}>)" 
         "8: (ERROR END-OF-FILE :STREAM #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}>)" 
         "9: (SB-IMPL::STRING-INCH #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}> T NIL)" 
         "10: (SB-IMPL::FLUSH-WHITESPACE #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}>)" 
         "11: (SB-IMPL::READ-LIST #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}> #<unused argument>)" 
         "12: (SB-IMPL::READ-MAYBE-NOTHING #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}> #\\()" 
         "13: (SB-IMPL::%READ-PRESERVING-WHITESPACE #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}> T (NIL) T)" 
         "14: (SB-IMPL::%READ-PRESERVING-WHITESPACE #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}> T (NIL) NIL)" 
         "15: (READ #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}> T NIL NIL)" 
         "16: (SB-IMPL::%READ-FROM-STRING \"(load #p\\\"/home/vince/projets/weblocks-todomvc/weblocks-todomvc.asd/\\\"\" T NIL 0 NIL NIL)" 
         "17: (SB-IMPL::PROCESS-EVAL/LOAD-OPTIONS ((:LOAD . \"/home/vince/quicklisp/setup.lisp\") (:EVAL . \"(setf *debugger-hook* #'(lambda (c h) (declare (ignore h)) (uiop:print-condition-backtrace c) (uiop:quit -1)))\") (:EVAL . \"NIL\") (:EVAL . \"(load #p\\\"/home/vince/projets/weblocks-todomvc/weblocks-todomvc.asd/\\\"\") (:EVAL . \"(ql:quickload :WEBLOCKS-TODOMVC)\") (:EVAL . \"(setf uiop:*image-entry-point* #'(lambda() (ceramic-entry::weblocks-todomvc)))\") (:EVAL . \"(uiop:dump-image #P\\\"/home/vince/.ceramic/working/weblocks-todomvc\\\" :executable t" 
         " #+sb-core-compression :compression #+sb-core-compression t)\")))" 
         "18: (SB-IMPL::TOPLEVEL-INIT)" 
         "19: ((FLET \"WITHOUT-INTERRUPTS-BODY-6\" :IN SB-EXT:SAVE-LISP-AND-DIE))" 
         "20: ((LABELS SB-IMPL::RESTART-LISP :IN SB-EXT:SAVE-LISP-AND-DIE))" 
         "Above backtrace due to this condition:" 
         "end of file on #<SB-IMPL::STRING-INPUT-STREAM {1001EB2F53}>") 

<INFO> [21:49:12] trivial-build trivial-build.lisp (boot-and-build) - 
    TRIVIAL-BUILD::TWO: 255 
+0

我没有琐碎的构建和/或陶瓷的经验,是有可能取代'(ASDF:负载系统:WEBLOCKS-TODOMVC)由''(QL:quickload:weblocks-todomvc) '看看问题是否仍然存在? – coredump

+1

好主意,但我恐怕没有帮助(或者我没有做对)。我编辑了['ceramic.src.bundler:bundle'](https:// github。com/ceramic/ceramic/blob/master/src/bundler.lisp#L37)和'uiop.src.trivial-build:load-and-build-code'。 – Ehvince

+1

我使''trivial-build'加载硬编码路径的项目:'(format nil“(load #p \”/ home/vince/projets/weblocks-todomvc/weblocks -todomvc.asd/\“”)'和我得到另一个堆栈跟踪,我会更新我的问题(**编辑**:它不是我上面评论中的uiop,而是简单的构建) – Ehvince

回答

1

您需要:

  • pass :ignore-error-status t
  • 定义您想要如何检索错误消息(例如:error-output)(例如, :lines

然后,run-program不会发出错误信号,但你必须检查错误状态(第三值),和打印/检查错误消息(第二值)。

RUN-PROGRAM returns 3 values: 
0- the result of the OUTPUT slurping if any, or NIL 
1- the result of the ERROR-OUTPUT slurping if any, or NIL 
2- either 0 if the subprocess exited with success status, 
or an indication of failure via the EXIT-CODE of the process 
+1

感谢您的技巧,我可以在编辑中给您更多详细信息答案(也许是pb的来源,我不明白它为什么会出现)。 – Ehvince