2

私は数日間、次の問題を解決しようとしてきましたが、完全に頭がおかしくなりました。

にデプロイされた (1.2) meteor アプリケーションがありますhttp://some.application.com:3000。それはうまく機能し、本来の機能を果たします。このアプリケーションはいくつかのパッケージを使用します。この問題に関連していると思われるのはautoupdateaccountsパッケージ (独自の束をロードする) です。

私たちの指示は、この Web アプリを Android アプリに変えることです。これは、Meteor が「非常に簡単に」できると言われていることです。表面上は単純なmeteor run android-device --mobile-server http://some.application.com:3000 --settings settings.json --verbose.

10.0.2.2Meteor は(何らかの理由で) DDP 接続を行うことを決定し、設定した環境変数に関係なく、同じ状況になります。

アプリケーションは [ docsDDP.connect(url) ] のどこにもメソッドを使用して作成されていないことに注意することが重要です。そのため、すべてがプライマリ DDP 接続に依存しています (これが問題の大きな原因の 1 つと思われます)。

記録のために、これが私の起動スクリプトです。私はかなり絶望的になり、非常に多くの環境変数を追加しましたが、それらの組み合わせには運がありませんでした。

#!/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.x192.x.x.x) を介して) 実行すると、まったく問題なく動作します。リモートの AWS、キュー、および DB でも動作します。

すべてのドキュメントによると、--mobile-serverスイッチは物事を整理する必要があります。そうではありません。=、引用符で囲んで、それを定義するすべての可能な方法を使用して、または使用せずに試しました。

ドキュメントを見る<head>と、次のコードが挿入されていることがわかります

__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');
  }
}

その文字列の UrlDecoded バージョンは次のとおりです。

{
    "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 のエントリがないため、これは奇妙です。

アプリを起動すると、次のようApp running at: http://site.some.application.comに表示されますが、ネットワーク インスペクターで接続が行われません。

コードを調べてみると、__meteor_runtime_config__言及されている唯一の場所がautoupdateパッケージ内にあることがわかります。

さらに調査すると、この問題#3815 がこの修正にリンクされていましたが、それを実装した後も (自動更新パッケージへの変更)、同じ問題に直面していました (ただし、ローカル マシンからのホット コード修正は停止しました)。

さらに調査した結果、リモート DDP サーバーをこのように変更できると確信しましたが、残念ながら、このソリューションは Cordova では機能しません。

HTTP_PROXYスクリプトの「プロキシの背後にいる場合を除いて」というコメントから、これが簡単な修正であると思われるように設定を試みまし<head>たが、うまくいきませんでした。

アカウント パッケージを削除しようとしましたが、これに関してはうまくいきませんでした。

主な質問Cordova でラップされた Meteor アプリケーションが任意のサーバーに接続できるようにし、DDP 接続を同じサーバーに接続できるようにするための推奨される方法はありますか?

accounts パッケージは (ほとんどの場合) 必要です。自動更新はそれほど重要ではないと思いますが、さまざまなアプリストアにコードを定期的にリリースする必要がないという点で役立ちます.

私が試したこと:

  • アカウント パッケージの削除
  • 自動更新を削除する
  • リモート DDP を指すように自動更新を変更する
  • remote-ddpパッケージの使用
  • __meteor_runtime_config__オーバーライドの強制
  • プロキシの設定
  • 環境変数
  • そして、他の数千のこと

関連する問題 (2015 年 1 月にさかのぼる) は次のとおりです。

の内容.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

versions参考になると思われる場合は、私のファイルの内容を提供できます。

TL;DR - Cordova でラップされた Meteor アプリケーションが任意のサーバーに接続できるようにし、DDP 接続を同じサーバーに接続できるようにするための推奨される方法はありますか?

この問題に関するヘルプやポインタをいただければ幸いです。この点に関して他に必要な情報があればお知らせください。

どうもありがとう

Github の問題

4

0 に答える 0