我正在尝试在Weinre上设置heroku,但遇到一些问题。

我设法通过使用具有weinre npm依赖性的package.json和一个类似于以下内容的Procfile来构建应用程序

web: node_modules/weinre/weinre --httpPort $PORT


最初,一切似乎正常,客户端显示了UI,JS文件加载正常,但是调试不起作用,服务器端也没有客户端显示。

在查看日志时,我意识到对于包含/ ws / target / *或/ ws / client / *的每个请求,我都会不断收到404错误

2012-05-31T22:37:53+00:00 heroku[router]: GET xxxx.herokuapp.com/target/target-script.js dyno=web.1 queue=0 wait=0ms service=10ms status=200 bytes=190900
2012-05-31T22:37:36+00:00 heroku[router]: GET xxxx.herokuapp.com/ws/target/t-3 dyno=web.1 queue=0 wait=0ms service=3ms status=404 bytes=9
2012-05-31T22:36:39+00:00 heroku[router]: POST xxxx.herokuapp.com/ws/client/c-1 dyno=web.1 queue=0 wait=0ms service=40ms status=404 bytes=9


此设置在本地有效,没有问题。

我还尝试了--boundHost 0.0.0.0的Procilfe,并得到了相同的错误。当我将heroku应用程序域/子域用作主机时,出现weinre: error running server: Error: listen EADDRNOTAVAIL错误

如果需要,您可以在github repo处签出源

https://github.com/felipesabino/weinre-heroku

编辑:
它可能与Heroku不支持的WebSocket有关:
https://devcenter.heroku.com/articles/http-routing#websockets

最奇怪的是,PhoneGap的weinre调试页面也会发生相同的问题
http://debug.phonegap.com/

有人知道如何解决这个问题吗?

最佳答案

我目前正在Heroku上跑步,但我记得当我试图使其运行时确实是一场噩梦。

这是使用weinre的2.0.0-pre-H0WVARLU-incubating,所以可能有点不同,但是我要做的是:


修改weinre本身,我不得不告诉weinre绑定到所有主机,我修改了cli.coffee文件,并将boundHost设置为-all-作为默认值
我赞扬if remoteAddress签入channelManager.coffee,因为您来自的地址是通过代理重新映射的,并且从未匹配
打开冗长的调试,虽然实际上不需要运行它,这使跟踪发生错误的位置(以及为什么请求没有路由的原因)变得容易得多。


我的Procfile变得非常简单,因为我尝试将weinre尽可能地使用为“ native”(请注意,回购仅包含weinre,而不是您正在执行的模块):

web: node weinre


我留下了所有端口更改以由process.env.PORT处理,而不是从Procfile传入

基本上,我发现weinre并不是为在代理之后工作而设计的!

10-05 21:54