如何在Rails项目上配置nack / node?

时间:2011-12-02 17:41:09

标签: ruby-on-rails node.js

是否有任何人为Rails项目配置nack我碰巧尝试了虚拟代码

var http = require('http'); 
var nack = require('nack');
var app = nack.createProcess("/home/viren/myapp/config.ru");
http.createServer(function (req, res) {   app.proxy(req, res); }).listen(8124, "127.0.0.1");

但它报告了我以下错误

  

events.js:94

     

抛出新的错误('addListener只接受Function的实例');

     

^错误:addListener只接受Function

的实例      

在BufferedRequest。 (events.js:94:11)

     在过程中

(/home/viren/node_modules/nack/lib/process.js:257:21)

     

在Process.proxy(/home/viren/node_modules/nack/lib/process.js:3:63)

     

在服务器上。 (/home/viren/simple.proxy.js:7:7)

     

在Server.emit(events.js:67:17)

     

在HTTPParser.onIncoming(http.js:1124:12)

     

在HTTPParser.onHeadersComplete(http.js:108:31)

     

在Socket.ondata(http.js:1019:22)

     

at Socket._onReadable(net.js:683:27)

     

在IOWatcher.onReadable [作为回调](net.js:177:10)

这是我的自定义机架文件

require "config/environment"

use Rails::Rack::LogTailer
use ActionDispatch::Static
run ActionController::Dispatcher.new

1 个答案:

答案 0 :(得分:0)

根据node_modules / nack / lib / process.js的来源:257 nack期望app.proxy有一个app.proxy(req,res,next)的签名,这是一个常见的连接应用程序的习惯用法。在connect中,调用next(“some value”)是一种约定,因为大多数应用程序在中间件链的底部都有一个catch all错误处理程序。由于您没有使用connect,只需创建自己的错误处理程序。

我还创建了一个拉取请求,因此希望将来使用next是可选的。 https://github.com/josh/nack/pull/25

var http = require('http'); var nack = require('nack');

var app = nack.createProcess("/home/viren/myapp/config.ru");

http.createServer(function (req, res) { app.proxy(req, res, logNackError); }).listen(8124, "127.0.0.1");

function logNackError(err) {
  console.log('nack error:', err);
}