当应用程序第一次启动时(或者在我清除所有应用程序数据后第一次启动)它会像应该的那样工作(来自数据库的内容被加载)几秒钟.然后应用程序重新加载,并且不再加载来自数据库的任何远程内容.我添加了以下函数来查看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(‘已删除’).这被调用所以我知道覆盖是成功的,当我grep通过整个构建的.apk文件10.0.2.2再也找不到 – 仍然行为是相同的.
有什么想法正在发生什么,怎么做?
解决方法
我能找到的移动网址变量是
process.env.MOBILE_ROOT_URL和
process.env.MOBILE_DDP_URL.所以在Meteor.startup()函数中,我现在将它们设置为服务器端的真实ROOT_URL.我的Android(Cordova)应用程序现在仍然在第一次启动后重新连接几秒钟,但它重新连接到相同(和真实)的服务器URL(因此一切正常)!
我仍然不知道为什么它的重新连接和那些移动变量及其使用似乎没有很好地记录(或者我错过了一些东西),但我可以忍受现在的工作方式.