There is also Learning services videos site - videos.intersystems.com.
But if you are looking for the videos strictly for developers - it’s only YouTube now. Do you prefer another video hosting? Vimeo?
- Log in to post comments
There is also Learning services videos site - videos.intersystems.com.
But if you are looking for the videos strictly for developers - it’s only YouTube now. Do you prefer another video hosting? Vimeo?
Nigel, just want to be sure that you read CD as Containers Deployment - so it will be available on every delivery site (WRC, download, AWS, GCP, Azure, Dockerhub) but in a container form.
Hi Arto!
Webterminal works via websocket, AFAIK. And you always have the source code to check.
Pinging @Nikita.Savchenko7047 for more details
Hi Lexi!
Thanks for sharing!
This is really cool, I like it!
Here is a screenshot:

The next step is a new UI for class reference! ;)
Hi Vitaly!
Thanks for the idea!
Please submit a task and vote for it.
If we have a lot of votes will consider to add it.
I have one problem with it - if we introduce Russian Community, will you stop answering questions in English? )
Hi Conor!
Thanks for really wise suggestions. Agreed with everything. Two cents/comments:
1. I think we never want to code a lot of ObjectScript inside Dockerfile. Only a few lines to make some necessary configurations and the intention is to make the code more readable paying with some coding conditions (like sc hard-coded sc for error handling).
2. I am very supportive about putting all the possible setup activity into Installer.cls. But the issue is that not all the actively used setup tweaks are supported by %Installer format, e.g. RESTFul Web app. If you suggest to use <Invoke> - it's better to call method directly. So, here I'm putting some wishes for %Installer format approvements.
Always open for improvements.
Well, here are some comments:
do ##class(%SYSTEM.Process).CurrentDirectory("$PWD")This is to make WORKDIR /opt/irisapp current for IRIS.
$@
Here we run the arbitrary ObjectScript in Dockerfile
if '\$Get(sc) do ##class(%SYSTEM.Process).Process.Terminate(, 1)
Here we check the status of the sc variable changed with status from ObjectScript in Dockerfile if it has an error and terminate IRIS in this case and fail the build.
do ##class(SYS.Container).QuiesceForBundling()
do ##class(SYS.Container).SetMonitorStateOK("irisowner")Two methods to prepare IRIS operate in a container mode properly. I'm pinging @Luca Ravazzolo to provide more details on it.
Do ##class(Security.Users).UnExpireUserPasswords("*")This removes the password expiration because it's very annoying to change the password on every build. This line could be used for DEVELOPMENT MODE only. Please remove the line if you build the image for PRODUCTION.
Noticed some good stuff in @Dmitry Maslennikov's iris-template repo and updated mine foundation template for development with IRIS Community Edition in ObjectScript.
It's much easier now to run ObjectScript instructions in Dockerfile. Check the basic Dockerfie:
ARG IMAGE=intersystems/iris:2019.1.0S.111.0
ARG IMAGE=store/intersystems/irishealth:2019.3.0.308.0-community
ARG IMAGE=store/intersystems/iris-community:2019.3.0.309.0
FROM $IMAGE
USER root
WORKDIR /opt/irisapp
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp
USER irisowner
COPY Installer.cls .
COPY src src
COPY irissession.sh /
SHELL ["/irissession.sh"]
RUN \
do $SYSTEM.OBJ.Load("Installer.cls", "ck") \
set sc = ##class(App.Installer).setup()
# bringing the standard shell back
SHELL ["/bin/bash", "-c"]
CMD [ "-l", "/usr/irissys/mgr/messages.log" ]And another which installs ZPM and Webterminal:
ARG IMAGE=intersystems/iris:2019.1.0S.111.0
ARG IMAGE=store/intersystems/iris-community:2019.3.0.309.0
FROM $IMAGE
USER root
WORKDIR /opt/irisapp
RUN chown ${ISC_PACKAGE_MGRUSER}:${ISC_PACKAGE_IRISGROUP} /opt/irisapp
USER irisowner
RUN mkdir -p /tmp/deps \
&& cd /tmp/deps \
&& wget -q https://pm.community.intersystems.com/packages/zpm/latest/installer -O zpm.xml
COPY Installer.cls .
COPY src src
COPY irissession.sh /
# running IRIS and open IRIS termninal in USER namespace
SHELL ["/irissession.sh"]
# below is objectscript executed in terminal
# each row is what you type in terminal and Enter
RUN \
do $SYSTEM.OBJ.Load("Installer.cls", "ck") \
set sc = ##class(App.Installer).setup() \
Do $system.OBJ.Load("/tmp/deps/zpm.xml", "ck") \
zn "IRISAPP" \
zpm "install webterminal"
# bringing the standard shell back
SHELL ["/bin/bash", "-c"]
CMD [ "-l", "/usr/irissys/mgr/messages.log" ]John, we are considering it. There is a possibility if we have enough support and requests from developers.
Will DC meetup influence the decision? )
Hi John! Do you plan to come to DACH Summit 2019?
Hi Brendan!
What exactly you are looking for to have in IRIS terminal functionality?
Perhaps web-terminal functionality will be enough for you?
If so, here is the dockerfile which builds IRIS container with web-terminal inside - it installs package manager client (ZPM) and installs web-terminal on top.
HTH
Hi Artem!
Very cool!
I've just tested it on docker (build a repo, see the PR) - and it works like a charm!
For docker funs it I set all the settings in Global during container building, so you just need to build a container and then you can run tests already.
So git clone/download the repo and then run in the folder:
$ docker-compose -f "docker-compose.yml" up -d --build
Open IRIS terminal and run tests:
$ docker-compose exec iris iris session iris
USER>do ##class(DocumentTemplate.Test).RunAllTests("/iris/app/TestDocs")Collect the results in /Results folder of the repo. Tested on Mac OS with IRIS 2019.3 CE, store/intersystems/iris-community:2019.3.0.309.0
Ok, this is fair - we can remove the Best Practice tag for this.
The idea was that this is important conversation if you consider internal guidelines on this for your organization and can take one approach from the best practices of experienced developers.
The conversation is helpful.
Hi @kandhan ramalingam !
I need to get file from Cache Database. File stored as a FileBinaryStream in DB.
Could you please create a separate question for this one?
There is one exception though: if you are using some IRIS UI tools e.g. to develop productions you need to manage export/import these artefacts into files to let them be committed to Github then. Preferabbly automatically (e.g. per each Save operation).
Hi Scott!
There is no need to integrate IRIS with Github. It's more about how the IDE you are using to develop IRIS solutions is integrated with Github. And the majority of modern IDE are integrated with Github already: VSCode goes with Git/Github integration out of the box ( and I believe Visual Studio too (as soon as Github is Microsoft now too).
If the question is how you can develop IRIS solutions having the code managed in Github there are a lot of approaches. You can check these videos made by myself which illustrate:
How to create IRIS Application in Github, develop it in VSCode and commit changes into the repo
How to collaborate and make changes to an already existing project in Github repo using Github Flow
And:
@Yone Moreno , I assume it's an exercise. In that case, do you mind to share your code in a public repo and people will understand what you are going to achieve and will PR the answer.
This is fixed in IRIS 2019.3 community version.
Image tag is store/intersystems/iris-community:2019.3.0.309.0
The same video on Developers Youtube if it's more comfortable
Thanks @Josh Lubarr !
Is there a programmatical (non-interactive) way to export/import these ^Security settings?
Thanks for sharing this, @Kyle Baxter!
BTW, what is the programmatic way to make this setting?
If GraphQL can help?
The related post on OData with IRIS
Hi Angelo!
This is a very good question. But there are community versions in containers on docker:
image name are for InterSystems IRIS:
store/intersystems/iris-community:2019.3.0.309.0and for InterSystems IRIS for Health:
store/intersystems/irishealth:2019.3.0.308.0-community
Check this template app to start using this immediately.
Hi, Steven!
Thanks for this very useful article. Never knew that we can evaluate ObjectScript expressions inside JSON string. Great staff!
Hi Yang!
Check this series by @Brendan Bannon on Globals Mapping. I hope this is what you are looking for.
Thank you, Mario!
Does this work for IRIS Community version too?