我正在尝试在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并不是为在代理之后工作而设计的!