From cee9b61126d1726c868fcc61d58977fd7d59fdc8 Mon Sep 17 00:00:00 2001 From: Maksim Kopnov Date: Mon, 21 Sep 2020 19:12:37 +0700 Subject: [PATCH] VP-4928: Fix issues --- .../ModulesDevelop/docker-compose.yml | 1 + .../modules-development-via-docker.md | 35 +++++++++++------- docs/media/screen-restart-platform.png | Bin 0 -> 24204 bytes 3 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 docs/media/screen-restart-platform.png diff --git a/DockerCompose/ModulesDevelop/docker-compose.yml b/DockerCompose/ModulesDevelop/docker-compose.yml index a143a002419..65059a91bad 100644 --- a/DockerCompose/ModulesDevelop/docker-compose.yml +++ b/DockerCompose/ModulesDevelop/docker-compose.yml @@ -43,6 +43,7 @@ services: - ${APP_DATA_MODULES}:/opt/virtocommerce/platform/App_Data/Modules networks: - virto + restart: unless-stopped elastic: image: docker.elastic.co/elasticsearch/elasticsearch:7.7.0 diff --git a/docs/developer-guide/modules-development-via-docker.md b/docs/developer-guide/modules-development-via-docker.md index a394d3ee276..9a936b4dcbe 100644 --- a/docs/developer-guide/modules-development-via-docker.md +++ b/docs/developer-guide/modules-development-via-docker.md @@ -77,7 +77,7 @@ docker-compose -f docker-compose.yml up --build -d 6. [Create new module](./create-new-module.md) as described in the article 7. Write code for new module 8. Build new module -9. Connect new module with the platform +9. Copy built module to `Modules` folder 10. Debug new module ## Run Virto Commerce Platform Manager @@ -86,19 +86,11 @@ Once the containers are started, open VC Platform Manager - http://localhost:809 ![Choose sample data](../media/screen-sample-data.png) -## Connect new module with the platform +## Copy built module to Modules folder -Use symbolic link to connect newly created solution folder to the Platform ~/Modules: - -* Run Command Prompt as an administrator. -* Navigate to the physical location folder of `./Modules` folder on host machine. -* Run the following command: - -```cmd -mklink /d -``` - -* Restart Virto Commerce Platform after new module have been connected to the platform. +* Navigate to the `Modules` folder on local host +* Create folder for newly created module +* Copy `your_module_project.Web` folder to the created folder ## Debugging the module @@ -118,12 +110,29 @@ mklink /d ![image](../media/attach_to_process_3.png) +If the new module has been rebuilt: + +* Overwrite folder for newly created module by `your_module_project.Web` +* Restart the platform - click Setigns->Restart on Platform manager UI: + +![Reststrt platform](../media/screen-restart-platform.png) + +## Cleanup environment after debugging + When debugging process has finished, stop `docker-compose` by command: ```cmd docker-compose down ``` +Don't forget to delete newly created module from the `Modules` and `Modules\AppData` folders. + +If you need to recreate platform database for next debug session, remove `db-volume` by command: + +```cmd +docker volume rm db-volume + ``` + ## How to ### Troubleshooting diff --git a/docs/media/screen-restart-platform.png b/docs/media/screen-restart-platform.png new file mode 100644 index 0000000000000000000000000000000000000000..91f9520af6eccdf058a3a2521fd8a1bf1a451cc7 GIT binary patch literal 24204 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