如何防止Meteor / Cordova应用程序连接到10.0.2.2? (为什么应用程序会连接到那里?)

时间:2015-03-05 23:22:34

标签: cordova meteor ddp

我有一个Meteor应用程序,它在本地服务器上运行以进行开发(http://10.0.2.10:3000)。 ROOT_URL设置正确,因此__meteor_runtime_config__.ROOT_URL等于此网址。当然,该应用程序在10.0.2.0/24内的客户端计算机上的浏览器中运行良好。该应用程序也在我的Android手机上的移动chrome / firefox上工作正常,这也是10.0.2.0/24的一部分。然而,当我尝试在meteor run android-device --mobile-server http://10.0.2.10:3000/手机上以app作为app运行时,会发生一些奇怪的事情:

当应用程序第一次启动时(或者在我清除所有应用程序数据后第一次启动)它会像应该的那样工作(加载数据库的内容)几秒钟。然后应用程序重新加载,数据库中的任何远程内容都不再加载。我添加了以下函数来查看Meteor尝试连接的位置:

Meteor.startup(function(){
    console.log(__meteor_runtime_config__.ROOT_URL);
})

第一次加载远程内容时,它会像我期望的那样返回http://10.0.2.10:3000/。第二次没有加载远程内容时,它会返回http://10.0.2.2:3000/

现在的问题是,为什么Meteor / Cordova会这样做,我该如何阻止这种行为呢?因为显然我无法以这种方式测试应用程序。我有一个FQDN和HTTPS代理时,我还不确定它是否可以在生产中运行,但这已经超出了这一点。

我试图找到10.0.2.2,因为我的局域网中没有任何内容在那里运行,我没有在任何地方指定此IP并在/cordova-build/www/application/index.html中找到它,这似乎是从boilerplate_web.cordova.html生成的(请参阅此链接https://searchcode.com/codesearch/view/91819963/)。但是,Meteor提供了使用文件夹cordova-build-override覆盖这些生成的文件的可能性,因此我删除了整个文件

if (/Android/i.test(navigator.userAgent)) {
    //[...]
}

阻止并添加了一个简短的console.log('removed')。这被调用,所以我知道覆盖是成功的,当我浏览整个构建的.apk文件时,10.0.2.2不再被发现 - 仍然行为是相同的。

任何想法发生了什么以及该怎么做?

1 个答案:

答案 0 :(得分:4)

因此,即使您正确设置ROOT_URL,仍然会为其移动版本设置特殊变量,这些变量未设置且可能包含localhost。当一个Cordova客户端连接时,除了上面提到的那个之外,流星项目中似乎存在更多的代码片段,用localhost替换10.0.2.2。所以这似乎导致我的应用程序重新连接到10.0.2.2。

我能找到的移动网址变量是 process.env.MOBILE_ROOT_URLprocess.env.MOBILE_DDP_URL。所以在Meteor.startup()函数中,我现在将它们设置为服务器端的真实ROOT_URL。我的Android(Cordova)应用程序现在仍然在第一次启动后重新连接几秒钟,但它重新连接到相同(和真实)的服务器URL(因此一切正常)!

我仍然不知道为什么它的重新连接和那些移动变量及其使用似乎没有得到很好的记录(或者我错过了一些东西),但我可以忍受现在的工作方式。 / p>