就像这里的一些问题,我是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的帖子,但是我希望有一些更简单的东西可以解决我的问题.我错过了.
我使用 nginx 1.4.6 作为 Django 应用程序和使用 socket.io 1.2.1 以及 socketio-jwt 2.3.5 的相关 NodeJS 应用程序的代理
\n\n在本地,我使用 Vagrant 实例(ubuntu 14.04.1)进行编码,而在远程,我使用专用的 AWS EC2 实例——两者都使用相同的 Vagrantfile 和设置 shell 脚本进行配置,因此它们非常接近至相同。
\n\n在本地运行时,我的客户端连接到 nginx 服务器,该服务器升级连接并将其传递给 Node.js 下的 socket.io 服务器实现。一切都运转良好。
\n\n远程地,我记录第一个连接,transport=polling该连接还指示客户端升级到 websocket 传输,然后是第二个请求transport=websockets,然后是第三个请求transport=polling再次记录第三个连接。
虽然应用程序仍然有效,但出于多种原因轮询 < websockets,我希望我能找到一种方法来对此进行排序。
\n\n第二个请求得到答复400 Bad Request。运行我的 Node 应用程序DEBUG=* node index.js给出以下输出:
engine intercepting request for path "/socket.io/" +24s\nengine handling "GET" http request "/socket.io/?token=eyJhbGciOiJIUzUxMiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6Im1hcmNlbCIsIm9yaWdfaWF0IjoxNDE4MDU5ODg1LCJ1c2VyX2lkIjozLCJlbWFpbCI6IiIsImV4cCI6MTQxODE0NjI4NX0.2PE0TNRol9G4hby4OzQ-af2e0yjfgFAb-gQJF5tKWRwxWnFLv1NGp3Yo87UaqNaQceMW6KqzMIx2gLcRFnk09A&EIO=3&transport=polling&t=1418062322853-0" +0ms\nengine handshaking client "6YDFOjBfvZ9UyutVAAAB" +1ms\nengine:socket sending packet …Run Code Online (Sandbox Code Playgroud) 我对AngularJS比较陌生,我一直在尝试各种方法来使用Restangular保持我的AngularJS CRUD方法DRY,所以我很感激社区的任何建议.
我有很多API端点,每个我都希望显示一个项目列表,允许选择每个项目(以显示该项目的详细信息)并删除,以及向列表中添加项目.
我到目前为止尝试过的方法都是非常非干的,没有适当地挂钩到范围内,或者有点hacky ......
将Restangular包装到服务中,并使用addElementTransformer在返回的集合上设置其他方法似乎是一种不错的方法; 在select和add方法清洁,从模板很容易实现,而当承诺解决自动更新列表.但是,因为该delete方法实际上是从元素范围(集合的子集)中调用的,所以在删除后更新列表需要在服务中注入一个非常可疑的$ scope - 我能想到的最好的方法如下:
(注意:通过仅说明单个API端点/控制器/模板,我使示例更容易阅读)
应用程序/ JS/services.js
function ListTransformer(collection) {
collection.selected = {}
collection.assignedTo = {}
collection.assignedName = ""
collection.add = function(item) {
collection.post(item)
.then(function(response){
collection.push(response);
})
};
collection.delete = function(item, scope) {
item.remove()
.then(function(response){
console.log(item)
console.log(collection)
collection.assignedTo[collection.assignedName] = _.without(collection, item);
})
};
collection.select = function(item) {
this.selected = item;
};
collection.assignTo = function(scope, name) {
scope[name] = collection;
collection.assignedTo = scope
collection.assignedName = name
};
return …Run Code Online (Sandbox Code Playgroud) angularjs ×1
common-lisp ×1
crud ×1
hunchentoot ×1
javascript ×1
lisp ×1
nginx ×1
node.js ×1
restangular ×1
sbcl ×1
socket.io ×1
sockets ×1
sublimetext2 ×1
websocket ×1