Quem nunca passou pela situação de estar desenvolvendo um belo exemplo usando uma imagem Docker do IRIS e o processo de geração da imagem falhar no Dockerfile porque a licença sob a qual a imagem foi criada não contém certas permissões?
No meu caso, o que eu estava implantando no Docker é uma pequena aplicação que usa o tipo de dado Vector. Com a versão Community, isso não é um problema porque ela já inclui o Vector Search e o armazenamento de vetores. No entanto, quando troquei a imagem do IRIS para um IRIS convencional (o latest-cd), descobri que ao construir a imagem, incluindo as classes que ele havia gerado, retornou este erro:
9.505 ERROR
9.505 > ERROR
9.505 Compiling class Inquisidor.Object.Licitacion
9.505 ERROR
9.505 > ERROR
9.538 Compiling class Inquisidor.Message.LicitacionResponse
Esse erro me deixou confuso, porque eu, como uma pessoa obediente, havia definido no meu docker-compose.yml o parâmetro que indica onde minha licença válida está localizada:
iris:
init: true
container_name: iris
build:
context: .
dockerfile: iris/Dockerfile
ports:
- 52774:52773
- 51774:1972
volumes:
- ./iris/shared:/iris-shared
environment:
- ISC_DATA_DIRECTORY=/iris-shared/durable
command: --check-caps false --ISCAgent false --key /iris-shared/iris.key
Demorei um pouco para perceber que o problema era a imagem original que eu estava usando, e não a licença que eu tinha, como você pode ver, não sou a pessoa mais esperta nesse caso.
O problema estava no ponto em que eu importava minhas classes para a imagem padrão do IRIS.
RUN \
zn "%SYS" \
do
do
set sc=
set helper=
do helper.EnableSSLSuperServer() \
do
zn "INQUISIDOR" \
set sc = $SYSTEM.OBJ.LoadDir("/opt/irisapp/src/Inquisidor", "ck", , 1) \
set production = "Inquisidor.Production" \
set ^Ens.Configuration("csp","LastProduction") = production \
do
A compilação do código estava retornando o erro anterior. O que eu deveria fazer para corrigir isso? Foi muito simples: eu tive que enviar a nova licença para a imagem IRIS inicial e pedir para ela atualizar a licença na primeira linha dos comandos que eu estava usando.
O primeiro passo é mover a nova licença para o diretório /mgr
da instalação, o que eu fiz com este código:
COPY --chown=$ISC_PACKAGE_MGRUSER:$ISC_PACKAGE_IRISGROUP /iris/iris.key /usr/irissys/mgr
RUN chmod +x /usr/irissys/mgr/iris.key
O caminho de instalação do IRIS na nossa imagem é /usr/irissys/mgr
, e o caminho /iris/iris.key
é o meu diretório local. Com a licença na imagem IRIS, eu só precisei dizer ao IRIS para atualizar sua licença, então eu modifiquei os comandos anteriores adicionando a seguinte declaração:
RUN \
zn "%SYS" \
do
Et voilà! Agora eu tenho minha imagem IRIS com minha licença carregada antes de importar e compilar minhas classes. Sem mais erros de compilação.
Espero que seja útil para você!