{"id":3348,"date":"2022-12-01T11:08:38","date_gmt":"2022-12-01T11:08:38","guid":{"rendered":"http:\/\/the-codest.localhost\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"modified":"2026-03-09T13:07:45","modified_gmt":"2026-03-09T13:07:45","slug":"viena-datora-apstradat-vairakas-vides-vairakiem-projektiem","status":"publish","type":"post","link":"https:\/\/thecodest.co\/lv\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","title":{"rendered":"Vai vien\u0101 dator\u0101 varat str\u0101d\u0101t ar vair\u0101k\u0101m vid\u0113m vair\u0101kiem projektiem?"},"content":{"rendered":"<p>Apskat\u012bsim tipisku darba vidi uz\u0146\u0113mum\u0101 <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/how-to-choose-software-house\/\">programmat\u016bras m\u0101ja<\/a>. Jums ir vair\u0101ki klienti, kuriem ir da\u017e\u0101das vides. Da\u017ei dod priek\u0161roku MySQL, citi - Postgres. Vienai j\u016bsu lietojumprogrammas versijai ir nepiecie\u0161ama <a href=\"https:\/\/thecodest.co\/lv\/blog\/top-programming-languages-to-build-e-commerce\/\">Java<\/a> 11, un v\u0113l viens Java 17. Frontend ir nepiecie\u0161ams npm 12 vai 16, jo j\u016bs izmantojat da\u017e\u0101das versijas <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/what-is-node-js-used-for-in-angular\/\">le\u0146\u0137a<\/a>. Visbeidzot, jums ir tr\u012bsdimensiju mas\u012bvs, kas satur visu j\u016bsu DB, backend un frontend versiju kombin\u0101cijas. Izklaus\u0101s slikti, bet k\u0101du dienu j\u016bsu priek\u0161nieks saka...<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"\/app\/uploads\/2024\/05\/comic.png\" alt=\"komiksi&lt;em&gt;ar&lt;\/em&gt; priek\u0161nieku\" title=\"kad j\u016bsu priek\u0161nieks saka...\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Multivers\u0101las vides saknes<\/h2>\n\n\n\n<p>Iepriek\u0161 aprakst\u012bt\u0101 situ\u0101cija nav nekas neparasts. Migr\u0101cija starp valodas vai ietvara versij\u0101m, datub\u0101zu atjaunin\u0101jumi vai vienk\u0101r\u0161i at\u0161\u0137ir\u012bgas klientu pras\u012bbas var apg\u0101zt visas konfigur\u0101cijas. Mums ir j\u0101b\u016bt risin\u0101jumam, kas pal\u012bdz <a href=\"https:\/\/thecodest.co\/lv\/blog\/why-us-companies-are-opting-for-polish-developers\/\">mums<\/a> p\u0101rvald\u012bt \u0161\u012bs izmai\u0146as, kas atbilst da\u017eiem pie\u0146\u0113mumiem un\/vai pras\u012bb\u0101m, un\/vai m\u0113r\u0137iem:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><b> viegli lietojams<\/b> - viena komanda, lai main\u012btu konfigur\u0101ciju vai versiju,<\/li>\n\n\n\n<li><b>bag\u0101ta bibliot\u0113ka<\/b> - j\u0101atbalsta vair\u0101kas tehnolo\u0123ijas un \"lietas\" (bibliot\u0113kas, ietvarprogrammas, lietotnes),<\/li>\n\n\n\n<li><b> papla\u0161in\u0101ms<\/b> - jums vajadz\u0113tu pied\u0101v\u0101t iesp\u0113ju pievienot savus spraud\u0146us.<\/li>\n<\/ul>\n\n\n\n<p>\u0160aj\u0101 rakst\u0101 piev\u0113rs\u012b\u0161os trim jom\u0101m. Pirm\u0101 ir Java un JVM r\u012bki. Otr\u0101 ir visp\u0101r\u0113jas noz\u012bmes r\u012bki. Tre\u0161\u0101 ir par to, k\u0101 izmantot <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/docker-developer\/\">docker<\/a> lai sasniegtu m\u016bsu m\u0113r\u0137us.<\/p>\n\n\n\n<p>\u200b<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Es esmu Java un str\u0101d\u0101ju ar JVM<\/h2>\n\n\n\n<p>Kad esat <strong><a href=\"https:\/\/thecodest.co\/lv\/dictionary\/java-developer\/\">Java izstr\u0101d\u0101t\u0101js<\/a><\/strong> vai, visp\u0101r\u012bg\u0101k, str\u0101d\u0101jat ar <strong>JVM tehnolo\u0123ijas<\/strong>, tad varat izmantot <a href=\"https:\/\/sdkman.io\/\">SDKMAN!<\/a>. Tas ir \u013coti jauks un viegli lietojams r\u012bks, kas atbalsta daudzas bibliot\u0113kas, strukt\u016bras un valodas.<\/p>\n\n\n\n<p>Uzst\u0101d\u012b\u0161anas process <strong>SDKMAN!<\/strong> Tas ir diezgan vienk\u0101r\u0161i. Jums ir nepiecie\u0161ams palaist:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>curl -s \"https:\/\/get.sdkman.io\" | bash<\/code><\/code><\/pre>\n\n\n\n<p>un p\u0113c tam<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code><code>source \"$HOME\/.sdkman\/bin\/sdkman-init.sh\"<\/code><\/code><\/code><\/pre>\n\n\n\n<p>Tagad varat p\u0101rvald\u012bt <strong>Java<\/strong>, <strong>Scala<\/strong> un <strong>Maven<\/strong> versijas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versiju p\u0101rvald\u012bba - piem\u0113rs<\/h3>\n\n\n\n<p>\u0160aj\u0101 piem\u0113r\u0101 m\u0113s instal\u0113sim un atjaunin\u0101sim da\u017eu r\u012bku versijas. \u0160\u012b ir tikai neliela pieejamo r\u012bku apak\u0161kopa.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Uzst\u0101d\u012b\u0161ana<\/h3>\n\n\n\n<p>Pie\u0146emsim, ka j\u016bsu jaunais <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/why-do-projects-fail\/\">projekts<\/a> izmanto <strong>Java 17<\/strong>. Jums nav <strong>Java<\/strong> instal\u0113ta versija. J\u016bs v\u0113laties to instal\u0113t un papildus pievienot Maven Daemon r\u012bku, lai pa\u0101trin\u0101tu kompil\u0113\u0161anu. T\u0101tad jums ir j\u0101instal\u0113 ar\u012b Maven. Lai to izdar\u012btu, ir j\u0101izpilda tr\u012bs vienk\u0101r\u0161as komandas:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk instal\u0113t java 17-open\n\n$ sdk instal\u0113t maven 3.8.4\n\n$ sdk install mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Katra r\u012bka instal\u0113\u0161anas beig\u0101s jums tiks uzdots jaut\u0101jums par t\u0101 noklus\u0113juma iestat\u012b\u0161anu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>Vai v\u0113laties, lai Java 17-open tiktu iestat\u012bta k\u0101 noklus\u0113juma iestat\u012bjums? (Y\/n):<\/code><\/code><\/pre>\n\n\n\n<p>Tas ir svar\u012bgi, ja instal\u0113jat jaunu bibliot\u0113kas vai valodas versiju, jo SDKMAN! uzst\u0101d\u012bs \u0161o noklus\u0113juma versiju k\u0101 glob\u0101lu visiem pa\u0161reiz\u0113j\u0101 lietot\u0101ja termin\u0101\u013ciem.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versiju p\u0101rbaude un atjaunin\u0101\u0161ana<\/h3>\n\n\n\n<p>Laiku pa laikam SDKMAN! ir j\u0101atjaunina indeksi. T\u0101 laik\u0101 j\u016bs var\u0113tu sa\u0146emt pazi\u0146ojumu, ka ir da\u017eas jaunas versijas j\u016bsu izmantotajiem r\u012bkiem. M\u0113s varam p\u0101rbaud\u012bt, kuras versijas ir pieejamas, ierakstot <code>sdk ls<\/code>. Par <code>sdk ls maven<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Pieejam\u0101s Maven versijas\n\n================================================================================\n\n    3.8.6 3.3.3\n\n    3.8.5 3.3.1\n\n3.8.4 3.2.5\n\n    3.8.3 3.2.3\n\n    3.8.2 3.2.2\n\n    3.8.1 3.2.1\n\n    3.6.3 3.1.1\n\n    3.6.2 3.1.0\n\n    3.6.1 3.0.5\n\n    3.6.0 3.0.4\n\n    3.5.4\n\n    3.5.3\n\n    3.5.2\n\n    3.5.0\n\n    3.3.9\n\n\n\n================================================================================\n\nviet\u0113j\u0101 versija\n\npa\u0161laik lieto\u0161an\u0101\n\n================================================================================<\/code><\/pre>\n\n\n\n<p>K\u0101 redzams iepriek\u0161, Maven ir jaun\u0101ka versija nek\u0101 t\u0101, ko m\u0113s izmantojam. Tas pats attiecas uz <code>mvnd<\/code> (0.8.2) un Java (19-open). Atjaunin\u0101sim visu. Lai to izdar\u012btu, mums vienk\u0101r\u0161i j\u0101izsauc instal\u0113\u0161anas komanda, bet \u0161oreiz m\u0113s neizmantosim versijas noteic\u0113ju:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">$ sdk instal\u0113t maven\n\n$ sdk instal\u0113t mvnd\n\n$ sdk instal\u0113t java<\/code><\/pre>\n\n\n\n<p>Ta\u010du notika kaut kas nepareizs. <code>Maven<\/code> un <code>mvnd<\/code> ir pareizas versijas, bet <strong>Java<\/strong> ir versija <code>17.0.5-tem<\/code>. Tas ir t\u0101p\u0113c, ka r\u012bka \"jaun\u0101ko\" versiju kontrol\u0113 t\u0101 p\u0101rdev\u0113js, nevis viet\u0113jais SDKMAN! kas ir \u0161is p\u0101rdev\u0113js? P\u0101rdev\u0113js SDKMAN! ir k\u0101ds, kas var public\u0113t versiju. Tom\u0113r pie\u0146emsim, ka m\u0113s beidzot instal\u0113jam <code>19 atv\u0113rts<\/code>, un m\u0113s to padar\u012bj\u0101m par noklus\u0113juma iestat\u012bjumu, bet k\u0101da iemesla d\u0113\u013c mums ir nepiecie\u0161ams izmantot <code>17 atv\u0113rts<\/code>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Viet\u0113j\u0101s versijas un per-termin\u0101lu versiju p\u0101rvald\u012bba<\/h3>\n\n\n\n<p>\u200b<br>M\u0113s varam konfigur\u0113t <code>noklus\u0113juma<\/code> r\u012bka versija, kas ir glob\u0101la visiem projektiem un termin\u0101\u013ciem. Bet, ja mums ir nepiecie\u0161ama konkr\u0113ta versija, mums ir divi veidi, k\u0101 to izdar\u012bt. Pirmais ir izmantot <code>sdk lieto\u0161ana<\/code> komandu ikreiz, kad v\u0113lamies izmantot konkr\u0113tu r\u012bka versiju pa\u0161reiz\u0113j\u0101 termin\u0101l\u012b. Otrais ir sagatavot versiju sarakstu <code>.sdkmanrc<\/code> fails, kas tiek saglab\u0101ts kop\u0101 ar projektu.<\/p>\n\n\n\n<p>Pirm\u0101 iesp\u0113ja ir paredz\u0113ta vienreiz\u0113jai lieto\u0161anai, bet otr\u0101 ir paredz\u0113ta darbam komand\u0101s un konfigur\u0101ciju koplieto\u0161anai starp <a href=\"https:\/\/thecodest.co\/lv\/dictionary\/how-to-lead-software-development-team\/\">komanda<\/a> locek\u013ci.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">SDKMAN plusi un m\u012bnusi!<\/h3>\n\n\n\n<p>SDKMAN! ir \u013coti viegli lietojams, un tam ir bag\u0101t\u012bga atbalst\u012bto r\u012bku, ietvaru un valodu bibliot\u0113ka. T\u0101 darbojas Linux, MacOS un Windows. No otras puses, \u0161is r\u012bks ir orient\u0113ts uz JVM, un tam ir nepiecie\u0161ams autora piekri\u0161ana b\u016bt par pieg\u0101d\u0101t\u0101ju. Turkl\u0101t meh\u0101nika <code>.sdkmanrc<\/code> ir \u013coti slikta un var iev\u0113rojami pal\u0113nin\u0101t direktoriju mai\u0146as procesu.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Es v\u0113l\u0113tos izmantot daudzas citas valodas<\/h2>\n\n\n\n<p>Ja jums ir nepiecie\u0161ams izmantot daudzas valodas un r\u012bkus, jums vajadz\u0113tu apl\u016bkot <a href=\"https:\/\/asdf-vm.com\/\">asdf<\/a>. \u0160is r\u012bks ir v\u0113rsts uz \"augsta l\u012bme\u0146a\" r\u012bkiem. Lai gan SDKMAN! var atrast daudzus Java specifiskus r\u012bkus, piem\u0113ram, Bpipe vai Znai, asdf pied\u0101v\u0101 daudz vair\u0101k r\u012bku, bet ne tik specifiskus. Protams, da\u017ei no \u0161iem r\u012bkiem p\u0101rkl\u0101jas, piem\u0113ram, Java, Tomcat vai mvnd ir pieejami abos.<\/p>\n\n\n\n<p>Ja v\u0113laties izmantot <code>asdf<\/code>, jums ir j\u0101b\u016bt <code>git<\/code> un <code>curl<\/code> uzst\u0101d\u012bts. P\u0113c tam j\u016bs vienk\u0101r\u0161i:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\"><code>git clone https:\/\/github.com\/asdf-vm\/asdf.git ~\/.asdf --branch v0.10.2<\/code><\/code><\/pre>\n\n\n\n<p>un pievienojiet \u0161\u012bs rindas <code>~\/.bashrc<\/code> file:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">. $HOME\/.asdf\/asdf.sh\n\n. $HOME\/.asdf\/completions\/asdf.bash<\/code><\/pre>\n\n\n\n<p>Tagad varat instal\u0113t spraud\u0146us un r\u012bkus iecien\u012bt\u0101kaj\u0101s versij\u0101s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Uz spraud\u0146iem balst\u012bta p\u0101rvald\u012bba<\/h3>\n\n\n\n<p>At\u0161\u0137ir\u012bb\u0101 no SDKMAN!, <code>asdf<\/code> r\u012bku p\u0101rvald\u012bbai izmanto spraud\u0146us. T\u0101tad, pirms varat instal\u0113t r\u012bku, ir j\u0101instal\u0113 spraudnis. Atgriez\u012bsimies pie m\u016bsu piem\u0113ra projekta un m\u0113\u0123in\u0101sim konfigur\u0113t vidi, izmantojot <code>asadfsdf<\/code>.<\/p>\n\n\n\n<p>Vispirms mums ir j\u0101instal\u0113 spraud\u0146i:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf spraudnis pievienot java\n\nasdf spraudnis pievienot maven\n\nasdf spraudnis pievienot mvnd<\/code><\/pre>\n\n\n\n<p>P\u0113c tam varam instal\u0113t r\u012bkus:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">asdf instal\u0113t java openjdk-17\n\nasdf instal\u0113t maven 3.8.4\n\nasdf instal\u0113t mvnd 0.7.1<\/code><\/pre>\n\n\n\n<p>Un atkal, at\u0161\u0137ir\u012bb\u0101 no SDKMAN!, <code>asdf<\/code> neko nemaina m\u016bsu vid\u0113. Kad m\u0113s m\u0113\u0123in\u0101m izmantot java, m\u0113s sa\u0146emam \u0161\u0101du k\u013c\u016bdas zi\u0146ojumu:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"bash\" class=\"language-bash\">Komandai Java nav iestat\u012bta versija\n\nApsveriet iesp\u0113ju konfigur\u0101cijas fail\u0101 ~\/.tool-versions pievienot vienu no \u0161\u0101d\u0101m versij\u0101m\n\njava openjdk-17<\/code><\/pre>\n\n\n\n<p>Mums ir nepiecie\u0161ams izveidot failu <code>.tool-versions<\/code> s\u0101kuma direktorij\u0101, lai p\u0101rvald\u012btu noklus\u0113juma versijas.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Viet\u0113j\u0101s un glob\u0101l\u0101s versijas<\/h3>\n\n\n\n<p>Programmat\u016bras versiju atjaunin\u0101\u0161ana ar <code>asdf<\/code> ir pavisam vienk\u0101r\u0161a. M\u0113s vienk\u0101r\u0161i instal\u0113jam jaunu versiju. T\u0101 k\u0101 \u0161is process neietekm\u0113 vidi, m\u0113s to varam izdar\u012bt jebkur\u0101 laik\u0101 un jebkur\u0101 failu sist\u0113mas viet\u0101. Ja v\u0113lamies izmantot k\u0101du konkr\u0113tu programmat\u016bras versiju, mums projekta direktorij\u0101 ir j\u0101izveido <code>.tool-versions<\/code> failu, ko var kop\u012bgot komandas locek\u013ci. Atcerieties, ka jums ir j\u0101garant\u0113, ka visiem komandas locek\u013ciem ir <code>asdf<\/code> un instal\u0113ti spraud\u0146i. Spraud\u0146u saraksts, kur\u0101 var atrast <a href=\"https:\/\/github.com\/asdf-vm\/asdf-plugins\">\u0161eit<\/a>.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Versiju konflikti<\/h3>\n\n\n\n<p><code>asdf<\/code> atbalsta ne tikai programm\u0113\u0161anas valodas, ietvarstrukt\u016bras un r\u012bkus, piem\u0113ram, vim vai kubernetess. T\u0101 atbalsta ar\u012b datub\u0101zes. T\u0101d\u0101 gad\u012bjum\u0101 m\u0113s var\u0113tu instal\u0113t vair\u0101kas, piem\u0113ram, Postgres versijas, bet var\u0113tu palaist tikai vienu gad\u012bjumu. Tas ir t\u0101p\u0113c, ka <code>asdf<\/code> izpilda komandas tie\u0161i oper\u0113t\u0101jsist\u0113m\u0101 bez atdal\u012b\u0161anas sl\u0101\u0146a. Tas rada t\u0101das probl\u0113mas k\u0101 \"ports jau tiek izmantots\" un resursu konfliktus.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Priek\u0161roc\u012bbas un tr\u016bkumi<\/h3>\n\n\n\n<p><code>asdf<\/code> ir \u013coti labs r\u012bks, ja v\u0113laties str\u0101d\u0101t poligloti run\u0101jo\u0161\u0101 vid\u0113. Tas atbalsta daudzus r\u012bkus, valodas un ietvarstrukt\u016bras. Uz spraud\u0146iem balst\u012bt\u0101 arhitekt\u016bra \u013cauj to \u013coti viegli papla\u0161in\u0101t. Tom\u0113r ar da\u017eiem t\u0101 bibliot\u0113k\u0101 eso\u0161ajiem r\u012bkiem instal\u0113\u0161anas laik\u0101 ir nepiecie\u0161ams veikt papildu darbu, lai nodro\u0161in\u0101tu visas nepiecie\u0161am\u0101s atkar\u012bbas. <code>asdf<\/code> nedarbojas oper\u0113t\u0101jsist\u0113m\u0101 Windows, pat ja <a href=\"https:\/\/en.wikipedia.org\/wiki\/Windows_Subsystem_for_Linux\">WSL<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">P\u0113d\u0113jais, bet ne maz\u0101k svar\u012bgais - Docker<\/h2>\n\n\n\n<p>Kad iepriek\u0161 run\u0101ju par ostas konfliktu, daudzi no jums zina risin\u0101jumu.<\/p>\n\n\n\n<p><a href=\"https:\/\/www.docker.com\/\">Docker<\/a> da\u017eos gad\u012bjumos var\u0113tu mums pal\u012bdz\u0113t. Es to piemin\u0113ju no pien\u0101kuma, jo \u0161is r\u012bks ir tik liels un sare\u017e\u0123\u012bts, ka m\u0113s to nevaram apspriest vien\u0101 rakst\u0101.<\/p>\n\n\n\n<p>Kop\u0101 ar Docker mums vajadz\u0113tu izmantot <a href=\"https:\/\/docs.docker.com\/compose\/\">docker-compose<\/a> r\u012bks, kas dod mums iesp\u0113ju koordin\u0113t vair\u0101ku konteineru vidi.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Docker plusi un m\u012bnusi<\/h3>\n\n\n\n<p>Docker pal\u012bdz mums p\u0101rvald\u012bt r\u012bkus, kuriem nepiecie\u0161ami konkr\u0113ti resursi, piem\u0113ram, porti vai faili. Tas nodala gad\u012bjumus konteineros un nodro\u0161ina piln\u012bgu kontroli p\u0101r tiem. Tom\u0113r Docker ir r\u012bks, kas m\u016bsu darba vid\u0113 ievie\u0161 daudz sare\u017e\u0123\u012bjumu un da\u017eos gad\u012bjumos var rad\u012bt probl\u0113mas. Viens no \u0161\u0101diem gad\u012bjumiem, kad Docker tiek izmantots test\u0101, ir aprakst\u012bts vien\u0101 no m\u016bsu iepriek\u0161\u0113j\u0101m <a href=\"https:\/\/thecodest.co\/blog\/test-containers-how-to-make-tests-easier\">raksts<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Rezum\u0113jot<\/h2>\n\n\n\n<p>Es zinu, ka neesmu aprakst\u012bjis visus r\u012bkus, kurus var izmantot r\u012bku versiju p\u0101rvald\u012bbai. To ir daudz vair\u0101k, piem\u0113ram. <a href=\"https:\/\/www.jenv.be\/\">jEnv<\/a> kas var\u0113tu aizst\u0101t SDKMAN,<\/p>\n\n\n\n<p>vai <a href=\"https:\/\/github.com\/nvm-sh\/nvm\">NVM<\/a> ko varam izmantot, lai p\u0101rvald\u012btu npm vai <a href=\"https:\/\/rvm.io\/\">RVM<\/a> vietn\u0113 <a href=\"https:\/\/thecodest.co\/lv\/case-studies\/providing-a-team-of-ruby-developers-for-a-fintech-company\/\">Rub\u012bns<\/a>. Es koncentr\u0113jos uz r\u012bkiem, kurus \"p\u0101rbaud\u012bju kaujas lauk\u0101\" un kurus varu ieteikt ikvienam.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/thecodest.co\/contact\/\"><img loading=\"lazy\" decoding=\"async\" width=\"1283\" height=\"460\" src=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png\" alt=\"\" class=\"wp-image-4927\" srcset=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_.png 1283w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-300x108.png 300w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-1024x367.png 1024w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-768x275.png 768w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-18x6.png 18w, https:\/\/thecodest.co\/app\/uploads\/2024\/05\/interested_in_cooperation_-67x24.png 67w\" sizes=\"auto, (max-width: 1283px) 100vw, 1283px\" \/><\/a><\/figure>","protected":false},"excerpt":{"rendered":"<p>Vai ir k\u0101ds zelta vidusce\u013c\u0161, lai apstr\u0101d\u0101tu daudzas vides lielam skaitam tikai vien\u0101 dator\u0101? M\u016bsu Java eksperts Bart\u0142omiej zina atbildi!<\/p>","protected":false},"author":2,"featured_media":3349,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[8],"tags":[],"class_list":["post-3348","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v27.3 (Yoast SEO v27.3) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Handle multiple environments for multiple projects on one machine? - The Codest<\/title>\n<meta name=\"description\" content=\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thecodest.co\/lv\/emuars\/viena-datora-apstradat-vairakas-vides-vairakiem-projektiem\/\" \/>\n<meta property=\"og:locale\" content=\"lv_LV\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Handle multiple environments for multiple projects on one machine?\" \/>\n<meta property=\"og:description\" content=\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thecodest.co\/lv\/emuars\/viena-datora-apstradat-vairakas-vides-vairakiem-projektiem\/\" \/>\n<meta property=\"og:site_name\" content=\"The Codest\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-01T11:08:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-03-09T13:07:45+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\" \/>\n\t<meta property=\"og:image:width\" content=\"960\" \/>\n\t<meta property=\"og:image:height\" content=\"540\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"thecodest\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"thecodest\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"},\"author\":{\"name\":\"thecodest\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\"},\"headline\":\"Handle multiple environments for multiple projects on one machine?\",\"datePublished\":\"2022-12-01T11:08:38+00:00\",\"dateModified\":\"2026-03-09T13:07:45+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"},\"wordCount\":1315,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"articleSection\":[\"Software Development\"],\"inLanguage\":\"lv\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\",\"name\":\"Handle multiple environments for multiple projects on one machine? - The Codest\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"datePublished\":\"2022-12-01T11:08:38+00:00\",\"dateModified\":\"2026-03-09T13:07:45+00:00\",\"description\":\"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#breadcrumb\"},\"inLanguage\":\"lv\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"lv\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/05\\\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png\",\"width\":960,\"height\":540},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/blog\\\/handle-multiple-environments-for-multiple-projects-on-one-machine\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thecodest.co\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Handle multiple environments for multiple projects on one machine?\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#website\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"name\":\"The Codest\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thecodest.co\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"lv\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#organization\",\"name\":\"The Codest\",\"url\":\"https:\\\/\\\/thecodest.co\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lv\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"contentUrl\":\"https:\\\/\\\/thecodest.co\\\/app\\\/uploads\\\/2024\\\/03\\\/thecodest-logo.svg\",\"width\":144,\"height\":36,\"caption\":\"The Codest\"},\"image\":{\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/pl.linkedin.com\\\/company\\\/codest\",\"https:\\\/\\\/clutch.co\\\/profile\\\/codest\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thecodest.co\\\/#\\\/schema\\\/person\\\/7e3fe41dfa4f4e41a7baad4c6e0d4f76\",\"name\":\"thecodest\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"lv\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g\",\"caption\":\"thecodest\"},\"url\":\"https:\\\/\\\/thecodest.co\\\/lv\\\/author\\\/thecodest\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Vai vien\u0101 dator\u0101 varat str\u0101d\u0101t ar vair\u0101k\u0101m vid\u0113m vair\u0101kiem projektiem? - The Codest","description":"Uzziniet, k\u0101 izstr\u0101d\u0101t\u0101ji var izmantot vair\u0101kas vides da\u017e\u0101diem projektiem vien\u0101 dator\u0101, izmantojot versiju p\u0101rvaldniekus un konteineriz\u0101ciju.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thecodest.co\/lv\/emuars\/viena-datora-apstradat-vairakas-vides-vairakiem-projektiem\/","og_locale":"lv_LV","og_type":"article","og_title":"Handle multiple environments for multiple projects on one machine?","og_description":"Discover how developers can handle multiple environments for different projects on a single machine using version managers and containerization.","og_url":"https:\/\/thecodest.co\/lv\/emuars\/viena-datora-apstradat-vairakas-vides-vairakiem-projektiem\/","og_site_name":"The Codest","article_published_time":"2022-12-01T11:08:38+00:00","article_modified_time":"2026-03-09T13:07:45+00:00","og_image":[{"width":960,"height":540,"url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","type":"image\/png"}],"author":"thecodest","twitter_card":"summary_large_image","twitter_misc":{"Written by":"thecodest","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#article","isPartOf":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"author":{"name":"thecodest","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76"},"headline":"Handle multiple environments for multiple projects on one machine?","datePublished":"2022-12-01T11:08:38+00:00","dateModified":"2026-03-09T13:07:45+00:00","mainEntityOfPage":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"},"wordCount":1315,"commentCount":0,"publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"image":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","articleSection":["Software Development"],"inLanguage":"lv","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","url":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/","name":"Vai vien\u0101 dator\u0101 varat str\u0101d\u0101t ar vair\u0101k\u0101m vid\u0113m vair\u0101kiem projektiem? - The Codest","isPartOf":{"@id":"https:\/\/thecodest.co\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"image":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage"},"thumbnailUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","datePublished":"2022-12-01T11:08:38+00:00","dateModified":"2026-03-09T13:07:45+00:00","description":"Uzziniet, k\u0101 izstr\u0101d\u0101t\u0101ji var izmantot vair\u0101kas vides da\u017e\u0101diem projektiem vien\u0101 dator\u0101, izmantojot versiju p\u0101rvaldniekus un konteineriz\u0101ciju.","breadcrumb":{"@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb"},"inLanguage":"lv","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/"]}]},{"@type":"ImageObject","inLanguage":"lv","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#primaryimage","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/05\/how_to_handle_multiple_environments_for_numerous_projects_on_just_one_machine_.png","width":960,"height":540},{"@type":"BreadcrumbList","@id":"https:\/\/thecodest.co\/blog\/handle-multiple-environments-for-multiple-projects-on-one-machine\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thecodest.co\/"},{"@type":"ListItem","position":2,"name":"Handle multiple environments for multiple projects on one machine?"}]},{"@type":"WebSite","@id":"https:\/\/thecodest.co\/#website","url":"https:\/\/thecodest.co\/","name":"The Codest","description":"","publisher":{"@id":"https:\/\/thecodest.co\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thecodest.co\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"lv"},{"@type":"Organization","@id":"https:\/\/thecodest.co\/#organization","name":"The Codest","url":"https:\/\/thecodest.co\/","logo":{"@type":"ImageObject","inLanguage":"lv","@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/","url":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","contentUrl":"https:\/\/thecodest.co\/app\/uploads\/2024\/03\/thecodest-logo.svg","width":144,"height":36,"caption":"The Codest"},"image":{"@id":"https:\/\/thecodest.co\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/pl.linkedin.com\/company\/codest","https:\/\/clutch.co\/profile\/codest"]},{"@type":"Person","@id":"https:\/\/thecodest.co\/#\/schema\/person\/7e3fe41dfa4f4e41a7baad4c6e0d4f76","name":"thecodest","image":{"@type":"ImageObject","inLanguage":"lv","@id":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/5dbfe6a1e8c86e432e8812759e34e6fe82ebac75119ae3237a6c1311fa19caf4?s=96&d=mm&r=g","caption":"thecodest"},"url":"https:\/\/thecodest.co\/lv\/author\/thecodest\/"}]}},"_links":{"self":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3348","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/comments?post=3348"}],"version-history":[{"count":9,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3348\/revisions"}],"predecessor-version":[{"id":8550,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/posts\/3348\/revisions\/8550"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media\/3349"}],"wp:attachment":[{"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/media?parent=3348"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/categories?post=3348"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thecodest.co\/lv\/wp-json\/wp\/v2\/tags?post=3348"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}