Javascript 无法使Meteor/Cordova为DDP使用远程服务器

Javascript 无法使Meteor/Cordova为DDP使用远程服务器,javascript,android,cordova,meteor,ddp,Javascript,Android,Cordova,Meteor,Ddp,几天来,我一直在努力解决以下问题,这让我简直疯了 我有一个(1.2)meteor应用程序,部署在http://some.application.com:3000。它工作得很好,做了它应该做的事情。这个应用程序使用了几个包,我认为与这个问题相关的是autoupdate和accounts包(它加载自己的一堆东西) 我们的指令是将这个webapp变成一个安卓应用,我们被告知meteor可以“非常容易”做到这一点。从表面上看,这似乎是流星运行的android设备——移动服务器的一个简单例子http://

几天来,我一直在努力解决以下问题,这让我简直疯了

我有一个(1.2)meteor应用程序,部署在
http://some.application.com:3000
。它工作得很好,做了它应该做的事情。这个应用程序使用了几个包,我认为与这个问题相关的是
autoupdate
accounts
包(它加载自己的一堆东西)

我们的指令是将这个webapp变成一个安卓应用,我们被告知meteor可以“非常容易”做到这一点。从表面上看,这似乎是流星运行的android设备——移动服务器的一个简单例子http://some.application.com:3000 --settings settings.json--verbose,但这并没有达到我期望的效果

Meteor决定在
10.0.2.2
上进行DDP连接(无论出于何种原因),并且无论我设置了什么环境变量,我最终都处于相同的情况

需要注意的是,应用程序并没有使用
DDP.connect(url)
方法anywhere[]编写,所以一切都依赖于主DDP连接(我怀疑这可能是导致问题的更大原因之一)

作为记录,这是我的启动脚本。我非常绝望,添加了很多很多环境变量,但没有任何运气进行任何组合

#!/bin/bash
export AWS_REGION=xxx
export AWS_BUCKET=xxx
export MONGO_URL=mongodb://some.application.com:27017/application
export QUEUE_ADDRESS=http://some.application.com
export AWS_ACCESS_KEY_ID=xxx
export AWS_SECRET_ACCESS_KEY=xxx
export ROOT_URL=http://some.application.com:3000
export DDP_DEFAULT_CONNECTION_URL=http://some.application.com:3000
export MOBILE_DDP_URL=http://some.application.com:3000 
export MOBILE_ROOT_URL=http://some.application.com:3000

