我正在尝试在 heroku 上设置 Weinre,但我遇到了一些问题。
我设法构建应用程序,只需使用带有 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 存储库中签出源代码
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(请注意,存储库仅包含weinre,它不像您正在做的模块):
web: node weinre
我留下了任何端口更改由process.env.PORT
处理,而不是从Procfile传入
基本上我发现的是,weinre 真的不是为在代理后面工作而设计的!
请参阅此拉取请求 https://github.com/apache/incubator-cordova-weinre/pull/10
请注意,不需要其他修改,Procfile 可以设置选项(就像它应该的那样),并且 Weinre 被正确用作节点模块。
package.json(包含修复程序)
"dependencies" : {
"weinre": "https://github.com/downloads/AppGyver/incubator-cordova-weinre/apache-cordova-weinre-2.0.0-pre-H77LBWIW-incubating-bin.tar.gz"
},
Procfile
web: node_modules/weinre/weinre --httpPort $PORT --boundHost -all- --debug true --verbose true
- 修改weinre本身,我
- 不得不告诉weinre绑定到所有主机,我修改了cli.coffee文件,并将boundHost设置为-all-作为默认值
- 我赞扬了channelManager.coffee中的if远程地址检查,因为您来自的地址是通过代理重新映射的,并且从未匹配
这两个提示对应用程序雾也有很大帮助
你还需要
- 将 Weinre 重命名为应用.js
- 需要当地咖啡脚本
- 将 CLI 分配给变量并执行直接运行
- 扩展 cli.coffee -> 端口与
process.env.PORT