Команда сборки CDS с версией 3.x '@ sap / cds' не помещает 'csn.json' в модуль SRV - PullRequest
0 голосов
/ 18 июня 2019

Я реорганизовал свой проект для использования новой модели программирования приложений облачной платформы.

Структура моего проекта выглядит следующим образом:

<my_project_name>
  - hdb (db module)
  - srv (service module)
  - ui (ui module)
  - cdsrc.json
  - package.json
  - mta.yaml

cdsrc.json:

{
  "build": {
    "target": ".",
    "tasks": [
      {"src":"hdb","for":"hana","options":{"model":["hdb","srv"]}},
      {"src":"srv","for":"node-cf","options":{"model":["hdb","srv"]}}
    ]
  }
}

package.json:

{
  "name": "<my_project_name>",
  "description": "",
  "version": "1.0.0",
  "engines": {
    "node": "^8.9"
  },
  "files": [
    "hdb",
    "srv"
  ],
  "dependencies": {
    "@sap/cds": "^3.7.1",
    "express": "^4.16.4",
    "hdb": "^0.17.0"
  },
  "devDependencies": {
    "sqlite3": "^4.0.8"
  },
  "scripts": {
    "start": "cds run",
    "build": "cds build/all --clean",
    "deploy": "cds deploy"
  },
  "cds": {
    "requires": {
      "db": {
        "kind": "sqlite",
        "model": [
          "hdb",
          "srv"
        ],
        "credentials": {
          "database": "sqlite.db"
        }
      }
    },
    "folders": {
      "db": "hdb",
      "srv": "srv"
    }
  }
}

srv / package.json:

{
    "name": "srv",
    "dependencies": {
        "@sap/cds": "^3.7.1",
        "@sap/xssec": "^2.1.12",
        <other_packages>
    },
    "scripts": {
        "start": "node server.js"
    },
    "cds": {
        "requires": {
            "db": {
                "kind": "hana",
                "model": "gen/csn.json"
            }
        }
    }
}

srv / server.js:

const cds = require("@sap/cds");
const express = require("express");
//other imports
var app = express();

//other middleware

cds.connect();

cds.serve("gen/csn.json", {
        crashOnError: false
    })
    .in(app)
    .catch((err) => {
        console.log(err);
    });

app.listen(port,  () => {
    console.info(`App listening on port: ${port}`);
});

Когда я собираюМой проект в WebIDE, он успешно создает все файлы .cds и записывает вывод в консоль следующим образом:

> <my_project_name>@1.0.0 build /hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF/.sap_java_buildpack/tomcat/temp/builder/sap.cds.mta/builds/build-838087488308692914/<my_project_name>
> cds build/all --clean

[cds] - cds [3.10.0], compiler [1.13.4], home [/hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF/.sap_java_buildpack/tomcat/temp/builder/sap.cds.mta/builds/build-838087488308692914/<my_project_name>/node_modules/@sap/cds]

[cds] - building project [/hana/shared/HXE/xs/controller_data/executionagent/executionroot/269f9533-c450-4f35-ab0e-b62990473bb5/app/META-INF/.sap_java_buildpack/tomcat/temp/builder/sap.cds.mta/builds/build-838087488308692914/<my_project_name>], clean [true]

[cds] - building module [hdb] using [Hana DB Module Builder]
[cds] - model: hdb/<file1>.cds, hdb/<file2>.cds, <all_other_cds_files>

[cds] - building module [srv] using [Node CF Module Builder]
[cds] - model: model: hdb/<file1>.cds, hdb/<file2>.cds, <all_other_cds_files>

12:03:53 PM (DIBuild) 
[cds] - done > wrote output to:
  hdb/src/gen/.hdinamespace
  hdb/src/gen/csv/<file1>_<entity1>.hdbcds
  hdb/src/gen/csv/<file1>_<entity2>.hdbcds
  hdb/src/gen/csv/<file2>_<entity1>.hdbcds
  ...
  srv/gen/csn.json
  srv/gen/_i18n/i18n.json

[cds] - time: 2600.051ms

CDS return code: 0

Несмотря на то, что команда «cds build» генерирует эти файлы в «hdb / src / gen» иПапки "srv / gen" (я видел все файлы по SSH-соединению, на котором установлена ​​SAP Hana, по пути из вывода выше:4f35-ab0e-b62990473bb5 / app / META-INF / .sap_java_buildpack / tomcat / temp / builder / sap.cds.mta / builds / build-838087488308692914 /), они не отображаются в обозревателе проектов WebIDE.

Когда я собираю свой модуль БД (hdb), он развертывает артефакты в контейнере HDI без каких-либо ошибок, и я могупросмотрите контейнер с Database Explorer

Но запуск модуля "srv" выдает мне эту ошибку:

{ Error: Couldn't find a CDS model at: gen/csn.json
    at notFound (/hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/node_modules/@sap/cds/lib/models/load.js:59:39)
    at EventEmitter.load (/hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/node_modules/@sap/cds/lib/models/load.js:10:50)
    at _loadModel (/hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/node_modules/@sap/cds/lib/runtime/serve.js:78:35)
    at <anonymous>
    at runMicrotasksCallback (internal/process/next_tick.js:122:5)
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickCallback (internal/process/next_tick.js:181:9)
    at Function.Module.runMain (module.js:696:11)
    at startup (bootstrap_node.js:225:16)
    at bootstrap_node.js:646:3 code: 'MODEL_NOT_FOUND', model: 'gen/csn.json' }
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! serve@ start: `node server.js`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the serve@ start script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.


npm ERR! A complete log of this run can be found in:
npm ERR!     /hana/shared/HXE/xs/controller_data/executionagent/executionroot/2dff31be-8521-4d87-a173-f71c65f6b69c/app/.npm/_logs/2019-06-17T11_49_21_417Z-debug.log

Конечно, путь, где "cds build" генерирует csn.json, и путь, где служат.js хочет загрузить эту модель разные.Но не копирует ли он все файлы автоматически в корневой каталог выполнения модуля "srv"?

Мой текущий рабочий процесс:

  • Внесение локальных изменений в файлы CDS с помощью VS Code
  • Создайте проект, чтобы он генерировал csn.json
  • Передайте изменения и отправьте их в Git repo
  • Извлеките изменения в WebIDE
  • CDS Build, чтобы я мог развернуть изменениябаза данных
  • Перед запуском модуля "srv" скопируйте содержимое из csn.json, сгенерированного локально, вставьте его в csn.json WebIDE и замените пути на пути, указанные в выводе консоли сборки CDS.

Я ценю любую помощь в решении этой проблемы.:)

...