# Let's go
meteor run android-device --mobile-server http://some.application.com:3000 --settings settings.json --verbose
在本地、移动或桌面上运行它(通过带有端口转发的
localhost:3000
,或任何其他内部IP(
10.x.x.x
192.x.x
)工作得非常好。它甚至可以与远程AWS、队列和DB一起工作

根据所有的文档,
--mobileserver
开关应该能解决问题。它不能解决问题。我试过使用和不使用
=
,用引号括起来,以及所有可能的定义方法

查看文档的
,我看到以下代码被注入

__meteor_runtime_config__ = JSON.parse(decodeURIComponent("%7B%22meteorRelease%22%3A%22METEOR%401.2.0.2%22%2C%22PUBLIC_SETTINGS%22%3A%7B%22verifiedLogin%22%3Afalse%2C%22enableFacebookAuth%22%3Afalse%2C%22enableTwitterAuth%22%3Afalse%2C%22enableGoogleAuth%22%3Afalse%2C%22cdnUrlWithTrailingSlash%22%3A%22http%3A%2F%2Fdev.cdn.some.application.com%2F%22%2C%22ga%22%3A%7B%22id%22%3A%22UA-XXXXXX-1%22%7D%7D%2C%22ROOT_URL%22%3A%22http%3A%2F%2Flocalhost%3A3000%22%2C%22ROOT_URL_PATH_PREFIX%22%3A%22%22%2C%22appId%22%3A%228emj6c37j3fdoz5qmp%22%2C%22accountsConfigCalled%22%3Atrue%2C%22autoupdateVersion%22%3A%222b3acf7aa3ddef802ddf661d3b3986319aad5122%22%2C%22autoupdateVersionRefreshable%22%3A%22b00197cdb5345434d03d9a2503906349ff7854e2%22%2C%22autoupdateVersionCordova%22%3A%223644168d46bc4597d0b2d8c39e366890f6725f52%22%2C%22DDP_DEFAULT_CONNECTION_URL%22%3A%22http%3A%2F%2Flocalhost%3A3000%22%7D"));

if (/Android/i.test(navigator.userAgent)) {
  // When Android app is emulated, it cannot connect to localhost,
  // instead it should connect to 10.0.2.2
  // (unless we're using an http proxy; then it works!)
  if (!__meteor_runtime_config__.httpProxyPort) {
    __meteor_runtime_config__.ROOT_URL = (__meteor_runtime_config__.ROOT_URL || '').replace(/localhost/i, '10.0.2.2');
    __meteor_runtime_config__.DDP_DEFAULT_CONNECTION_URL = (__meteor_runtime_config__.DDP_DEFAULT_CONNECTION_URL || '').replace(/localhost/i, '10.0.2.2');
  }
}
该字符串的URL解码版本如下所示

{
    "meteorRelease": "METEOR@1.2.0.2",
    "PUBLIC_SETTINGS": {
        "verifiedLogin": false,
        "enableFacebookAuth": false,
        "enableTwitterAuth": false,
        "enableGoogleAuth": false,
        "cdnUrlWithTrailingSlash": "http://dev.cdn.application.com/",
        "ga": {
            "id": "UA-XXXXXX-1"
        }
    },
    "ROOT_URL": "http://localhost:3000",
    "ROOT_URL_PATH_PREFIX": "",
    "appId": "jfdjdjdjdjdjjdjdjdjjd",
    "accountsConfigCalled": true,
    "autoupdateVersion": "2b3acf7aa3ddef802ddf661d3b3986319aad5122",
    "autoupdateVersionRefreshable": "b00197cdb5345434d03d9a2503906349ff7854e2",
    "autoupdateVersionCordova": "3644168d46bc4597d0b2d8c39e366890f6725f52",
    "DDP_DEFAULT_CONNECTION_URL": "http://localhost:3000"
}
这很奇怪,因为我在任何地方都没有localhost的条目

启动应用程序会告诉我:
应用程序在以下位置运行:http://site.some.application.com
,但网络检查器中没有连接

翻阅代码,我发现只有
自动更新
包中提到了
流星运行时配置

进一步的调查使我找到了#3815,它链接到,但在我实现它(对自动更新包的更改)后,我仍然面临着同样的问题(尽管本地机器停止了热代码修复)

更多的调查让我相信远程DDP服务器是可以更改的,但不幸的是,这种解决方案不适用于Cordova

我尝试了设置
HTTP\u PROXY
,因为
脚本中的注释“除非我们在代理后面”,使我相信这可能是一个快速解决方案,但我没有任何运气

我试图删除帐户包,但在这方面没有任何运气

主要问题是否有任何建议方法允许Cordova包装的Meteor应用程序连接到任意服务器,并允许DDP连接到同一服务器

帐户包(很可能)是需要的。我认为自动更新并不重要,尽管它们确实有助于不必定期向各种应用商店发布代码

我尝试过的事情:

  • 删除帐户包
  • 删除自动更新
  • 修改自动更新以指向远程DDP
  • 使用
    远程ddp
    软件包
  • 强制覆盖
  • 设置代理
  • 环境变量
  • 还有其他几千件事
相关问题(追溯至2015年1月)包括:

  • #3852-显示连接到远程meteor服务器的困难,并涉及到
    自动更新
    包如何影响事情
  • #3727-这显示了
    --移动服务器成为
    10.0.2.2
  • #4396-这显示了一个明显的修复,但这对我根本不起作用
  • #3815-这显示了来自官方文档的混乱,并将我引向我之前链接的
    自动更新
    包“修复”
  • #4581-这表明meteor build如何忽略这些环境变量
  • #4412-这表明其他人在同样的问题上有困难,他们的回答是围绕这个问题要求PRs
  • #3390-这表明通过meteor帐户进行身份验证只能通过DDP进行,而不能通过HTTP
  • #3698-这显示其他用户在iOS上也有同样的问题,尽管他们报告说连接到本地服务器成功,我也成功连接到了本地服务器,但没有提到远程服务器成功。修复程序似乎是通过meteor部署到某个app.meteor.com,但这不是我们的选择
.meteor/packages的内容

aldeed:autoform@=4.2.2
aldeed:collection2@2.5.0
aldeed:simple-schema@1.3.3
aldeed:tabular@1.4.1
autoupdate@1.2.3
biasport:facebook-sdk@0.2.2
blaze@2.1.3
check@1.0.6
edgee:slingshot@0.7.1
iron:router@1.0.12
jquery@1.11.4
juliancwirko:s-alert@3.1.1
juliancwirko:s-alert-slide@3.1.0
lookback:seo@1.1.0
matteodem:easy-search@1.6.4
meteor@1.1.9
meteorhacks:fast-render@2.10.0
meteorhacks:subs-manager@1.6.2
mobile-experience@1.0.1
momentjs:moment@2.10.6
mquandalle:jade@0.4.4
multiply:iron-router-progress@1.0.2
---
internal packages (one of which includes accounts)
---
reactive-dict@1.1.2
reactive-var@1.0.6
reywood:iron-router-ga@0.7.1
session@1.1.1
standard-minifiers@1.0.1
templating@1.1.4
tracker@1.0.9
underscore@1.0.4
underscorestring:underscore.string@3.2.2
utilities:avatar@0.9.2
如果您觉得有帮助,我可以提供我的
版本
文件的内容

TL;DR-是否有建议的方法允许Cordova包装的Meteor应用程序连接到任意服务器,并允许DDP连接到同一服务器?

任何关于这个问题的帮助或建议都将不胜感激。如果您在这方面需要帮助,请让我知道是否有任何其他信息

非常感谢


你有没有尝试过一个只有这些设置的空白应用程序?适用于我的
meteor run android设备——移动服务器http://some.application.com:3000