1

奇妙な問題があります。Meteor アプリをビルドし、Android デバイスで実行するには -

meteor run android-device --mobile-server=<my_aws_ip>:3000

アプリがすぐにデプロイされると、サーバーに接続します (そして、私の JavaScript などが機能します)。数秒後、ページが更新され、JavaScript コールバックが機能しなくなります。この問題のデバッグを手伝ってください。

詳細情報: クライアント (サーバーではなく) を変更して展開すると、最初の数秒間、変更されたクライアントが電話に表示されます。最初の数秒後、サーバーに存在するバージョンが表示されます。したがって、Cordova または Meteor がサーバーからクライアント コードをフェッチしようとしていると思いますが、これがアプリを壊しています。この動作を防ぐ方法はありますか?

さらに多くのデータポイント -

  1. 私の aws コードには、android および ios プラットフォームがインストールされていません。このため、cordova プラグインがインストールされておらず、どこかで JS が壊れていると思います。
  2. 私が考えることができる最も簡単な修正は、cordova autoupdate を削除することです。これは meteor-platform パッケージによって追加されています。meteor-platform のクローンを作成し、cordova の自動更新をコメント アウトすると、アプリが読み込まれません。

自動更新を削除する別の方法はありますか?

4

1 に答える 1

2

mobile-serverこれは、アドレスに別のバージョンのアプリがデプロイされているようです。

ローカル コードは開発モードで実行されます。あなたのAWSは本番モードである可能性があります(構文エラーが含まれている可能性があります)。

アプリを実行すると、コードが異なることがわかり、ホット コード リロードで新しい/古い (異なる) バージョンがフェッチされるため、ページが更新/フラッシュされます。

これを修正するには、コード内の構文エラーを見つける必要があります。ADB ロガーを表示するか、次のように実行することをお勧めしますmeteor run --verbose android-device ....

Uncaught exception: cannot read .. of nullこれにより、エラー タイプ エラーなど、もう少し詳しい情報が得られます。

エラーが何であるかを言うのは難しいです。このエラーにより、残りのコードが実行できなくなります。本番モードでは、プロジェクト全体が 1 つの JS ファイルです。ファイルの途中で何らかのエラーが発生すると、ファイルの残りの部分は実行されません。

また、ブラウザーでロード<my_aws_ip>:3000してみて、JS コンソールで JS エラーを監視してください。

--productionローカルで実行して、本番ビルド環境をローカルでシミュレートすることもできます。

自動更新を有効にするが、ページを更新しない:

Reload._reload = function (options) {
    console.log("Next load will load new version");
};
于 2015-08-29T00:58:59.850 に答える