Ionic: приложение не работает после развертывания на платформе браузера в производственном режиме, когда пользователь открыл браузер - PullRequest
0 голосов
/ 24 октября 2018

У меня возникла проблема после развертывания нашего ионного приложения на сервере, скомпилированном для платформы браузера, где все запросы, поступающие на сервер, терпят неудачу и становятся недоступными для пользователя.Это происходит только тогда, когда у пользователя открыт сайт во время развертывания, и он уходит, когда они перезагружают страницу.

Я перепробовал много возможных решений, но не повезло, поэтому я публикую еговот и надеюсь, что я смогу найти некоторую помощь.

Я получаю следующие ошибки консоли:

Ошибка 1:

errorUncaught (in promise): NotFoundError: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found. Error: Failed to execute 'transaction' on 'IDBDatabase': One of the specified object stores was not found. at /platforms/browser/www/build/vendor.js?v=1540203735513:1:1007099 at t.invoke /platforms/browser/www/build/polyfills.js?v=1540203735513:3:14976) at Object.onInvoke ...

Ошибка 2:

Uncaught (in promise): SecurityError: The operation is insecure. openDatabase@[native code] https://[domain.com]/build/vendor.js?v=1536911308754:1:1006552 t@https://[domain.com]/build/polyfills.js?v=1536911308754:3:21507 ...

Как упоминалось ранее, я получаю эти ошибки только после запуска сценария развертывания (см. Ниже) в следующем сценарии:

  • У пользователей есть открытый сеанс в его браузере.
  • Развертывание происходит в середине его сеанса.
  • Ошибка появляется только на страницах, которые пользователь не посещал до развертывания.

Например:

  • Пользователь посетил страницу A и страницу B до запуска сценария развертывания.
  • Я запустил сценарий развертывания.
  • Я захожу на страницу A, страницу B, и она работает, здесь нет проблем.
  • Я захожу на страницу C, страницу D (страницы не посещались)раньше), и я получаю ошибки выше

Сценарий развертывания:

# remove the browser platform
ionic cordova platform remove browser

# add the browser platform
ionic cordova platform add browser

# build with production mode
MY_ENV=staging ionic cordova build browser --prod --release

# deploy to the server
rsync -r platforms/browser/www/* cloud@[SERVER_IP]:/home/cloud/www/

Примечание. Позже я создал более сложный процесс развертывания, пытаясь отладитьпроблема, но результат был тот же.

Я предполагаю, что причина может быть связана с некоторыми внутренними действиями ionic в браузере, происходящем при посещении новой страницы, у него была ссылка с неким идентификатором изпредыдущее развертывание, ищет его и затем терпит неудачу, потому что новая развернутая версия изменила тот идентификатор.API не изменился, поэтому с конечными точками проблем не возникает.

Чтобы добавить дополнительный контекст, ниже приведен способ управления нашими средами с помощью webpack и переменной MY_ENV, использованной в приведенном выше сценарии развертывания;и версии пакетов в проекте.

Environment Management

var path = require('path');
var useDefaultConfig = require('@ionic/app-scripts/config/webpack.config.js');
module.exports = function () {
var env = process.env.MY_ENV || process.env.IONIC_ENV;

var environmentsMapping = {
  dev_docker: 'dev',
  test: 'dev',
  test_local: 'dev',
  staging: 'prod',
  qa: 'prod'
}

if (env !== 'prod' && env !== 'dev') {
  // Default to dev config
  useDefaultConfig[env] = useDefaultConfig[     environmentsMapping[env] ];
}

  useDefaultConfig[env].resolve.alias = {
    "@environment": path.resolve(__dirname + '/../../src/config/config.' + env + '.ts'),
};

  return useDefaultConfig;
};

Пакеты

"dependencies": {
"@angular/common": "5.0.0",
"@angular/compiler": "5.0.0",
"@angular/compiler-cli": "5.0.0",
"@angular/core": "5.0.0",
"@angular/forms": "5.0.0",
"@angular/http": "5.0.0",
"@angular/platform-browser": "5.0.0",
"@angular/platform-browser-dynamic": "5.0.0",
"@ionic-native/app-version": "^4.11.0",
"@ionic-native/core": "4.3.2",
"@ionic-native/geolocation": "^4.15.0",
"@ionic-native/native-geocoder": "^4.15.0",
"@ionic-native/splash-screen": "4.3.2",
"@ionic-native/status-bar": "4.3.2",
"@ionic/storage": "^2.1.3",
"@ngx-translate/core": "^9.1.1",
"@ngx-translate/http-loader": "^2.0.1",
"analytics-node": "^3.3.0",
"brmasker-ionic-3": "^1.0.9",
"cordova-android": "7.0.0",
"cordova-browser": "5.0.3",
"cordova-plugin-app-version": "^0.1.9",
"cordova-plugin-device": "^1.1.4",
"cordova-plugin-ionic-webview": "^1.1.16",
"cordova-plugin-nativegeocoder": "^3.1.2",
"cordova-plugin-splashscreen": "^4.0.3",
"cordova-plugin-whitelist": "^1.3.1",
"cordova-sqlite-storage": "^2.3.1",
"flag-icon-css": "^3.0.0",
"ionic-angular": "3.9.2",
"ionic-plugin-keyboard": "^2.2.1",
"ionic2-rating": "^1.2.2",
"ionicons": "3.0.0",
"jquery": "^3.3.1",
"lodash": "^4.17.5",
"moment": "^2.21.0",
"ng-select": "^1.0.0-rc.5",
"ngx-bootstrap": "^2.0.5",
"ngx-credit-cards": "^1.0.9",
"raven-js": "^3.26.4",
"rxjs": "5.5.2",
"slick-carousel": "^1.8.1",
"sw-toolbox": "3.6.0",
"zone.js": "^0.8.21"
},
"devDependencies": {
"@ionic/app-scripts": "3.1.0",
"@ionic/cli-plugin-cordova": "1.6.2",
"@types/jasmine": "^2.8.7",
"@types/node": "^10.1.2",
"angular2-template-loader": "^0.6.2",
"html-loader": "^0.5.5",
"ionic": "3.20.0",
"istanbul-instrumenter-loader": "^3.0.1",
"jasmine": "^3.1.0",
"jasmine-spec-reporter": "^4.2.1",
"karma": "^2.0.2",
"karma-chrome-launcher": "^2.2.0",
"karma-coverage-istanbul-reporter": "^2.0.0",
"karma-jasmine": "^1.1.2",
"karma-jasmine-html-reporter": "^1.1.0",
"karma-sourcemap-loader": "^0.3.7",
"karma-webpack": "^3.0.0",
"null-loader": "^0.1.1",
"postcss": "6.0.14",
"protractor": "^5.3.2",
"ts-loader": "^3.5.0",
"ts-node": "^6.0.3",
"typescript": "2.4.2",
"ws": "3.3.2"
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...