5

開発用のローカル サーバー ( http://10.0.2.10:3000 )で実行される Meteor アプリがあります。ROOT_URLが正しく設定されているため、この__meteor_runtime_config__.ROOT_URLURL と同じです。もちろん、アプリは 10.0.2.0/24 内のクライアント コンピューターのブラウザーで完全に正常に動作します。アプリは、10.0.2.0/24 の一部でもある Android 携帯電話のモバイル chrome/firefox でも正常に動作しています。ただし、この携帯電話でアプリとして実行しようとすると、meteor run android-device --mobile-server http://10.0.2.10:3000/奇妙なことが起こります。

アプリが初めて起動したとき (または、すべてのアプリ データを消去した後で初めて)、数秒間、正常に動作します (DB のコンテンツが読み込まれます)。その後、アプリがリロードされ、DB からのリモート コンテンツは読み込まれなくなります。Meteor が接続を試みる場所を確認するために、次の関数を追加しました。

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

初めてリモート コンテンツが読み込まれると、予想どおりhttp://10.0.2.10:3000/が返されます。2 回目にリモート コンテンツが読み込まれないと、http://10.0.2.2:3000/が返されます。

問題は、Meteor/Cordova がこれを行う理由と、この動作を停止するにはどうすればよいかということです。明らかに、この方法でアプリをテストできないためです。FQDN と HTTPS プロキシがある場合に本番環境で機能するかどうかはまだわかりませんが、それは要点を超えています。

私のLANでは何も実行されていないため、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 ファイル全体を grep すると、10.0.2.2 はもう見つかりません - それでも動作は同じです。

何が起こっているのか、何をすべきかについてのアイデアはありますか?

4

1 に答える 1

4

So even when you set your ROOT_URL correctly there are still special variables for mobile versions of it which do not get set and may contain localhost. And there seem to exist more code snippets in the meteor project which replace localhost with 10.0.2.2 aside from the one I mentioned above, when a Cordova client is connecting. So that seems to cause my app to reconnect to 10.0.2.2.

The mobile URL variables I could find are process.env.MOBILE_ROOT_URL and process.env.MOBILE_DDP_URL. So in a Meteor.startup() function I now set those to my real ROOT_URL on the server side. My Android (Cordova) app now still is reconnecting a few seconds after its first start up but it's reconnecting to the same (and real) server URL (thus everything works fine)!

I still don't know why its reconnecting and those mobile variables and their use don't seem to be very well documented (or I missed something) but I can live with the way things work now.

于 2015-03-10T00:52:04.880 に答える