Как использовать пакеты SDK узла Hyperledger Fabric в действии IBM Cloud Functions? - PullRequest
0 голосов
/ 16 апреля 2019

Я пытаюсь создать действие blockchain node.js IBM Cloud Functions, в котором используется пакет SDK узла Hyperledger Fabric, но у меня возникли проблемы с требованием пакета Fabric-network в действии.

Поскольку это сторонний пакет, кажется, мне нужно загрузить действие в виде файла в формате zip, но когда я это делаю, я вижу:

"error": "Initialization has failed due to: Error: Failed to load gRPC binary module because it was not installed for the current system\nExpected directory: node-v57-linux-x64-glibc\nFound: [node-v57-darwin-x64-unknown]\nThis problem can often be fixed by running \"npm rebuild\" on the current system"

Я хочу создатьДействие javascript, подобное следующему:

'use strict'

const { X509WalletMixin, Gateway } = require('fabric-network')

async function main(params) {
  return { message: 'success' }
}

Как правильно обрабатывать подобные сторонние пакеты?

1 Ответ

2 голосов
/ 17 апреля 2019

Модули Node.js с собственными зависимостями должны быть скомпилированы для той же архитектуры платформы, что и серверная среда выполнения.Если вы связываете каталог node_modules с локального компьютера разработки, он, вероятно, не будет совпадать.

Существует два подхода к использованию библиотек с нативными зависимостями ...

  1. Запустите npm install внутри контейнера Docker из образов платформы.
  2. Создание настраиваемого образа времени выполнения с предварительно установленными библиотеками.

Первый подход наиболее прост, но может быть толькоиспользуется, когда zip-файл, содержащий все исходные файлы и библиотеки, меньше предела размера действия (48 МБ).

Запуск npm install внутри контейнера времени выполнения

  • Выполните следующеекоманда для привязки локального каталога к контейнеру времени выполнения и запуска npm install.
docker run -it -v $PWD:/nodejsAction openwhisk/action-nodejs-v10 "npm install"

Это оставит папку node_modules с собственными зависимостями, скомпилированными для правильного времени выполнения.

  • Архивирование исходных файлов действий, включая каталог node_modules.
zip -r action.zip *
  • Создание нового действия с архивом действий.
ibmcloud wsk action create my-action --kind nodejs:10 action.zip

Создание пользовательского образа среды выполнения

  • Создание Dockerfile с помощью команды npm install, выполняемой во время сборки.
FROM openwhisk/action-nodejs-v10

RUN npm install fabric-network
  • Сборка инажмите на изображение в Docker Hub.
$ docker build -t <USERNAME>/custom-runtime .
$ docker push <USERNAME>/custom-runtime
  • Создайте новое действие, используя пользовательский образ времени выполнения.
ibmcloud wsk action create my-action --docker <USERNAME>/custom-runtime action.zip

Убедитесь, что node_modules включенный в action.zip не включает те же файлы библиотек.

...