标签: hunchentoot

Common Lisp:Hunchentoot和REPL - 当我启动服务器时,我在REPL中得到日志输出,不能再使用REPL了

就像这里的一些问题,我是Lisp的新手.我正在阅读Practical Common Lisp一书,但是稍微看了一下设置一个Web应用程序是多么容易,所以我一直在关注这个教程,以及这里更新版本.

当我到达启动服务器的位置时,我的REPL就会死掉,然后我无法将任何东西推到服务器上*dispatch-table*.

所以基本上,我的代码在REPL中工作得很好,将对象添加到列表中,检索它们等等,然后我启动服务器使用

(setf *web-server* (start (make-instance 'hunchentoot:acceptor :port 8080)))
Run Code Online (Sandbox Code Playgroud)

哪个很好用,我可以访问它http://localhost:8080.但是当我访问它时,日志会打印到REPL,从那时起我无法实际使用REPL.例如,在Adam Petersen的帖子之后,我不能那么做

(push (create-prefix-dispatcher "/retro-games.htm" 'retro-games) *dispatch-table*)
Run Code Online (Sandbox Code Playgroud)

因为REPL没有反应.我尝试从不同的窗口(即从终端的SBCL)启动服务器但是它不知道我所处的上下文 - 它不理解我正在处理的包或我的任何代码.

我使用的是略微非标准的设置; 我在OSX上使用Sublime Text 2和SublimeREPL和SBCL(因为我真的没有进入Emacs和ST2很棒!).我描述我是如何把它一起在这里 -但我真的只张贴的以防万一,我会感到惊讶,如果它是我的设置造成的问题,而不是我失去了一些基本的东西.

无论如何,我知道我可以继续在更像生产的环境中设置hunchentoot,并且已经看到一些详细说明并远程访问REPL的帖子,但是我希望有一些更简单的东西可以解决我的问题.我错过了.

lisp sbcl common-lisp hunchentoot sublimetext2

14
推荐指数
1
解决办法
1064
查看次数

部署Common Lisp Web应用程序

我想知道如何部署一个用Hunchentoot,Wookie,Woo甚至Clack编写的Common Lisp Web应用程序.

也就是说,假设我编写了一个包含一些文件,软件包等的应用程序.通常,当我在本地工作时,我只需在REPL中运行一个启动服务器的命令,然后使用localhost:8000或类似的方式访问它.

但是,对于将应用程序部署到AWS EC2等生产服务器的过程,我感到有些疑惑.我应该以什么形式部署Lisp代码?有不同的选择吗?如果需要重新启动服务器或遇到问题,会发生什么?

lisp common-lisp amazon-ec2 hunchentoot amazon-web-services

12
推荐指数
3
解决办法
1067
查看次数

如何告诉Hunchentoot在哪里可以找到静态网页?

Hunchentoot文档说明:

"ACCEPTOR的方法尝试提供相对于它的ACCEPTOR-DOCUMENT-ROOT的静态文件."

acceptor-document-root acceptor =>(或pathname null)

(setf(acceptor-document-root acceptor)new-value)

http://weitz.de/hunchentoot/

我在将这个文档翻译成实际的Lisp代码时遇到了麻烦.

有人可以给我一个例子,告诉我如何告诉Hunchentoot在哪里寻找静态网页服务?

lisp webserver web-applications hunchentoot

10
推荐指数
2
解决办法
2055
查看次数

SBCL:将Hunchentoot应用程序部署为可执行文件

我开始使用SBCL Common Lisp并希望使用Hunchentoot开发一个小型Web应用程序.为了便于部署,我计划使用sb-ext:save-lisp-and-die将所有内容保存在二进制文件中,因为我可以使用大输出大小.

对于可执行文件,您需要提供顶级功能.问题是当顶级函数返回时程序退出.我试图从可执行文件启动Hunchentoot,但程序在两秒后结束.

在停止程序之前,我怎么能等到Hunchentoot关闭(从请求内部)?我可以加入Hunchentoot接受器线程吗?或者我甚至可以将REPL包含在可执行文件中以便能够进行实时调试?

executable sbcl common-lisp hunchentoot

10
推荐指数
1
解决办法
731
查看次数

使用ASDF启动Hunchentoot

我正在使用Hunchentoot(在SBCL和Linux上)开发Web应用程序,通常我只是从Emacs(SLIME)运行它,但是对于部署我想要更容易自动化的东西.所以我想弄清楚ASDF,因为这似乎是每个人现在都在使用的东西.

myapp.asd:

(in-package #:asdf)
(defsystem :myapp
  :name "my app"
  :depends-on ("hunchentoot")
  :components ((:file "package")
               (:file "server" :depends-on ("package"))))
Run Code Online (Sandbox Code Playgroud)

package.lisp:

(defpackage myapp
  (:use :cl))
Run Code Online (Sandbox Code Playgroud)

server.lisp:

(setq hunchentoot:*dispatch-table*
      (list (hunchentoot:create-static-file-dispatcher-and-handler "/foo" "foo")))
(hunchentoot:start-server :port 8705)
Run Code Online (Sandbox Code Playgroud)

如果我尝试手动加载:

$ sbcl
* (require 'asdf)
* (asdf:operate 'asdf:load-op 'myapp)
Run Code Online (Sandbox Code Playgroud)

它加载并编译了一大堆函数,但随后就停止了.Hunchentoot未运行,提示符不接受输入.我不知道它认为它处于什么状态:打印的最后一行是:

STYLE-WARNING: Implicitly creating new generic function STRINGIFY-COOKIE.
STYLE-WARNING: Implicitly creating new generic function DISPATCH-REQUEST.
STYLE-WARNING: Implicitly creating new generic function WRITE-HEADER-LINE.
Run Code Online (Sandbox Code Playgroud)

有没有办法让这项工作?(忏悔:我真的不太了解ASDF或Common Lisp包,尽管有很多时间阅读它们.)

lisp packages startupscript common-lisp hunchentoot

8
推荐指数
1
解决办法
1919
查看次数

与Hunchentoot一起使用Heroku上的Common Lisp?

有没有人能够使用Hunchentoot使用Heroku Common Lisp BuildpackHeroku上成功部署应用程序?

我得到了一个

!     Heroku push rejected, no Cedar-supported app detected
Run Code Online (Sandbox Code Playgroud)

而且我不确定我做错了什么,或者是否还没有支持

更新:

上述错误是由于缺少heroku-setup.lisp文件.Heroku现在接受推送,但尝试访问该网站会出错.

Mike Travers回答了这个问题:" 不,它目前不支持Hunchentoot,但要添加它并不难. "

我想现在的问题仍然是谁能够添加该功能?

common-lisp heroku hunchentoot

8
推荐指数
1
解决办法
1134
查看次数

从REPL访问Hunchentoot请求对象以进行调试

我发现在编写Hunchentoot时,增量开发往往会中断.

例如,我可能会编写一个由几个函数组成的网页.如果其中一个内部函数包含调用 - 比如 - hunchentoot:post-parameters*那么我就不能轻易地在REPL中测试该函数.它会出错,因为*request*不存在,除非Web客户端调用该页面.

如果存在一些函数或其他源,那么我可以测试我的函数:

>(let* ((*request* (get-previous-request-from-somewhere))
       (*session* (slot-value *request* 'hunchentoot:session)))
    (my-function <whatever params>))
Run Code Online (Sandbox Code Playgroud)

它或类似的东西存在吗?我是否忽略了更好的调试方法?

lisp debugging common-lisp hunchentoot

8
推荐指数
1
解决办法
340
查看次数

关于Lisp和包的新手问题

如果您不关心并且只想查看问题,这里的背景故事会跳到底部.

所以我在LISP玩了一会儿.一些基本功能,一些类和文件IO.当我遇到这篇文章时:

http://www.adampetersen.se/articles/lispweb.htm

我很高兴尝试将lisp用于Web应用程序.我去下载软件包,但是对于我的生活,我不知道如何将它们加载到我的Allegro IDE中.

嗯......好吧,hunchentoot网站说很多基本软件包都在LispWorks中.所以我下载了.仍然不确定如何获取我下载到这些IDE中的软件包的源代码.他们似乎有包的二进制文件?

哦,也许生病切换到我的ubuntu服务器和apt-获取所有软件包和设置粘液(我之前没有使用它因为我只是想学习lisp.同时学习emacs和lisp似乎真的令人生畏).我倾向于获得所需的所有软件包并加载粘液,并且再次出现同样的问题.

我挖了一些更多,看到这个程序叫做ASDF.看起来ASDF是lisp的某种包构建器?我不知道这看起来有点令人困惑.我现在就要放弃了.


如果你还在读这里,这是我的问题.
1.如何将这些包的源加载到我的lisp环境中.尝试学习lisp并不是太难,但有关环境的信息却很少.我是否需要构建我使用ASDF下载的软件包.
2.有没有一种简单的方法可以让人们在lisp中启动并运行,而无需提前大量学习所有工具?

lisp packages common-lisp hunchentoot

7
推荐指数
2
解决办法
2016
查看次数

如何启动 Hunchentoot?

如何在项目中启动 Hunchentoot?我查看了 Edi Weitz 的指南,一切都很顺利,直到安装完成。列出的教程要么不完整,要么略过实际服务器使用情况。

我有我的 asdf 文件,使用 quicklisp 安装了依赖项,并设置了一个调度表。我如何让 Hunchentoot 使用这些东西?

lisp common-lisp hunchentoot

6
推荐指数
1
解决办法
786
查看次数

Hunchentoot 支持 CORS

我在 hunchentoot 上启用 CORS 时遇到一些问题:

  (hunchentoot:define-easy-handler (one-api :uri *one-endpoint*) () 
    (when (boundp '*acceptor*)
      (setf (hunchentoot:header-out "Access-Control-Allow-Origin") "*")
      (setf (hunchentoot:header-out "Accept") "*/*")
      (setf (hunchentoot:header-out "Access-Control-Allow-Headers") "Content-Type, Accept, Origin") 
      (setf (hunchentoot:header-out "Access-Control-Allow-Methods") "POST, GET, OPTIONS, PUT, DELETE") 
      (setf (hunchentoot:header-out "Access-Control-Allow-Origin") "*") 
      (setf (hunchentoot:content-type*) "text/html"))
    (let* ((raw-data (hunchentoot:raw-post-data :force-text t)))
      (funcall callback raw-data))))
Run Code Online (Sandbox Code Playgroud)

但还是不行,是我哪里做错了吗?

common-lisp hunchentoot

6
推荐指数
1
解决办法
346
查看次数