Как обслуживать несколько версий файла ресурса БПЛ на сервере EMS Rad

#delphi #delphi-10.3-rio

#delphi #delphi-10.3-rio

Вопрос:

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

Мы запускаем Rad Server 10.3.1 и EMS server в Apache на сервере Windows.

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

 https://www.example.com/api/V1/scheduler_appointments
https://www.example.com/api/V2/scheduler_appointments
  

Однако, когда я запускаю сервер apache, он жалуется на

 "Exception":"EPackageError","Message":"Cannot load package 'MyBPL.'"
  

И он жалуется на «использованные» устройства, которые уже содержались в первой упаковке.

Кто-нибудь смог запустить несколько версий своих файлов ресурсов БПЛ на сервере Rad? Спасибо

Комментарии:

1. Хммм, никогда не создавал два разных бпл-файла с одинаковыми названиями модулей в нем. Отличаются ли имена файлов бпл? Итак, тогда вам лучше всего присвоить именам модулей спецификатор версии, такой как ‘api.xyz.v2.unit1’, а ссылочным блокам использовать ‘unit1’, а затем добавить префиксы имен модулей в проект.

2. @R. Хук — да, они были бы другими. Но у общего устройства одна и та же версия, поэтому у них одинаковое имя файла — и именно здесь я столкнулся с проблемой.

3. Это обычная проблема при работе с бпл-файлами. Вы должны поместить общие модули в отдельный пакет / бпл, а затем связать с общим бпл, чтобы он заработал…

Ответ №1:

Одним из способов может быть включение обоих модулей в один и тот же БПЛ.

 unit Unit1;
type
  [ResourceName('v1')]
  TVResource1 = class(TDataModule)

unit Unit2;
type
  [ResourceName('v2')]
  TVResource2 = class(TDataModule)
  

Комментарии:

1. Это интересная мысль. Это означает, что у меня должны быть дубликаты каждой отдельной конечной точки, даже если они не изменились, верно?

2. Да, но тебе все равно придется это сделать? Даже если бы у вас было 2 BPLS, v1 и v2 были бы полностью отдельными API, потому что root — это / v1 и / v2. Также вы могли бы просто вызвать код версии 1 из конечной точки версии 2 для вещей, которые не изменились.