ምዕራፍ 1 ከዜሮ ወደ ማሰማራት

እንኳን ወደ ሩቢ ኦን ሬይልስ ስልጠናበደህና መጣችሁ! የዚህ ስልጠና አላማ አንድ ብጁ የድር አፕልኬሽን እንዴት እንደሚበለጸግ ማስተማር ነው፡፡ ከስልጠናው የምታገኙት ችሎታ፣ በድር አበልጻጊነት ሙያ ስራ ለማግኘት፣ እንደ ግል ኮንትራት ሰራተኛ ሁኖ ለመስራት፣ ወይም የራሳችሁ የሆነ አንድ ድርጅት ለመክፈት የሚያስችል ትልቅ እድልን ይከፍትላችኋል። የድር አፕልኬሽኖች እንዴት እንደሚበለጸጉ የምታውቁ ከሆነ ደግሞ፣ ይህ ስልጠና ከሩቢ ኦን ሬይልስ ጋር በፍጥነት እንድትተዋዎቁ ያግዛችኋል።

በሩቢ ኦን ሬይልስ ስልጠና ውስጥ ትኩረት የሚሰጠው፣ በየትኛውም ቴክኖሎጂ ላይ ጠቃሚ በሚሆኑ አጠቃላይ ችሎታዎች ላይ ነው፡፡ አንዴ የድር አፕልኬሽኖች እንዴት እንደሚሰሩ ካወቃችሁ በኋላ፣ ሌሎች መዋቅሮችን ለመማር የምታጠፉት ጊዜ በጣም አጪር ይሆናል፡፡ ለዚህ ስልጠና የሩቢ ኦን ሬይልስ መዋቅርን የመረጥን ቢሆንም፣ ድር ማበልጸግን ለመማር፣ ምንም የተሻለ መዋቅር ኑሮ አያውቅም (ሳጥን 1.1)፡፡

ሳጥን 1.1. የሬይልስ በርካታ ጥቅሞች

ሩቢ ኦን ሬይልስ ወይም ባጪሩ “ሬይልስ” ማለት በሩቢ የፕሮግራም ቋንቋ የተጻፈ፣ አንድ የነጻና የድር ማበልጸጊያ መዋቅር ክፍት-ምንጪ ነው፡፡ ሩቢ ኦን ሬይልስ ለመጀመሪያ ጊዜ ለህዝብ ይፋ በወጣበት ወቅት፣ የሚለዋወጡ የድር አፕልኬሽኖችን ለመስራት በጣም ታዋቂ ከሆኑት መሳሪያዎች ውስጥ አንዱ ሆኗል። ሬይልስን የተለያዩ ድርጅቶች፤ ማለት እንደ ኤይርቢኤንቢሳውንድክላውድዲዝኒሁሉጊትሃብ እና ሾፒፋይ የመሳሰሉ ተቋማት ጥቅም ላይ አውለውታል፡፡ ከነዚህ ተቋማት በተጨማሪ፣ ስፍር ቁጥር የሌላቸው የግል ኮንትራክተሮች፣ አዲስ አፕልኬሽን ፈጣሪወች እና የግል የማበልጸጊያ ማዕከላትም ጥቅም ላይ አውለውታል፡፡

ምንም እንኳን ድርን ለማበልጸግ ብዙ ምርጫዎች ቢኖሩም፣ ሬይልስ ለድር አፕልኬሽኖች፤ የሚሰጠው ውበት፣ ብቃት፣ እና የተቀናጀ አቀራረቡ፣ ከሌሎቹ መዋቅሮች ሁሉ የበለጠ ሁኖ እንዲታይ ያደርጉታል፡፡ ሬይልስን በመጠቀም፣ ጀማሪ አበልጻጊዎች ሳይቀሩ፣ መዋቅሩን ሳይለቁ አንድ ሙሉ-ቁልል የድር አፕልኬሽንን መስራት ይችላሉ፤ ይህም የድር ብልጸጋን ለመጀመሪያ ጊዜ ለሚማሩ ሰዎች አንድ ትልቅ የመንፈስ እርካታን ያጎናጽፋል፡፡ ሬይልስ እንዲሁ፣ ወደ ፊት ማድረግ ለምትፈልጉት ነገር ሁሉ ለምሳሌ:- በኋላ ላይ በአንድ ገጽ ብቻ የቆመ አፕልኬሽንን ማለት በደጀን ሁኖ የሚያገለግል አፕልኬሽንን፣ ወይም ለተንቀሳቃሽ ስልኮች አፕልኬሽኖችን መገንባት ብትፈልጉ፣ ይህንን ፍላጎት እውን ለማድረግ እንደልባችሁ የሚገራ መንገድንም ይሰጣችኋል።

አንዱና ትልቁ የሬይልስ ጥቅም ደግሞ፣ አንዳንድ የጃቫስክሪፕት/ኖድ.ጄኤስ አበልጻጊ ማህበረሰቦች ላይ ለሚያጋጥም ማለት “አዲሱ ታዋቂ ነገር” ለተባለው ችግር የተጋለጠ አለመሆኑ ነው፡፡ በዚህ ረገድ በጣም ውስብስብ በሆነ ቴክኖሎጂው የሚታወቀው፣ ጃቫስክሪፕት/ኖድ.ጄኤስ እንኳ፣ ይህንን ሁኔታ መቋቋም ባለመቻሉ፣ በየስድስት ወሩ የተለያዩ ስሪቶችን በመቀያየር ይኖራል፡፡ የሬይልስ ፈጣሪ ዴቪድ ሄነማየር ሃንሰን በአንድ ወቅት እንዲህ ብሎ ነበር:-

“በዛን ጊዜ በውስብስብነቱ ታዋቂ የነበረው ጄ2ኢኢ (J2EE) ነበር፤ ነገር ግን ዛሬ የሚቀርቡበት ቅሬታዎች፣ በሚገርም ሁኔታ ጃቫስክሪፕት ላይ ከሚሰጡት ቅሬታዎች ጋር ይመሳሰላል… የሬይልስ ዋና ጽንሰ ሃሳብ፣ ሬይልስ “ሀ” ብሎ በተመሰረተበት ጊዜ እንደነበረው ሁኔታ ሁሉ፣ አሁንም በብዙ መንገድ አከራካሪ ነው፡፡ ይህም ማእከላዊ የሆኑ ደንቦችን በመመስረት፣ ዋጋ ቢስ የሆኑ ምርጫዎችን በማስወገድ እና የተሟላ አፕልኬሽን መፍጠር ለሚፈልግ ለማንኛውም ሰው እጅግ በጣም ጥሩ የሆነ፣ አንድ የሙሉ-ቁልል መዋቀርን በነባሪ በማቅረብ፣ በምርታማነት ላይ አስደናቂ የሆነ እድገትን መጨመር እንችላለን፡፡”

በዚህ ፍልስፍና ምክንያት፣ ሬይልስ ከስር መሰረቱ ያልተቀየረ ስለሆነ፣ የዚህ ስልጠና ሶስተኛው እትም በ 2014 ከተለቀቀ ጀምሮ አንድ አይነት ሆኖ ቀጥሏል፡፡ ስለዚህ እዚህ ላይ የምትማሯቸው ነገሮች ሁሉ በቅርቡ ጊዜ የሚያልፍባቸው አይሆኑም፡፡

እና ሬይልስ አሁንም፣ አዳዲስ ገጸባህሪያትን መፍጠሩን ቀጥሏል፡፡ ሬይልስ 6 ሲሰራጪ በርከት ያሉ ባህሪያትን ይዞ ቀርቧል፡፡ ለምሳሌ:- የኤመልእክት ማስተላለፍ፣ የጽሑፍ ቅርጸት፣ ጠቅላላውን የፈተና ስብስብ ለማካሄድ የሚያስፈልገውን ጊዜ የሚቀንስ እና በርካታ ውሂበጎታወችን የሚደግፍ፣ ባህሪያትን አካቷል፡፡ ሬይልስ 6 ካስተዋወቃቸው ገጸባህሪያት አንዱ ትልቅ ገጸባህሪ “በነባሪ የተመዘነ/የቀለጠፈ” መሆኑ ነው፤ ይህ ማለት አፕልኬሽናችሁ የፈለገውን ያህል ቢጨምርም፣ ሬይልስ መጠኑን በማመዛዘን፣ ከአፕልኬሽናችሁ ጋር በሚስማማ መልኩ ይመዝነዋል/ያቀለጥፈዋል ማለት ነው፡፡ ይህን ብቁ እና አስተማማኝ ለማድረግ፣ በጣም ታዋቂ የሆነው የኮድ ማከማቻ ጣቢያ ጊትሃብ፣ በጣም የታወቀው፣ የመስመር ላይ ሱቅ አቅራቢው፣ ሾፒፋይ እና የትብብር መሳሪያ አገልግሎት ሰጪው ቤዝካምፕ፣ ሁሉም ጣቢያቸውን ገና በይፋ ባልተሰራጨው የሬይልስ ስሪት ያካሂዳሉ። ይህ ማለት አዲስ የሬይልስ ስሪቶች በሚሰራጩበት ጊዜ፣ በአንዳንድ ትላልቅ እና በጣም በታወቁ ድርጅቶች ወዲያውኑ ይፈተናሉ ማለት ነው፡፡

በ 2004 በዴንማርኩ ድር አበልጻጊ የተፈጠረው አነስተኛ የጎን ፕሮጀክት መጥፎ አልነበረም፡፡ በዚያን ጊዜ ለመመረጥ እድል ያልነበረው፣ ዛሬ ቀዳሚውን ስፍራ ይዟል፡፡ በተረጋገጠው ታሪኩ፣ ምርታማ በሆኑ የገጸ ባህሪያት ስብስቦቹ እና፣ በማህበረሰቡ ይሄ ነው የማይባል እርዳታ ምክንያት ሬይልስ፣ ዘመናዊ የድር አፕልኬሽኖችን ለመስራት እጅግ ድንቅ መዋቅር ለመሆን በቅቷል፡፡

የሩቢ ፕሮግራም ቋንቋን፣ የዩኒክስ የማዘዥያ መስመርን፣ ሃ.ጽ.መ.ቋን (HTML)1የወ.ሉ.ቅን (CSS)2 አነስተኛ ጃቫስክሪፕትን እና ተ.መ.ቋን (SQL)3 ጨምሮ የተዘጋጀው መጽሐፍን ለመማር፣ ምንም ዓይነት መደበኛ ቅድመ ዝግጅት አያስፈልግም፡፡ ያን ለመረዳት ብዙ ይዘት ቢኖረውም፣ አፕልኬሽን ለማበልጸግ አዲስ ለሆኑ ሰዎች ግን በቂ ተማርን በተለይ ደግሞ በማዘዥያ መስመር ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ትምህርት ተማር እና በሩቢ ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማር4 በሚለው ስልጠና እንዲጀምሩ ይመከራል፡፡ በሌላ በኩል ደግሞ እጅግ በርካታ የሆኑ፣ ፍጹም አዲስ ጀማሪዎች ይህንን ስልጠና በብቃት ተወጥተውታል፤ ስለዚህ እናንተም እንደነሱ የድር አፕልኬሽኖችን ለመገንባት ጓጉታችሁ ከሆነ፣ በዚህ ምክር ላስተጓጉላችሁ አልፈልግም፡፡

የዚህ ስልጠና ዋናው የማስተማሪያ ዘዴ ተከታታይ የሆኑ ምሳሌዎችን በመጠቀም፣ ርቀትን በመጨመር፣ በትክክል የሚሰራ አፕልኬሽንን መገንባት ነው። አንድ አነስተኛ በሆነ ማለት ሰላምታ በተባለ አፕልኬሽን በመጀመር፣ (ምስል 1.1 ክፍል 1.2) ከዚያም በጥቂቱ ብቃት ያለው አንድ ጨዋታ የተባለ አፕልኬሽንን መገንባት (ምስል 1.2 ምዕራፍ 2 ) እና መጨረሻ ላይ ደግሞ አንድ ማሳያ የተባለ እውነተኛ አፕልኬሽንን መገንባት ይሆናል (ምስል 1.3ምዕራፍ 3፤ እስከ ምዕራፍ 14)፡፡ አጠቃላይ የወል ስማቸው እንደሚያመለክተው፣ እነዚህ አፕልኬሽኖች ተግባራዊ በሆነ መልኩ፣ ለማንኛውም የድር አፕልኬሽን ተግባራዊ በሚሆኑ አጠቃላይ መርሆዎች ላይ ያተኩራሉ፡፡ በተለይ ምዕራፍ 14 ላይ የበለጸገው፣ የተሞላው ማሳያ የተባለው አፕልኬሽን የተጠቃሚ መመዝገቢያን፣ መግቢያን እና የመለያ አስተዳደርን ጨምሮ አንድ የበለጸገ የድር አፕልኬሽን የሚያስፈልጉትን ዋና ዋና ገጸባህሪያትን ሁሉ ያካትታል። በተጨማሪም ቁልጪ ብሎ የትዊተር የድርጣቢያን ከመምሰሉ ባሻገር፣ ብዙ ነገሮችን ይዟል/ይገልጻል፤ እንደ አጋጣሚ ሁኖ ትዊተር መጀመሪያ የተገነባውም በሬይልስ ነበረ።

እንጀምር!

images/figures/hello_world_hello_app
ምስል 1.1: የበኩሩ ማለት፣ ሰላምታ የተባለው አፕልኬሽን።
images/figures/micropost_length_error
ምስል 1.2: መካከለኛው ማለት፣ ጨዋታ የተባለው አፕልኬሽን።
images/figures/home_page_with_feed
ምስል 1.3: የመጨረሻው ማለት፣ ማሳያ የተባለው አፕልኬሽን።

1.1 ለስራ መዘጋጀት እና ስራን መጀመር

ይህን ስልጠና የመጠቀም አንዱ ጠቀሜታ፣ ለስራው ተዘጋጅቶ በፍጥነት መጀመር ማስቻሉ ነው፡፡ በተለይም የሬይልስ ስልጠና በድር አሳሽ ውስጥ ከሚካሄደው፣ የማበልጸጊያ አካባቢ ማለት ከአ.ድ.አ ክላውድ9 (AWS Cloud9) ጋር ለረጅም ጊዜ የቆየ አጋርነት አለው፡፡ እናም ከዚህ የማበልጸጊያ አካባቢ የሚገኘው ውጤትም፣ በዚህ የስልጠና ትምህርት ውስጥ ያሉትን ሁሉንም ሶፍትዌሮች ለማበልጸግ የተሟላ አንድ ስርዓት ይሆናል፡፡

ልምድ ላላቸው አበልጻጊዎች እንኳ ሩቢን፣ ሬይልስን እና ሁሉንም ተጓዳኝ ደጋፊ ሶፍትዌሮችን መጫኑ በጣም ፈታኝ ሊሆን ስለሚችል፣ ይህ የተሟላ ስርዓት አስፈላጊ ነው፡፡ ችግሩን የሚያባብሱት የማበልጸጊያ አካባቢዎች መብዛት ሊሆን ይችላል፣ ማለት:- የተለያዩ ስርዓተ ክወናዎች፣ የሶፍትዌር ስሪት ቁጥሮች፣ የጽሑፍ አርታኢዎች ምርጫ ወ.ዘ.ተ. የመሳሰሉት ችግሮች ሊሆኑ ይችላሉ፡፡

በተለይ ለአዲስ ተጠቃሚዎች፣ አንድ የደመና ቅንጁ የማበልጸጊያ አካባቢን ወይም አንድ የደመና (ቅ.ማ.አን (IDE)) (ክፍል 1.1.1) በመጠቀም፣ አብዛኛዎቹን ማለት ሶፍትዌሮችን የመጫን እና እነሱን የማዋቀር ጉዳዩን ወደ ጎን በመተው፣ ስራቸው ላይ ብቻ ማተኮር እንዳለባቸው፣ እንደ መፍትሔ የሚመከረው ለዚህ ነው። በዚህ ስልጠና ውስጥ ጥቅም ላይ የዋለው የደመና ቅ.ማ.አ በማንኛውም የድር አሳሽ ውስጥ ይሰራል፤ እናም በተለያዩ ስርዓቶች ላይም በአንድ አይነት መልክ ይሰራል። ከዚህም በተጨማሪ ስርዓቱ አሁን ያላችሁበትን ወቅታዊ ሁኔታ ጠብቆ ስለሚያቆይ፣ በስልጠናው ወቅት እረፍት ወስዳችሁ በፈለጋችሁበት ጊዜ ብትመለሱ፣ ካቆማችሁበት ላይ መቀጠል ትችላላችሁ ማለት ነው፡፡

ሁለተኛው አማራጪ የቤተኛ ስርዓታችሁን (ዊንዶውስን፣ ማክኦኤስን ወይም ሊኒክስን) ለሬይልስ ብልጸጋ ማዋቀር ነው፡፡ ይህንን የማዋቀር ተግባር በስተመጨረሻ እንድታደርጉት ቢመከርም፣ ምን አልባት ሂደቱ ብዙ ድካም የሚጠይቅ እና ከፍተኛ የሆነ ቴክኒካዊ ብልሃትን (ሳጥን 1.2) ማለት አንድ ከበድ ያለ ራስን ችሎ ችግርን የማቃለል ችሎታን ሊጠይቅ ይችላል፡፡ የሚያስፈልጉትን ነገሮች ሁሉ በራሳችሁ ስርዓት ላይ ለማዋቀር የሚረዱ መመሪያዎችን በማበልጸጊያ አካባቢ ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማር ላይ “የቤተኛ ስርዓተ ክወናን ማዋቀር” በሚል ክፍል ስር ማግኘት ትችላላችሁ፡፡ ይህን የአሰራር ሂደት የምትከተሉ ከሆነ፣ በክፍል 1.1.2 ስር የተመለከቱትን የመዋቅር እና ሬይልስን የመጫን ሂደቶችን ማጠናቀቃችሁን እርግጠኛ ሁኑ (ወቅታዊው የስልጠና ትምህርት የሩቢ ስሪት ቁጥር 2.7.4. ‘ን እንደ አንድ መስፈርት አድርጎ ይጠቀማል፤ ስለሆነም ይህን የሩቢ ስሪት እንድትጠቀሙ ይመከራል)፡፡

ሳጥን 1.2. ቴክኒካዊ ብልሃት

ሩቢ ኦን ሬይልስ ስልጠና “ቴክኒካዊ ብልሃት” የሚለውን፣ የሃሳብ አገላለጽ ያስፋፋ እና የበቂ ተማር ስልጠናወች አካል ነው፡፡ ቴክኒካዊ ብልሃት:- (ከኤክስኬሲዲ ጣቢያ ላይ “በቴክ የድጋፍ ማስታወሻ ወረቀት” ስአላዊ መግላጫ ውስጥ እንደተመለከተው…) ቴክኒካዊ ችግሮችን ለመፍታት የሚደረግ አጠቃላይ ችሎታን (ማለት የጪንቅላት እና የአካል ችሎታን) ለማመልከት የምንጠቀምበት ቃል ነው፡፡

ሶፍትዌርን እነዴት ኮድ እንደሚደረግ ማወቅ፣ አነዱ የቴክኒካዊ ብልሃት አካል ሲሆን፣ ነገር ግን ይህን ከማወቁ በላይ ሌሎች ነገሮችንም ማወቅ ይጠይቃል፡፡ የአንድ የተወሰነ አፕልኬሽን ተግባራትን ለማወቅ፣ በምናሌ ዓይነቶች አካባቢ እንዴት ጠቅ ማድረግ እንዳለባችሁ ማወቅ እና፣ በተጨማሪም ግራ የሚያጋባ የስህተት መልእክትን ጎግል በማድረግ እንዴት ግልጽ የሆነ መረጃን ማግኘት እንደሚቻል ወይም መቸ ተስፋ ቆርጦ፣ ሁሉንም ነገር እርግፍ አድርጎ መተው እና ስርዓታችሁን ዳግም ማስነሳት እንዳለባችሁ ማወቁም የቴክኒካዊ ብልሃት አካል ነው፡፡

የድር አፕልኬሽኖች ብዙ ተንቀሳቃሽ ክፍሎች ስላሏቸው፣ የናንተን ቴክኒካዊ ብልህነት ለማዳበር ሰፊ ዕድሎችን ያበረክታሉ። በሬይልስ ድር ማበልጸግ አውድ ውስጥ፣ አንዳንድ ቴክኒካዊ ችሎታን የሚዳብሩትን ምሳሌወች ስንመለከት ደግሞ፣ ትክክለኛ የሩቢ እንቁ ስሪትን መጠቀምን፣ በንድልን መጫንን ወይም ማዘመንን እና አፕልኬሽኑ በሆነ ምክንያት መስራት ካቆመ፣ የሰፈሩን የድር አገልጋይ እንደገና ማስጀመርን ያካትታሉ። (ይሄ ሁሉ ነገር ትርጉም አልሰጥ ካላችሁ ልታስቡ አይገባም፤ እዚህ ላይ የተጠቀሱትን ነገሮች ሁሉ፣ ከዚህ በኋላ ባሉት ተከታታይ የስልጠናው ክፍሎች ላይ ግልጽ እናደርጋቸዋለን፡፡)

ይህን ስልጠና በምትቀጥሉበት ጊዜ፣ በማንኛውም አጋጣሚ ነገር፣ ወዲያውኑ እንደጠበቃችሁት በማይሰሩ ነገሮች፣ አልፎ አልፎ ልትደናቀፉ ትችላላችሁ፡፡ በመሆኑም፣ ምንም እንኳን አንዳንድ በተለየ ሁኔታ አሳሳች ሊሆኑ የሚችሉ ሂደቶች በመጽሐፉ ውስጥ በግልጽ የተመላከቱ ቢሆንም፤ ላይሰሩ የሚችሉትን ነገሮች በሙሉ አስቀድሞ ለመገመት ግን ፈጽሞ አይቻልም፡፡ እነዚህ የማይቀሩ መሰናክሎችን/እንቅፋቶችን፣ ቴክኒካዊ ችሎታችሁን ለማሳደግ እንደሚረዱ ዕድሎች አድርጋችሁ እንድትጠቀሙባቸው እመክራለሁ፡፡ አለበለዚያ ግን ሊቁ ሲናገር “ሰንክ ሳይሆን ገጸባህሪ ነው” አለ ይባላል እንላለን።

1.1.1 የማበልጸጊያ አካባቢ

ቁጥራቸው ብዙ የተለያዩ እና አንድ ወጥ ያልሆኑ አበጃጆች መኖራቸውን ግምት ውስጥ በማስገባት፣ ምናልባት ብዙ የሬይልስ አበልጻጊወች እንዳሉ ሁሉ፣ ብዙ የማበልጸጊያ አካባቢዎች ሊኖሩ እንደሚችሉ መገመቱ፣ ሳይታለም የተፈታ ነገር ነው፡፡ ይህንን ውስብስብ የሆነ ነገር ለማስወገድ፣ የሩቢ ኦን ሬይልስ ስልጠና የአማዞን የድር አገልግሎቶች አካል የሆነውን፣ ተመራጩን የክላውድ9 የማበልጸጊያ አካባቢን መደበኛ መጠቀሚያ እንዲሆን አድርጓል፡፡ ከዚህ የሚገኘው የስራቦታ አካባቢም ሩቢን፣ የሩቢእንቁን፣ ጊትን እና በሬይልስ የተደገፉ፣ ድርን ለማበልጸግ ከሚያስፈልጉ ሶፍትዌሮች ጋር ቀድሞውኑ አዘጋጅቶ ይመጣል፡፡ (አንድ ሆን ተብሎ ያልተጫነ አስፈላጊ ሶፍትዌር ቢኖር፣ ሬይልስ ራሱ ነው፡፡ ይህንንም ለብቻው እንጪነዋለን (ክፍል 1.1.2)።)

የዳመና ቅ.ማ.አው የድር አፕልኬሽንን ለማበልጸግ የሚያስፈልጉትን ሶስት ዋና ዋና አካላትን ያካትታል። እነሱም:- አንድ የማዘዥያ መስመር መናኸሪያ፣ አንድ የፋይል-ስርዓት ዳሳሽ እና አንድ የጽሑፍ አርታኢ ናቸው (ምስል 1.4)። ከሌሎች ገጸባህሪያት መካከል፣ የደመና ቅ.ማ.አ የጽሑፍ አርታኢው፣ ማናቸውንም ትልቅ የሩቢ ወይም የሬይልስ ፕሮጀክትን ለማመላከት አስፈላጊ ነው ብዬ የማስበውን፣ “Find in Files” የተባለውን ሁሉአቀፍ ፍለጋን ይደግፋል፡፡ በመጨረሻም፣ የደመና ቅ.ማ.አን እንደ መደበኛ የመገልገያ ማሳርያ ሙሉ በሙሉ ላለመጠቀም ብትወስኑም እንኳን (በእርግጥ ሌሎች መሳሪያዎችምን እንድትማሩም እመክራለሁ)፣ ለዚህ ስልጠና ይህንን ማበልጸጊያ በመጠቀማችሁ፣ ለማዘዥያ መስመር መናኸሪያ፣ ለጽሑፍ አርታኢ እና ለሌሎች የማበልጸጊያ መሳሪያዎች የሚሆን አንድ አጠቃላይ የሆነ እውቀትን እንድታገኙ ይረዳችኋል።

images/figures/ide_anatomy_aws
ምስል 1.4: የደመና ቅ.ማ.አው ሁለንተናዊ አቀማመጥ።

የደመና የማበልጸጊያ አካባቢን ጥቅም ላይ ለማዋል የሚያስፈልጉት ሂደቶች የሚከተሉት ናቸው:-5

  1. ክላውድ9 የአማዞን የድር አገልግሎቶች አካል ስለሆነ፣ የአማዞን የድር አገልግሎት መለያ ካላችሁ በራስሰር ወደዛው መግባት6 ትችላላችሁ፡፡ አንድ አዲስ የክላውድ9 የመስሪያ አካባቢን ለመፍጠር፣ አ.ድ.አ ሰሌዳ ውስጥ በመግባት፣ በመፈለጊያ ሳጥኑ ውስጥ፣ “Cloud9” ብላችሁ ጻፉ፡፡
  2. ቀድሞውኑ አንድ የአ.ድ.አ መለያ ከሌላችሁ፣ አንድ የነጻ መለያ ለማግኘት፣ በአ.ድ.አ ክላውድ9 ላይ መመዝገብ ይኖርባችኋል፡፡ አግባብ የሌለው አጠቃቀምን ለመከላከል፣ አ.ድ.አ በምዝገባ ወቅት አንድ ብቃት ያለው የዱቤ ካርድን ይጠይቃል፤ ነገር ግን የመስሪያ ቦታው፣ (ይህ ጽሑፍ በተጻፈበት ወቅት ለአንድ ዓመት) መቶ በመቶ (100%) ከክፍያ ነጻ እንደሆነ ይታወቃል፤ ስለሆነም ከካርዳችሁ የሚወሰድ ገንዘብ አይኖርም። መለያው እስኪነቃ/እስኪጀምር ድረስ፣ እስከ 24 ሰዓት መጠበቅ ሊኖርባችሁ ይችላል። በእኔ በኩል ግን በአስር ደቂቃ ውስጥ ሁሉ ነገር ዝግጁ ነበረ።
  3. አንዴ የክላውድ9 የአስተዳደር ገጽ (ምስል 1.5) ላይ ከገባችሁ በኋላ፣ “Create environment” ላይ ጠቅ አድርጉ እና “rails-tutorial”7 የሚለውን ስም ጨምሮ፣ በምስል 1.6 ላይ የሚገኘውን መረጃ በቅጹ ላይ ሙሉ፡፡ በምስል 1.6 ላይ እንደተመለከተው፣ የአፕልኬሽኑን መግለጫም፣ የሚገባው ቦታ ላይ ሙሉ፡፡ በሚቀጥለው ገጽ ላይ ከሚገኙት ምርጫወች ውስጥ፣ የ Amazon Linux ‘ን ሳይሆንUbuntu Server ‘ን (ምስል 1.7) ምረጡ። ከዚያ “Next step” የሚለውን ጠቅ አድርጉ፡፡ አ.ድ.አ ቅ.ማ.አውን እስከሚያቀርብ ድረስ፣ ነባሪ ቅንብሮችን በእሽታ ለማስተናገድ፣ የማረጋገጫ አዝራሩን ጠቅ አድርጉ (ምስል 1.9)፡፡ አንድ የስር8 (“root”) ተጠቃሚ በመሆናችሁ ምክንያት፣ አንድ የማስጠንቀቂያ መልእክት ልታገኙ ትችላላችሁ። ይህንንም ላሁኑ ችላ ብላችሁ ማለፍ ትችላላችሁ፡፡ (የማንነት እና የማስተዳደር ባለስልጣን (ማ.ማ.ባ (IAM)) ተብሎ ስለሚጠራው መመሪያ በክፍል 13.4.4 ውስጥ እንወያይበታለን። ይህ መመሪያ የተወሳሰበ ቢሆንም ሊመረጥ የሚገባው መመሪያ ነው፡፡)
images/figures/cloud9_page
ምስል 1.5: በአ.ድ.አ ክላውድ9 ላይ አንድ አካባቢን መፍጠር።
images/figures/cloud9_name_environment
ምስል 1.6: በአ.ድ.አ ክላውድ9 ላይ አንድ አዲስ የስራ አካባቢን መበየን፡፡
images/figures/ubuntu_server
ምስል 1.7: የኡቡንቱ አገልጋይን መምረጥ።
images/figures/create_environment
ምስል 1.8: የዳመና ቅ.ማ.አን ለስራ ለማዘጋጀት የመጨረሻው ሂደት፡፡
images/figures/cloud9_ide
ምስል 1.9: ነባሪው የደመና ቅ.ማ.አ።

በሩቢ ኮድን ለመጻፍ፣ በአንድ የጽሑፍ አርታኢ ውስጥ፣ በያንዳንዱ ኮድ መሃል፣ የሁለት ክፍትቦታ (Space) መተው፣ ከሩቢ ልማዶች ውስጥ አንዱ ስለሆነ፣ እኔም የጽሑፍ አርታኢውን፣ ነባሪውን አራት የክፍትቦታን ከመጠቀም ይልቅ፣ ሁለት ክፍትቦታን ይጠቀም ዘንድ፣ የጽሑፍ አርታኢውን እንድትቀይሩት እመክራለሁ፡፡ በምስል 1.10 ላይ እንደተመለከተው፣ ከገጹ ራስጌ፣ በቀኝ በኩል የተመለከተውን ጥርሳማ ክብ አዶ ላይ ጠቅ በማድረግ፣ ከዛም በ “Soft Tabs” ቅንብር ላይ የተመለከተውን፣ የመቀነስ ምልክት “2” ቁጥር ላይ እስኪደርስ ድረስ ጠቅ በማድረግ፣ የተፈለገውን ውጤት ማግኘት ትችላላችሁ፡፡ (ይህ ቅንጅት በራስሰር ተግባራዊ ስለሚሆን “Save” የሚለውን አዝራር ጠቅ ማድረጉ አያስፈልግም፡፡)

images/figures/cloud9_two_spaces
ምስል 1.10: ክላውድ9 ‘ን ለግምስምስ ሁለት ክፍትቦታን እንዲጠቀም ማቀናበር።

በመጨረሻም፣ ይህ ስልጠና የሩቢ ስሪት ቁጥር 2.7.4 ‘ን እንደ አንድ መስፈርት አድርጎ የሚጠቀም ስለሆነ፣ ይህንኑ መስፈርት እንደሚከተለው አድርጋችሁ በደመና ቅ.ማ.አው ላይ መጫን ትችላላችሁ:-

$ rvm install 2.7.4

(ይህ በደመና ቅ.ማ.አው ላይ ቀድሞ-ተጪኖ የሚመጣውን የሩቢ ስሪት አስተዳዳሪን ይጠቀማል።) አንዴ ትእዛዙ ከጨረሰ በኋላ፣ የሩቢ ስሪቱን እንደሚከተለው አድርጋችሁ ማረጋገጥ ትችላላችሁ:-

$ ruby -v
ruby 2.7.4p191 (2021-07-07 revision a21a3b7d23) [x86_64-linux]

(እንቅጩ የስሪት ቁጥር ከላይ ከምታዩት የስሪት ቁጥር ሊለይ ይችላል)

1.1.2 ሬይልስን መጫን

ክፍል 1.1.1 እንዳየነው፣ የማበልጸጊያ አካባቢው ከራሱ ከሬይልስ በስተቀር፣ ስራችንን ለመጀመር የሚያስፈልጉንን ሁሉንም ሶፍትዌሮች ያካትታል፡፡ ይህ የሆነበት ምክንያትም በዚህ ስልጠና ውስጥ ከወዲሁ የተጠበቁ ውጤቶችን ለማግኘት አስፈላጊ ስለሆነ፤ አንድ ዓይነት የሬይልስ ስሪትን ጥቅም ላይ ማዋሉን በግምት ውስጥ በማስገባት የታቀደ ስለሆነ ነበረ።

በመጀመሪያ በዝርዝር 1.19 ላይ እንደሚታየው፣ ጊዜ የሚወስደውን የሩቢ ሰነድን ሰፈር (local)10 ላይ እንዳይጫን ለመከላከል፣ የመዋቅር ቅንጅቶችን በማከል አንድ ትንሽ ዝግጅት እናደርጋለን። ይህ ሂደት፣ በአንድ ስርዓት ላይ አንድ ጊዜ ብቻ መከናወን እንዳለበት ልብ በሉ። (ስለ ማዘዥያ መስመር እና ስለ ሌሎች ማለት በዚህ መጽሐፍ ውስጥ ስለተካተቱ ተለምዶዊ አሰራሮች ላይ ተጨማሪ መረጃ ለማግኘት ከፈለጋችሁ ክፍል 1.6 ን ተመልከቱ፡፡)

ዝርዝር 1.1: የሩቢ ሰነድ መጫንን ለመዝለል የ‘ጀምአርሲ (.gemrc) ፋይልን ማዋቀር።
$ echo "gem: --no-document" >> ~/.gemrc

ሬይልስን ለመጫን በሩቢእንቁ (RubyGems) የጥቅል ማስተዳደርያ የቀረበውን የ‘እንቁ (gem) ትእዛዝን እንጠቀማለን፣ ይህም የማዘዥያ መስመር መናኸሪያው ውስጥ በዝርዝር 1.2 ላይ የሚታየውን ትእዛዝ መጻፍን ያሳትፋል፡፡ (በሰፈር ስርዓታችሁ ላይ የምታበለጽጉ ከሆነ፣ ይህ ማለት የአንድ መደበኛ የማዘዥያ መስመር መናኸሪያ መስኮትን መጠቀም ማለት ነው፤ የደመና ቅ.ማ.አን እየተጠቀማችሁ ከሆነ ደግሞ፣ በምስል 1.4 ላይ የሚታየው የማዘዥያ መስመር ላይ መጠቀም ማለት ነው።)

ዝርዝር 1.2: ሬይልስን ከአንድ የተወሰነ ስሪት ጋር መጫን።
$ gem install rails -v 6.1.4.1

እዚህ ጋር ያለው የ‘-ቪ (-v) ባንዲራ11 የተጠቀሰው የሬይልስ ስሪት መጫኑን ያረጋግጣል። እናም የ‘-ቪ (-v) ባንዲራን ወደ ሬይልስ (rails) ትእዛዝ በማሳለፍ የተፈለገው የሬይልስ ስሪት መጫኑን እንደሚከተለው አድርጎ ማረጋገጥ ይቻላል:-

$ rails -v
Rails 6.1.4.1

በዚህ ትእዛዝ ውጤት የተገኘው የሬይልስ ስሪት፣ በዝርዝር 1.2 ላይ ከተጫነው የሬይልስ ስሪት ጋር አንድ ዓይነት መሆን አለበት፡፡

ዝርዝር 1.3 ላይ እንደተመለከተው፣ አንድ መደበኛ የጠቅላይ (bundler) እንቁ ስሪትን መጠቀሙ ራሱ እንዲሁ ጥሩ ሀሳብ እንደሆነ ተሞክሮ ያሳያል።

ዝርዝር 1.3: ጠቅላይን ከአንድ የተወሰነ ስሪት ጋር መጫን።
$ gem install bundler -v 2.2.17

ስለዚህ ጠቃሚ እንቁ በክፍል 1.2.1 ውስጥ የበለጠ እንማራለን፡፡

አንድ የሶፍትዌር ጥገኝነቶችን ለማስተዳደር የሚጠቅም ያርን የተባለ ፕሮግራምን ለመጫን፣ አንድ የሚቀረን ተጨማሪ የመዋቅር ሂደት አለ፡፡ የቤተኛ ስርዓተ ክወናችሁን እየተጠቀማችሁ ከሆነ፣ ለስርዓታችሁ የሚስማማውን ያርንን የመጫን መመሪያን መከተል ይኖርባችኋል፡፡ ነገር ግን የደመና ቅ.ማ.አን እየተጠቀማችሁ ከሆነ፣ ከበቂ ተማር የይዘት አቅርቦት አውታረ መረብ (ይ.አ.አ.መ (CDN)) አስፈላጊ ትእዛዞችን የሚያወርድ እና የሚተገብረውን ትእዛዝ በዝርዝር 1.4 ላይ እንደተመለከተው አድርጋችሁ ማካሄድ ትችላላችሁ። (የክላውድ9 አካባቢዎች በቂ የዲስክ ቦታ እንደማይኖራቸው አንዳንድ ዘገባወች ስለደረሰኝ፣ ዝርዝር 1.4 በስራቦታ አካባቢው ላይ ተጨማሪ ቦታን ያክል ዘንድ አንድ ትእዛዝን ያካትታል።)

ዝርዝር 1.4: በደመና ቅ.ማ.አው ላይ የያርን ጥገኝነት አስተዳዳሪን መጫን።
$ source <(curl -sL https://cdn.learnenough.com/resize)
$ source <(curl -sL https://cdn.learnenough.com/yarn_install)

አንድ ይህን አይነት የሚመስል የስህተት መልእክት ካገኛችሁ:-

E: Could not get lock /var/lib/dpkg/lock-frontend - open
(11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend),
is another process using it?

ለጥቂት ሰከንዶች እየቆያችሁ እስኪሰራ ድረስ፣ በዝርዝር 1.4 ውስጥ ያለውን ትእዛዝ መሞከራችሁን ብቻ ቀጥሉ።

የሬይልስ አፕልኬሽናችሁን በምትገነቡበት ወቅት፣ ምናልባት አልፎ አልፎ፣ ከታች የተመለከተውን የሚመስል አንድ የማስጠንቀቂያ መልእክት ልታገኙ ትችሉ ይሆናል:-

========================================
  Your Yarn packages are out of date!
  Please run `yarn install --check-files` to update.
========================================

ይህ ከተከሰተ ማድረግ ያለባችሁ ነገር ቢኖር፣ የሚከተለውን የ‘ያርን‘ን (yarn) ትእዛዝ መፈጸም ብቻ ይሆናል:-

$ yarn install --check-files

ይሄው ነው! አሁን ለሩቢ ኦን ሬይልስ ድር ማበልጸጊያ የተዘጋጀ አንድ መሉ ለሙሉ የተዋቀረ ስርዓት አላችሁ ማለት ነው፡፡

ማሳሰቢያ:- የክላውድ9 አካባቢዎች በቂ የዲስክ ቦታ እንደማይኖራቸው አንዳንድ ዘገባወች ደርሰውኛል። በቂ የዲስክ ቦታ እንደለለ የሚያመለክት አንድ የስህተት መልእክት ካገኛችሁ፣ በአካባቢያችሁ ላይ ተጨማሪ ቦታ ለማከል፣ በዝርዝር 1.5 ውስጥ የተመለከተውን ትእዛዝ እንድታስኬዱ ሀሳቤን አቀርባለሁ፡፡

ዝርዝር 1.5: ለደመና ቅ.ማ.አ አካባቢው ተጨማሪ ቦታን ማከል።
$ source <(curl -sL https://cdn.learnenough.com/resize)

1.2 የመጀመሪያው አፕልኬሽን

በኮምፒዩተር ፕሮግራም የማድረግ ስራ ውስጥ፣ ለረጅም ጊዜ የቆየውን ባህላዊ አሰራርን በመከተል፣ ለመጀመሪያው አፕልኬሽን ያለን አላማ አንድ “ዓለም እንዴት ነሽ!” የሚል ፕሮግራምን መጻፍ ይሆናል። በተለይም፣ በማበልጸጊያ አካባቢ (ክፍል 1.2.4) እና በቀጥታ ድር ላይ “ዓለም እንዴት ነሽ!” የሚል ሃረግን በአንድ የድር ገጽ ላይ የሚያሳይ፣ አንድ ቀላል አፕልኬሽንን እንፈጥራለን (ክፍል 1.4)።

ሁሉም የሬይልስ አፕልኬሽኖች፣ በአንድ አይነት መንገድ ማለት የ‘ሬይልስ አዲስ (rails new) ትእዛዝን በማስኬድ ይጀመራሉ። ይህ ጠቃሚ ትእዛዝ፣ አንድ መሰረታዊ የሆነ፣ የሬይልስ አፕልኬሽንን የመረጣችሁት ማውጫ ውስጥ ይፈጥራል። ስራችንን በአንድ ዓይነት መልኩ አብረን እንድንጀምር፣ በክፍል 1.1.1 ውስጥ የተጠቀሰውን፡ የክላውድ9 ቅ.ማ.አ የማትጠቀሙ የዚህ ስልጠና ተከታታዮች፣ ለሬይልስ ፕሮጀክታችሁ የሚሆን አንድ አካባቢ12 የተባለ ማውጫ ቀድሞውኑ ከሌለ፣ አሁን ይህንኑ ማውጫ መፍጠር ይኖርባችኋል (ዝርዝር 1.6)፤ ከዝያም ወደ ማውጫው አድራሻ ቀይሩ።

ዝርዝር 1.6: ለሬይልስ ፕሮጀክት ማስቀመጫ፡ አንድ አካባቢ የተባለ ማውጫን መፍጠር።
# እነዚህ ሂደቶች በደመና ማበልጸጊያው ላይ አያስፈልጉም።
$ cd              # ወደ ቤት ማውጫ መቀየር።
$ mkdir አካባቢ     # አንድ አካባቢ የተባለ ማውጫን መፍጠር።
$ cd አካባቢ/       # ወደ አካባቢ ማውጫ መቀየር።

ዝርዝር 1.6 ማውጫ-ቀይር (cd) እና ማውጫ-ፍጠር (mkdir) የተባሉ የዩኒክስ ትእዛዛትን ይጠቀማል። እነዚህ ትእዛዞችን ከዚህ በፊት የማታውቋቸው ከሆነ፣ ሳጥን 1.3 ላይ ተመልከቱ።

ሳጥን 1.3. አንድ ጠጣር የዩኒክስ የማዘዥያ መስመር ስልጠና

ከዊንዶውስ ወይም ከማክኦኤስ ወደ ዩኒክስ የማዘዥያ መስመር ለሚመጡ አንባቢያን፣ የዩኒክስ የማዘዥያ መስመር ምናልባት እንግዳ ነገር ሊሆንባቸው ይችላል። እንደእድል ሆኖ ግን የተነገራችሁትን የደመና አካባቢን እየተጠቀማችሁ ከሆነ፣ ባሽ በመባል የሚታወቀውን አንድ መደበኛ ቀፎ የሚያካሂደውን የዩኒክስ (ሊኒክስ) የማዘዥያ መስመር በይነገጽን በራስሰር የመድረስ ችሎታው አላችሁ ማለት ነው፡፡

የማዘዥያ መስመር መሰረታዊ ሃሳብ ቀላል ነው፤ አጫጪር ትእዛዞችን በመስጠት ተጠቃሚወች በርካታ ስራወችን ማከናወን እንዲችሉ ማድረግ ነው፤ ከሚያከናውኑት ስራ መካከል፤ ለምሳሌ:- ማውጫዎችን መፍጠር (mkdir)፣ ፋይሎችን መቅዳትና ከአንድ ቦታ ወደ ሌላ ቦታ ማንቀሳቀስ (mv እና ፋይሎችን መቅዳት cp)፣ ማውጫዎችን በመቀየር (cd) የፋይል ስርዓቶችን መፈለግ የመሳሰሉት ትእዛዞች ይገኙበታል፡፡ ምንም እንኳን የማዘዥያ መስመሩ ስእላዊ የተጠቃሚ በይነገጽን (ስ.ተ.በ GUI)13 በሚጠቀሙ ተጠቃሚዎች ዘንድ ኋላ ቀር ቢመስልም፣ የማዘዥያ መስመሩ በአበልጻጊወች የመሳሪያ ሳጥን ውስጥ፣ በጣም ጠቃሚ ከሆኑ መሳሪያዎች ውስጥ አንዱ ነው። በእርግጥ የተካነ አበልጻጊ ዴስክቶፕ ላይ፣ ብዙ ክፍት የመናኸሪያ መስኮቶች ላይ፣ የማዘዥያ መስመር ቀፎዎች እየተካሄዱ እምብዛም አታዩም።

የዩኒክስ የማዘዥያ መስመር አጠቃላይ ርዕሰ ጉዳዩ በጣም ሰፊ ነው፤ ነገር ግን ለዚህ ስልጠና አላማ ሲባል፣ በሰንጠረዥ 1.1 ተጨምቀው የተዘጋጁት ማለት በጣም የተለመዱት ጥቂት የዩኒክስ የማዘዥያ መስመር ትእዛዞች ብቻ ያስፈልጉናል፡፡ ስለ የማዘዥያ መስመር የተሟላ መሰረታዊ ዕውቀት ለማግኘት ከ በማዘዥያ መስመር ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ትምህርት ተማር ውስጥ የመጀመሪያውን በቂ ተማር የሚለውን ተመልከቱ፡፡

መግለጫ ትእዛዝ ምሳሌ
ይዘቶችን መዘርዝር ls $ ls -l
ማውጫን መፍጠር mkdir <ማውጫ ስም> $ mkdir አካባቢ
ማውጫን መቀየር cd <ማውጫ ስም> $ cd አካባቢ/
አንድ ማውጫ ወደ ላይ መሄድ $ cd ..
ወደ ቤት ማውጫ መቀየር $ cd ~ ወይም $ cd
የቤት ማውጫን ጨምሮ መንገድ መቀየር $ cd ~/አካባቢ/
ፋይልን ማንቀሳቀስ (ዳግም መሰየም) mv <ምንጪ> <የታሰበ ቦታ> $ mv አብርሃም ቹቹ
ፋይልን መቅዳት cp <ምንጪ> <የታሰበ ቦታ> $ cp አብርሃም ቹቹ
ፋይልን ማስወግድ rm <ፋይል> $ rm አብርሃም
ባዶ ማውጫን ማስወግድ rmdir <ማውጫ> $ rmdir አካባቢ/
ባዶ ያልሆነ ማውጫን በግድ ማስወግድ rm -rf <ማውጫ> $ rm -rf tmp/
የፋይል ይዘቶችን ማያያዝ እና ማሳየት cat <ፋይል> $ cat ~/.ssh/id_rsa.pub
ሰንጠረዥ 1.1: አንዳንድ የተለመዱ የዩኒክስ ትእዛዞች።

በሁለቱም የሰፈር ስርዓቶች እና በደመና ቅ.ማ.አ ላይ ያለው ቀጣዩ ስራ፣ በዝርዝር 1.7 ውስጥ ያለውን ትእዛዝ በመጠቀም የመጀመርያውን አፕልኬሽን መፍጠር ነው። ዝርዝር 1.7 የሬይልስ የስሪት ቁጥርን በግልጽ የትእዛዙ አካል አድርጎ እንደሚያካትት ልታስተውሉ ይገባል። ይህም በዝርዝር 1.2 ውስጥ የጫነው የሬይልስ ስሪት፣ የአፕልኬሽኑን የፋይል መዋቅር ለመፍጠር ጥቅም ላይ መዋሉን ያረጋግጣል።

ዝርዝር 1.7: የ‘ሬይልስ አዲስ (rails new) ትእዛዝን (ከአንድ የተወሰነ ስሪት ጋር) ማስኬድ።
$ cd ~/አካባቢ
$ rails _6.1.4.1_ new selamta
      create
      create  README.md
      create  Rakefile
      create  .ruby-version
      create  config.ru
      create  .gitignore
      create  Gemfile
         run  git init from "."
Initialized empty Git repository in /home/ubuntu/አካባቢ/selamta/.git/
      create  package.json
      create  app
      create  app/assets/config/manifest.js
      create  app/assets/stylesheets/application.css
      create  app/channels/application_cable/channel.rb
      create  app/channels/application_cable/connection.rb
      create  app/controllers/application_controller.rb
      create  app/helpers/application_helper.rb
      .
      .
      .

የ‘ሬይልስ (rails) ትእዛዝ፣ ምን ያህል ፋይሎች እና ማውጫዎችን እንደፈጠረ ተመልክታችኋል? ይህ መደበኛ የማውጫ እና የፋይል አቀማመጥ (ምስል 1.11) ሬይልስ ከሚሰጠው ብዙ ጥቅሞች ውስጥ አንደኛው ነው፤ ይህም በራስሰር ከባዶ ወደ አነስተኛ የሚሰራ አፕልኬሽን ያሸጋግራችኋል። በተጨማሪም ይህ አቀማመጥ ከሁሉም የሬይልስ አፕልኬሽኖች አቀማመጥ ጋር አንድ ዓይነት ስለሆነ፣ የሌላ ሰው አፕልኬሽንን ወይም ኮድን በምታዩበት ጊዜ አፕልኬሽኑን ለመረዳት ያን ያህል ጊዜ አይወስድባችሁም።

የሬይልስ ነባሪ ፋይሎች ማጠቃለያ በሰንጠረዥ 1.2 ውስጥ ተጠቃለው ቀርበዋል። ስለ አብዛኛዎቹ ፋይሎች እና ማውጫዎች በቀሪው የመጽሐፉ ክፍል ውስጥ በደንብ እንማራለን። በተለይም ከክፍል 5.2.1 ጀምሮ አፕ/ንብረቶች (app/assets) ስለተባለው ማውጫ እንወያያለን። ይህ ማውጫ እንደ ወራጅ የሉህ ቅጦች (ወ.ሉ.ቅ) (Cascading Style Sheets (CSS)) እና እንደ የምስል ፋይሎች የመሰሳሰሉ ንብረቶችን ለማደራጀት እና ለማሰማራት ቀላል የሚያደርግ የንብረት ቧንቧመስመር አካል ነው።

images/figures/directory_structure_rails
ምስል 1.11: አዲስ የተፈጠረው የሬይልስ አፕልኬሽን የማውጫ መዋቅር።
ፋይል/ማውጫ ጥቅም
app/ የዋናው የአፕልኬሽኑ ኮድ፣ ቅርጸቶች፣ ትይታዎች፣ መቆጣጠሪያወች እና የረጅወች ማደርያ
app/assets የአፕኬሽኑ ንብረቶች ማለት፣ የወራጅ ሉህ ቅጦች (ወ.ሉ.ቅ) እና የምስሎች ማደርያ
bin/ የሁለትዮሽ ተፈጻሚ ፋይሎች ማስቀመጫ
config/ የአፕልኬሽኑ ማዋቀርያ
db/ የውሂበጎታ ፋይሎች ማስቀመጫ
doc/ የአፕኪኬሽኑ መሰነጃ
lib/ የክፍለክፍሎች ቤተኮድ ማስቀመጫ
log/ የአፕልኬሽኑ የዘገባ ፋይሎችን ማስቀመጫ
public/ በማንኛውም ሰው (ለምሳሌ በድር አሳሹ በኩል) ተደራሽ ውሂብ፡ እንደ የስህተት መረጃ አመላካች ገጾችን ማቅረቢያ
bin/rails ኮድ ለማመንጨት፣ የሰሌዳ ክፍለ ጊዜን ለመክፈት፣ ወይም አንድ የሰፈር አገልጋይን ለማስጀመር የሚችል ፕሮግራም
test/ የአፕልኬሽኑ ፈተናወች ማስቀመጫ
tmp/ ጊዜያዊ የሆኑ ፋይሎችን ማስቀመጫ
README.md ስለ አፕልኬሽኑ አጪር መግለጫ መስጫ
Gemfile ለአፕልኬሽኑ የሚያስፈልጉ እንቁወች ማስቀመጫ
Gemfile.lock ሁሉም የአፕልኬሽኑ ቅጅዎች፡ አንድ ዓይነት የእንቁ ስሪቶችን እንደተጠቀሙ ለማረጋገጥ የሚረዳ ፋይል
config.ru ራክ ሚድልዌር ለተባለ ውቅረት የሚያገለግል ፋይል
.gitignore በጊት ችላ ሊባሉ የሚገባቸው የፋይል ጥለቶችን ማስቀመጫ
ሰንጠረዥ 1.2: አንድ ነባሪ የሬይልስ ማውጫ መዋቅር ማጠቃለያ።

1.2.1 ጠቅላይ

አንድ አዲስ የሬይልስ አፕልኬሽን ከፈጠራችሁ በኋላ ቀጣዩ ስራ፣ የሚፈለጉትን እንቁዎች ለመጫን እና ለማካተት የሚያስችለውን ጠቅላይን (Bundle) መጠቀም ነው። በዝርዝር 1.7 ውስጥ ባለው የ‘ሬይልስ (rails) ትእዛዝ ጠቅላይ በራስሰር (በ‘ጠቅል ጫን (bundle instal) በኩል) ተካሂዶ ነበረ። በዚህ ክፍል የምናደርገው ግን፣ በነባሪዎቹ የአፕልኬሽኑ እንቁዎች ላይ መጠነኛ ለውጦችን ማድረግ እና በእንቁወቹ ላይ ያደረግናቸውን ለውጦች በአፕልኬሽናችን ላይ ለማከል፣ የጠቅላይ ትእዛዝን እኛው እራሳችን ማስኬድ ነው። ይህም የ‘እንቁፋይልን (Gemfile) በአንድ የጽሑፍ አርታኢ ውስጥ መክፈትን ይጠይቃል። (በደመና ቅ.ማ.አ ላይ የምትሰሩ ከሆነ፣ የአፕልኬሽኑ ማውጫ የፋይል ዳሳሽ ላይ፣ ያለውን ቀስት ጠቅ በማድረግ መክፈት እና ከዚያም የ‘እንቁፋይል (Gemfile) አዶውን ሁለት ጊዜ ጠቅ ማድረግን ይጠይቃል።) የስሪት ቁጥሮቹ እንቅጩ ላይ ባይሆኑ እና ዝርዝሮቻቸውም በትንሹ ቢለያይም፣ ውጤቱ ግን በምስል 1.12 እና በዝርዝር 1.8 ውስጥ ከሚታዩት ጋር አንድ ዓይነት መሆን አለበት። (በዚህ ፋይል ውስጥ ያለው ኮድ ሩቢ ነው፤ በፋይሉ ውስጥ ስላሉት አገባቦች (Syntax)፣14 በዚህ ግዜ ልትጨነቁ አይገባም። ምዕራፍ 4 ስለ ሩቢ በሰፊው ያስተምረናል።)

ፋይሎቹ እና ማውጫወቹ በምስል 1.12 ላይ እንደሚታየው ዓይነት ካልሆኑ፣ በፋይል ዳሳሹ ላይ ማለት ጥርሳማው ክብ አዶ ላይ ጠቅ አድርጉና “Refresh File Tree” ን ምረጡ። (ለሚቀጥለው ጊዜ ልምድ እንዲሆናችሁ፣ አንድ ፋይል ወይም ማውጫ እንደተጠበቀው በማይታይበት ጊዜ፣ የፋይሉን ዛፍ ማደስ ይኖሩባችህኋል።)15

images/figures/cloud9_gemfile
ምስል 1.12: በአንድ የጽሑፍ አርታኢ ውስጥ የተከፈተ ነባሪው የ‘እንቁፋይል (Gemfile)።
ዝርዝር 1.8: በ‘ሰላምታ (selamta) ማውጫ ውስጥ ያለው ነባሪው የ‘እንቁፋይል (Gemfile)።
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.7.4'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails', branch: 'main'
gem 'rails', '~> 6.1.4.1'
# Use sqlite3 as the database for Active Record
gem 'sqlite3', '~> 1.4'
# Use Puma as the app server
gem 'puma', '~> 5.0'
# Use SCSS for stylesheets
gem 'sass-rails', '>= 6'
# Transpile app-like JavaScript. Read more: https://github.com/rails/webpacker
gem 'webpacker', '~> 5.0'
# Turbolinks makes navigating your web application faster.
# Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.7'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 4.0'
# Use Active Model has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Active Storage variant
# gem 'image_processing', '~> 1.2'

# Reduces boot times through caching; required in config/boot.rb
gem 'bootsnap', '>= 1.4.4', require: false

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  # Access an interactive console on exception pages or by calling 'console'
  # anywhere in the code.
  gem 'web-console', '>= 4.1.0'
  # Display performance information such as SQL time and flame graphs for each
  # request in your browser.
  # Can be configured to work on production as well see:
  # https://github.com/MiniProfiler/rack-mini-profiler/blob/master/README.md
  gem 'rack-mini-profiler', '~> 2.0'
  gem 'listen', '~> 3.3'
  # Spring speeds up development by keeping your application running in the
  # background. Read more: https://github.com/rails/spring
  gem 'spring'
end

group :test do
  # Adds support for Capybara system testing and selenium driver
  gem 'capybara', '>= 3.26'
  gem 'selenium-webdriver'
  # Easy installation and use of web drivers to run system tests with browsers
  gem 'webdrivers'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

ብዙዎቹ መስመሮች ሃሽ # የተባለ ወካይን በመጠቀም፣ ኮዱ ምን እንደሚያደርግ ይገልጻሉ (ክፍል 4.2)። እነሱ በኮዱ ውስጥ የተካተቱበት ምክንያትም ብዙውን ጊዜ የሚፈለጉትን እንቁወች ለናንተ ለማሳየት እና የጠቅላይን አገባብ እንድትረዱ ምሳሌወችን ለመስጠት ነው። ለአሁኑ ከነባሪዎቹ በስተቀር ሌላ ምንም እንቁ አያስፈልገንም፡፡

በእንቁ ትእዛዝ ላይ አንድ የስሪት ቁጥር ካላሰፈራችሁ በስተቀር፣ ጠቅላይ በራስሰር የሚጪነው የተጠየቀውን እንቁ (gem) ወቅታዊውን ስሪት ነው። ይህ ከሆነ፣ የኮዱ ምሳሌ የሚከተለውን ይመስላል:-

gem 'spring'

በተጨማሪም የአንድን እንቁ የስሪቱን መጠን ለማስፈር፣ የሚያገለግሉ ሁለት የተለመዱ የአሰራር መንገዶች አሉ። እነዚህም፣ ሬይልስ የሚጠቀምባቸው፣ የእንቁ ስሪቶች ላይ የተወሰነ ቁጥጥር እንድናደርግ ያስችሉናል። የመጀመሪያውም ይህንን ይመስላል:-

gem 'capybara', '>= 3.26'

የሚለው የአጻጻፍ ስርዓት፣ ወቅታዊ ስሪቱ፤ ከስሪቱ ማለት ከ 3.26 እኩል ወይም ከዛ በላይ እስከሆነ ድረስ፣ ወቅታዊውን የኮፒባራ (capybara) እንቁን ይጪናል። ለምሳሌ ወቅታዊው ስሪት 7.2. ከሆነ፣ ይህንንም ይጪናል ማለት ነው።

ሁለትኛው የአጻጻፍ ስርዓት ደግሞ ይህንን ይመስላል:-

gem 'sqlite3', '~> 1.4'

የሚለው የአጻጻፍ ስርዓት፣ ስሪቱ 1.4 እና ከዚያ በላይ አዲስ የሆነውን፣ ሆኖም ግን ስሪቱ 2 እና ከዚያ በላይ ያለውን አዲስ የ‘ስዄልላይት (sqlite3) ወቅታዊ ስሪትን አይጪንም። በሌላ አገላለጽ >= ስርዓተ-ምልክት ሁልጊዜ ወቅታዊውን የእንቁ ስሪት የሚጪን ሲሆን፣ ~> 6.0.2.1 ስርዓተ-ምልክት ትንሽ መሻሻል ተጨምሮባቸው የወጡትን እንቁዎች (ለምሳሌ:- ከ 6.0.3 እስከ 6.0.4) (ካለ) ይጪናል፤ ነገር ግን ትልቅ ለውጥ ያላቸውን (ለምሳሌ ከ 6.0.4 ወደ 6.1.0) አይጪንም።16

ከስራ ልምድ አንጻር እንደተገነዘብነው እንደአጋጣሚ ሆኖ፣ የአንድ ትንሽ ነጥብ የስርጪት ልዩነት እንኳን የሬይልስ አፕልኬሽኖችን ሊሰብር ይችላል። ስለሆነም ከወዲሁ ከጥፋት ለመዳን ለሬይልስ ስልጠና የምንጠቀምባቸው እንቁወች በሙሉ ትክክለኛውን የስሪት ቁጥር የያዙ ይሆናሉ። የናንተ የ‘እንቁፋይል (Gemfile) ላይ የ ~> መመስረቻን በመጠቀም፣ ወቅታዊውን የእንቁ ስሪት ብትጠቀሙ ችግር የለውም። (ይህንን የምመክረው፣ በዚህ ጉዳይ ላይ የላቀ እውቀት ላላቸው ተጠቃሚወች ነው።) ይህንን መመስረቻ በምትጠቀሙበት ጊዜ፣ ስልጠናውን ለመገመት አስቸጋሪ የሆነ ጠባይ እንዲኖረው ሊያደርገው እንደሚችል ከወዲሁ ላስጠነቅቃችሁ እወዳለሁ።

በትክክል የተፈለገውን፣ የ‘እንቁፋይል (Gemfile) በትክክል ከተፈጉት የእንቁ ስሪቶች ጋር ለመጠቀም፣ በዝርዝር 1.8 ውስጥ ያሉትን እንቁወች ወደ ዝርዝር 1.917 መቀየር ያስፈልጋል። ይህንን አጋጣሚ ተጠቅመን የ sqlite3 እንቁን፣ በማበልጸጊያ ወይም በፈተና አካባቢ ብቻ እንዲካተት አድርገናል (ክፍል 7.1.1)፡፡ ይህ ደግሞ ወደፊት የሃረኩ (ክፍል 1.4) ውሂበጎታን መጠቀም ላይ፣ ሊከሰቱ የሚችሉ ግጪቶችን ይከላከላል። ፋይሉ መጨረሻ ላይ የሚገኘው መስመር፣ ለማይክሮሶፍት ዊንዶውስ ብቻ የተወሰ ስለሆነ እና ዊንዶውስ ባልሆኑ ስርዓቶች ላይ ግራ የሚያጋባ የማስጠንቀቂያ መልእክት ስለሚሰጥ፣ የአስተያየት ምልክት አድርገንበታል፤ በአንድ የቤተኛ የዊንዶውስ ስርዓት ላይ፣ ሬይንስን የምታስኬዱ ከሆነ ግን፣ እዛ መስመር ላይ ያለውን የአስተያየት ምልክት ማስወገድ ይኖርባችኋል፡፡ በመጨረሻም ትክክለኛውን የሩቢ ስሪት፣ ማለት ruby `2.7.4' የሚለውን ከዝርዝር 1.8 ላይ አስወግደነዋል፡፡ በክፍል 7.5.4 እንደተጠቀሰው፣ በጣም አስፈላጊ በሆነ አፕልኬሽን ላይ ግን፣ ይህንን የሩቢ ስሪት ባለበት ቦታ ላይ እንድታቆዩት ይመከራል፡፡ ነገር ግን የሩቢ ስሪቱን በእነደዚህ ዓይነት ስልጠና ላይ ባለበት ቦታ ላይ ማቆየቱ አዳዲስ ስህተቶችን እና ውስበስብ ነገሮችን ያመጣል፡፡ (ይህ በእንዲህ እያለ፣ አፕልኬሽናችሁ ያለ ሩቢ የስሪት ቁጥር አልሰራ ካለ፣ ወዲያውኑ የሩቢ የስሪት ቁጥሩን እነበረበት መመለስ ይኖርባችኋል፡፡)

ጠቃሚ ማሳሰቢያ፡- በዚህ መጽሐፍ ውስጥ ላሉት እንቁዎች ሁሉ፣ ከዚህ በታች ከተዘረዘሩት እንቁዎች ይልቅ፣ በ gemfiles-6th-ed.railstutorial.org ላይ የተዘረዘሩትን እንቁዎች መጠቀም ይኖርባችኋል (ምንም እንኳን ተመሳሳይ እንቁዎች ቢመስሉም)፡፡

ዝርዝር 1.9: ለእያንዳንዱ የሩቢ እንቁ የማያሻማ ስሪትን የያዘ አንድ የ‘እንቁፋይል (Gemfile)።
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails',      '6.1.4.1'
gem 'puma',       '5.3.1'
gem 'sass-rails', '6.0.0'
gem 'webpacker',  '5.4.0'
gem 'turbolinks', '5.2.1'
gem 'jbuilder',   '2.10.0'
gem 'bootsnap',   '1.7.2', require: false

group :development, :test do
  gem 'sqlite3', '1.4.2'
  gem 'byebug',  '11.1.3', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'web-console',        '4.1.0'
  gem 'rack-mini-profiler', '2.3.1'
  gem 'listen',             '3.4.1'
  gem 'spring',             '2.1.1'
end

group :test do
  gem 'capybara',           '3.35.3'
  gem 'selenium-webdriver', '3.142.7'
  gem 'webdrivers',         '4.6.0'
end

# ዊንዶውስ የዞን መረጃ ፋይሎችን አያካትትም፤ ስለሆነም፣ በአንድ የቤተኛ የዊንዶውስ ስርዓት
# ላይ፣ ሬይንስን የምታካሂዱ ከሆነ፣ የሚከተለው እንቁ ላይ ያለውን የአስተያየት ምልክት ማስወገድ
# ይኖርባችኋል:-
# gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

ዝርዝር 1.9 ይዞታወችን ወደ አፕልኬሽኑ የ‘እንቁፋይል (Gemfile) ውስጥ ካስገባችሁ በኋላ፣ በዝርዝር 1.10 ላይ እንደሚታየው፣ ጠቅል ጫን‘ን (bundle install) በመጠቀም፣ እንቁዎቹን ጫኑ።18

ዝርዝር 1.10: ዝርዝር 1.9 ላይ የሚገኙትን እንቁዎች መጫን።
$ cd selamta/
$ bundle _2.2.17_ install
Fetching source index for https://rubygems.org/
.
.
.

ዝርዝር 1.7 ውስጥ ላይ እንዳለው የሬይልስ ትእዛዝ ሁሉ፣ በዝርዝር 1.10 ውስጥ ያለው ትእዛዝም ጠቅል (bundle) ከትክክለኛው የጠቅላይ እንቁ ስሪት ጋር እየሄደ መሆኑን ለማረጋገጥ አንድ ግልጽ የሆነ የስሪት ቁጥርን ይጠቀማል (ማለትም ልክ በዝርዝር 1.3 ውስጥ እንደተጫነው)፡፡

የ‘ጠቅል ጫን (bundle install) ትእዛዝ፣ እንቁወቹን በሚጪንበት ጊዜ የተወሰነ ጊዜ ሊወስድ ይችላል፤ ቢሆንም፣ ትእዛዙ ከተፈጸመ በኋላ፣ አፕልኬሽናችን ለመሄድ ዝግጁ ይሆናል። (በአንድ የቤተኛ የዊንዶውስ ስርዓት ላይ፣ ሬይንስን የምታስኬዱ ከሆነ፣ በዝርዝር 1.9 መጨረሻ ላይ ያለውን የአስተያየት ማለት የ‘ሃሽ # ምልክት ማስወገድ እንዳለባችሁ ልትገነዘቡ ይገባል፡፡)

በነገራችን ላይ የ‘ጠቅል ጫን (bundle install) ትእዛዝን በምታስኬዱበት ጊዜ “ጠቅል አዘምን (bundle update) የተባለውን ትእዛዝ በቅድሚያ ማስኬድ አለባችሁ” የሚል መልእክት ካገኛላችሁ፤ በዚህ ጊዜ በቅድሚያ የ‘ጠቅል አዘምን (bundle update) ትእዛዝን ማስኬድ ይኖርባችኋል!! (ለጥንቃቄ ያህል ከዝርዝር 1.10 ጋር ተመሳሳይ የሆነውን፣ bundle 2.2.17 update ‘ን አስኪዱ፡፡) ነገሮች በታቀዱት መሰረት በማይሄዱበት ጊዜ፣ አለመረበሽን መማሩ ቴክኒካዊ ለሆነ ችሎታ አስፈላጊው አካል ነው፡፡ ስህተት በሚፈጠር ጊዜ፣ “የስህተቱ” መልእክት በቀላሉ ችግሩን ለማስተካከል የሚያስፈልጋችሁን ትክክለኛ መመሪያዎችን በመያዝ፣ እንዴት እንደሚረዳ ስትመለከቱ በጣም ትደነቃላችሁ።

1.2.2 ሬይልስ አገልጋይ

ምስጋና በክፍል 1.2 ላይ ላስኬድነው ለ‘ሬይልስ አዲስ (rails new) ትእዛዝ እና ምስጋና በክፍል 1.2.1 ላስኬድነው ለ‘ጠቅል ጫን (bundle install) ትእዛዝ፣ በነሱ ምክንያት፣ አሁን አንድ የምናስኬደው አፕልኬሽን አለን። ግን እንዴት? ደስ የሚለው ነገር ሬይልስ አፕልኬሽናችንን ለማበልጸግ የሚረዳ አንድ የሰፈር አገልጋይን የሚያስኬድ፣ ሬይልስ አገልጋይ (rails server) ከተባለ የማዘዥያ መስመር ፕሮግራም ወይም ስክሪፕት (Script) ጋር መጥቶልናል።

የ‘ሬይልስ አገልጋይ (rails server) ትእዛዝን ከማስኬዳችን በፊት የተወሰኑ ስርዓቶችን (የደመና ቅ.ማ.አንም ጨምሮ)፣ ከሰፈር ድር አገልጋዩ ጋር ግንኙነትን እንዲፈቅዱ ማድረጉ አስፈላጊ ነው፡፡ ይህ ግንኙነት እንዲፈጠር ምስል 1.13 ስእላዊ መግለጫ ላይ እንደሚታየው፣ አዋቅር/አካባቢወች/ማበልጸጊያ/አርቢ (config/environments/development.rb) የተባለውን ፋይል ካገኛችሁ በኋላ፣ በዝርዝር 1.11 ውስጥ ያሉትን ሁለት መስመር ኮዶች ቀድታችሁ ወደ ፋይሉ ገልብጡ።

ዝርዝር 1.11: ከሰፈር ድር አገልጋዩ ጋር ግንኙነት እንዲደረግ መፍቀድ። config/environments/development.rb
Rails.application.configure do
  .
  .
  .
  # ከሰፈር ድር አገልጋዩ ጋር ግንኙነት እንዲደረግ መፍቀድ።
  config.hosts.clear
end
images/figures/clear_hosts
ምስል 1.13: ክላውድ9 ከሬይልስ አገልጋይ ጋር እንዲገናኝ መፍቀድ፡፡

ምስል 1.14 እና በምስል 1.15 ውስጥ እንደሚታየው፣ በመጀመሪያው ትር (Tab) መናኸሪያ ላይ፣ ትእዛዞችን መስጠት ትችሉ ዘንድ፣ ሁለተኛ የመናኸሪያ ትር በመፍጠር፣ በዝርዝር 1.12 ላይ የተሰጠውን የ‘ሬይልስ አገልጋይ (rails server) ትእዛዝን እንድታስኬዱበት እመክራችኋለሁ። (ዝርዝር 1.12 እንደሚያመለክተው፣ አገልጋዩን ለማስቆም “ተቆር-ሲን (Ctrl-C)”19 መጫን ትችላላችሁ።)

ዝርዝር 1.12: የሬይልስ አገልጋይን ማስኬድ።
$ cd ~/አካባቢ/selamta/
$ rails server
=> Booting Puma
=> Ctrl-C to shutdown server
images/figures/new_terminal_tab
ምስል 1.14: አንድ አዲስ የመናኸሪያ ትርን መክፈት።
images/figures/rails_server_new_tab
ምስል 1.15: በአንድ የተለየ ትር ውስጥ አንድ የሬይልስ አገልጋይን ማስኬድ።

በአንድ የቤተኛ ስርዓተ ክወና ላይ የ‘ሬይልስ አገልጋይ (rails server) ትእዛዝ ውጤትን ለማየት፣ የህንን http://localhost:3000 ዓ.አ.ሃ.አን (URL)20 ቀድታችሁ፣ በድር አሳሻችሁ የአድራሻ ማስፈሪያ ላይ ገልብጡ፡፡ በዳመና ቅ.ማ.አ ላይ የዚህን ውጤት ለማየት ደግሞ፣ “Priview” የሚለው ጋር ሂዳችሁ “Preview Running Application” የሚለውን ጠቅ አድርጉ፣ (ምስል 1.16)፣ ከዚያም በሰፊ/ሙሉ ወይም በንዑስ አሳሽ መስኮት ትር ላይ ክፈቱት (ምስል 1.17)፡፡ በየትኛውም ሁኔታ፣ ውጤቱ ልክ ምስል 1.18 ላይ እንደተመለከተው ዓይነት ምስል መምሰል አለበት፡፡

images/figures/share_workspace
ምስል 1.16: በዳመና የስራቦታ ላይ የሚሄደውን የሰፈር አገልጋይን ማጋራት።
images/figures/full_browser_window
ምስል 1.17: በመስራት ላይ ያለ አፕልኬሽንን በሙሉ ውይም በንዑስ መስኮት ትር ውስጥ መክፈት።
images/figures/riding_rails
ምስል 1.18: በ‘ሬይልስ አገልጋይ (rails server) የተስተናገደው ነባሪው የሬይልስ ገጽ፡፡

መልመጃዎች

የሬይልስ ስልጠናን ለገዙ ሰወች በሙሉ የሁሉም የመልመጃ መልሶች እዚህ ላይ ይገኛሉ።

የሌሎች ሰዎች መልሶችን ለማየት እና የራሳችሁን ደግሞ ለመመዝገብ፣ በሬይልስ ስልጠና ወይም ሁሉንም በበቂ ተማር መድረሻ ጥቅል ላይ ተመዝገቡ፡፡

ሩቢ ኦን ሬይልስ ስልጠና በርካታ ቁጥር ያላቸው መልመጃዎች አሉት፡፡ ስለዚህ ስልጠናውን በምትቀጥሉበት ጊዜ፣ እግረ መንገዳችሁን መልመጃዎቹን እንድትሰሯቸው/እንድትፈቷቸው ስል በእጅጉ ምክሬን እለግሳለሁ፡፡

ዋናውን የውይይት አርእስተ ጉዳይ ከመልመጃወቹ ነጥሎ ለመለየት፣ በአጠቃላይ የመልመጃዎቹ መልሶችን እና አሰራራቸውን አከታትሎ የሚያቀርብ የኮድ ዝርዝር አልተካተተም፡፡ (አልፎ አልፎ፣ በአንዳንድ አጋጣሚ መልሶቹ በዋናው ጽሑፍ ውስጥ በግልጽ ተመልሰዋል።) ይህ ማለት፣ ከጊዜ በኋላ በመልመጃዎች ውስጥ በተተገበሩ ልዩነቶች ምክንያት፣ ኮዱ በስልጠናው ውስጥ ከታየው ኮድ ሊለያይ ይችላል ማለት ነው፡፡ እንደነዚህ ያሉ ልዩነቶችን እንዴት መፍታት እንደሚቻል መማሩ፣ የቴክኒካዊ ችሎታን ለማዳበር የሚያገለግል መልመጃ ይሆናል (ሳጥን 1.2)፡፡

አብዛኞቹ መልመጃዎች አስቸጋሪወች/ፈታኞች ቢሆኑም ለመሟሟቅ ያህል በቀላሎቹ እንጀምራለን:-

  1. በነባሪው የሬይልስ ገጽ መሰረት፣ በስርዓታችሁ ላይ የተጫነው የሩቢ ስሪት ቁጥር ስንት ነው? በማዘዥያ መስመሩ ላይ የ‘ሬይልስ ስሪት (ሩቢ -ቪ (ruby -v)) ትእዛዝን በማስኬድ፣ ነባሪው የሬይልስ ገጽ ላይ ከሚታየው የሩቢ ስሪት ቁጥር ጋር አንድ ዓይነት መሆኑን አረጋግጡ፡፡
  2. የሬይልስ ስሪት ቁጥርስ ስንት ነው? በማዘዥያ መስመሩ ላይ የ‘ሬይልስ ስሪት (ሬይልስ -ቪ (rails -v)) ትእዛዝን በማስኬድ፣ በዝርዝር 1.2 ውስጥ ከሚታየው ስሪት ጋር አንድ ዓይነት መሆኑን አረጋግጡ፡፡

1.2.3 ቅርጸት-ትይታ-መቆጣጠሪያ (ቅ.ት.መ)

ምስል 1.19 ስእላዊ መግለጫ ላይ እንደቀረበው፣ በዚህ የመጀመሪያ ደረጃ ላይ እንኳን፣ የሬይልስ አፕልኬሽኖች እንዴት እንደሚሰሩ፣ አንድ አጠቃላይ የሆነ እውቀት ማግኘቱ ጠቃሚ ነው፡፡ ምንአልባት አስተውላችሁ ከሆነ፣ መደበኛው የሬይልስ አፕልኬሽን መዋቅር (ዝርዝር 1.11) አንድ አፕ/ (app/) የተባለ የአፕልኬሽን ማውጫ ነበረው፡፡ ይህ አፕ የተባለ ማውጫ ደግሞ ሌሎች ሶስት ንዑስ-ማውጫዎችን ይይዛል፣ ለምሳሌ ጥቂቶቹን ለመዘርዘር ያክል ቅርጸቶች‘ን (models)፣ ትይታወች‘ን (views) እና መቆጣጠሪያወች‘ን (controllers) (ሌሎችንም በመጨመር) ያካትታል፡፡ ይህ እነግዲህ ሬይልስ ቅርጸት-ትይታ-መቆጣጠሪያ (ቅ.ት.መ) Model-View-Controller (MVC) የተባለውን የመዋቅር ጥለትን እንደሚከተል አንድ ፍንጪ ይሰጣል፤ ይህም በአፕልኬሽኑ ውሂብ (ለምሳሌ:- የአንድ ተጠቃሚ መረጃ) እና ውሂቡን ለማሳየት የምንጠቀምበት ኮድ መካከል ልዩነት እንዲኖር ያደርጋል፡፡ ይህም አንድ ስእላዊ የተጠቃሚ በይነገጽን (ስ.ተ.በ (GUI)) ለማዋቀር የተለመደ አሰራር ነው፡፡

ከአንድ የሬይልስ አፕልኬሽን ጋር መስተጋብር በምናደርግበት ጊዜ፣ አሳሹ ወደ አገልጋዩ አንድ መጠይቅን (Request) ይልካል፤ ከዚያም የድር አገልጋዩ መጠይቁን ይቀበል እና ቀጣዩ ስራ ምን እንደሆነ ለሚወስነው ለሬይልስ መቆጣጠሪያ (Controller) ያሳልፈዋል፡፡ በአንዳንድ ሁኔታዎች ላይ፣ መቆጣጠሪያው ወደ ሃ.ጽ.መ.ቋ ተቀይሮ ወደ አሳሹ ተመልሶ የተላከ የዝግጁገጽታ ትይታን (View) ወዲያውኑ ሊያቀርብ ይችላል። ተለዋዋጪ ይዞታ ላላቸው ጣቢያዎች፣ መቆጣጠሪያው ብዙውን ጊዜ በተለምዶ ቅርጸቱ ጋር መስተጋብርን ይፈጥራል፡፡ ይህ ቅርጸት (Model) ደግሞ የጣቢያውን አካል (እንደ ተጠቃሚ ያሉትን) የሚወክል እና ከውሂበጎታው ጋር የመገናኘት ሃላፊነት ያለው አንድ የሩቢ ቁስ ነው። ቅርጸቱን ከጠራ (የቅርጸት ዘዴን ከጠራ) በኋላ፣ መቆጣጠሪያው ትይታውን ይሰራ እና የተሟላውን የድር ገጽ ወደ አሳሹ በሃ.ጽ.መ.ቋ መልክ ያቀርባል።

mvc_schematic
ምስል 1.19: የቅርጸት-ትይታ-መቆጣጠሪያ (ቅ.ት.መ) መዋቅር፣ ረቂቅ-ንድፍ አቀራረብ።

አሁን ይህ ውይይት ምናልባት ትንሽ መጨበጫ የለለው መስሎ ከተሰማችሁ፣ ወደ ኋላ ላይ በዚሁ መጽሐፍ ውስጥ፣ እነዚህ ነገሮች ላይ ሰፋ ያለ ማብራርያ እና በኮድ የተደገፈ ትምህርት ስለሚኖረን፣ ፈጽሞ ስጋት ሊኖርባችሁ አይገባም፡፡ ክፍል 1.2.4 የመጀመሪያውን የቅ.ት.መ (MVC) መዋቅርን የሚያሳይ ጊዜያዊ አፕልኬሽንን ያሳያል። ክፍል 2.2.2 ደግሞ በጨዋታ አፕልኬሽን አውድ ውስጥ በበለጠ ሁኔታ የቅ.ት.መ ዝርዝር ገለጻን ያካትታል። በመጨረሻም የማሳያ አፕልኬሽኑ የቅ.ት.መን ሁለንተናዊ ገጽታን ይጠቀማል። በክፍል 3.2 ውስጥ መቆጣጠሪያወችን እና ትይታወችን በማየት እንጀምራለን፣ በክፍል 6.1 ደግሞ ቅርጸቶችን እና በክፍል 7.1.2 ውስጥ ደግሞ ሶስቱም በአንድንት አብረው ሲሰሩ እናያለን።

1.2.4 ዓለም እንዴት ነሽ!

በቅ.ት.መ መዋቅር የተገነባ አንድ የመጀመሪያ አፕልኬሽን ይሆነን ዘንድ፣ “ዓለም እንዴት ነሽ!” የሚል ሃረግን እንዲሰጠን፣ አንድ የመቆጣጠሪያ ተግባርን በመጨመር የመጀመሪያውን አፕልኬሽንን በጣም በትንሹ በመለወጥ፤ በዝርዝር 1.18 የሚገኘውን ማለት ነባሪውን የሬይልስ ገጽን በአንድ አዲስ ገጽ እንተካለን። (ክፍል 2.2.2 ላይ ስለ መቆጣጠሪያ ተግባሮች በበለጠ መማር እንጀምራለን።)

ስማቸው እንደሚገልጸው፣ የመቆጣጠሪያ ተግባሮች በመቆጣጠሪያወቹ ውስጥ ይበየናሉ። ተግባሩን ሰላምታ (selamta) ብለን እንሰይመው እና በአፕልኬሽን መቆጣጠሪያው ውስጥ እናስቀምጠዋለን። በርግጥ በዚህ ወቅት ያለን መቆጣጠሪያ፣ የአፕልኬሽን መቆጣጠሪያ ብቻ ነው፤ አሁን በአፕልኬሽኑ ውስጥ ያሉትን መቆጣጠሪያዎች በሙሉ ለመመልከትም ይህንን ትእዛዝ ማስኬድ እንችላለን:-

$ ls app/controllers/*_controller.rb

(ምዕራፍ 2 ላይ የራሳችንን መቆጣጠሪያወችን መፍጠር እንጀምራለን።) ዝርዝር 1.13 የ “ዓለም እንዴት ነሽ!” የሃ.ጽ.መ.ቋ ጽሑፍን ለማቅረብ፣ የ‘ዓቅርብ (render) ሥልት የሚጠቀመውን የ‘ሰላምታ (selamta) ተግባርን ያሳያል (በቅ.ት.መ አውድ ውስጥ፣ በመቆጣጠሪያ ውስጥ የሚገኝ ስያሜ አክሽን ተብሎ ይጠራል፤ እኛ ደግሞ በአማርኛ ተግባር ብለን እንጠራዋለን)፡፡ (አሁን ስለ ሩቢ አገባብ ምንም መጨነቅ አይገባችሁም፡፡ በምዕራፍ 4 ላይ ስለ ሩቢ የአጻጻፍ ስርዓቶች በሰፊው እንመለከታለን፡፡)

ዝርዝር 1.13: በአፕልኬሽን መቆጣጠሪያው ውስጥ አንድ የ‘ሰላምታ (selamta) ተግባርን መጨመር። app/controllers/application_controller.rb
class ApplicationController < ActionController::Base

  def selamta
    render html: "ዓለም እንዴት ነሽ!"
  end
end

የተፈለገው ሃረግን የሚመልስ አንድ ተግባርን ስለበየንን፣ በምስል 1.18 ውስጥ ያለውን ነባሪውን ገጽ ከመጠቀም ፈንታ፣ ይህንን ተግባር እንዲጠቀም ለሬይለስ መንገር ይኖርብናል። ይህንን ለማድረግ፣ በምስል 1.19 ላይ ከመቆጣጠሪያው ፊት ለፊት የተቀመጠውን የሬይልስ ማዘዋወርያን (Router) እናርማለን፣ ከዚያም ማዘዋወርያው ከአሳሹ የሚመጡ መጠይቆችን ወደየት እንደሚልክ ይወስናል፡፡ (ነገሮችን ለማቅለል ብየ፣ የማዘዋወርያውን ስእላዊ መግለጫ፣ በምስል 1.19 ላይ አላካተትኩትም፤ ነገር ግን፣ ከክፍል 2.2.2 ጀምረን በሰፊው እንዳስሰዋለን፡፡) በተለይ ደግሞ በመነሻ ገጹ አድራሻ ላይ፣ ማገልገል የሚገባውን ገጽ የሚወስነውን፣ ነባሪውን ገጽ፣ ማለትም የመነሻ (root) ዓ.አ.ሃ.አውን መለወጥ ይኖርብናል። ምክንያቱ ደግሞ የዓ.አ.ሃ.አ አድራሻው፣ አንድ http://www.misale.com/ የሚል ዓይነት መልክ የያዘ ስለሆነ ነው (ከመጨረሻው የህዝባር (/) ምልክት በኋላ፣ ምንም ነገር አይኖርም)። ስለዚህም ብዙውን ጊዜ የመነሻ አድራሻው ባጪሩ / (“ስላሽ”) ተብሎ ይነበባል/ይጠራል።

ዝርዝር 1.14 ላይ እንደሚታየው፣ የሬይልስ የማዘዋወርያወች ፋይል ( አዋቅር/ማዘዋወርያወች/አርቢ (config/routes.rb)) ወደ ለማዘዋወርያ የተሰጠ የሬይልስ መመሪያ የሚመራ መግለጫን እና የመነሻ አድራሻው እንዴት እንደሚበየን የሚያብራራ መመሪያዎችን የያዘ አንድ አስተያየትን አካቷል፡፡ አገባቡ ከዚህ በታች እንደተመለከተው ይመስላል፡-

root 'የመቆጣጠሪያ_ስም#የተግባር_ስም'

አሁን ባለው ሁኔታ የመቆጣጠሪያው ስም አፕልኬሽን (application) ሲሆን፣ የተግባሩ ስም ደግሞ ሰላምታ (selamta) ነው፡፡ ይህም በዝርዝር 1.15 ላይ የሚታየውን ዓይነት ኮድ ያስገኛል፡፡

ዝርዝር 1.14: ነባሪው የማዘዋወርያ ፋይል (እንዲመጥን ተቀርጾ)። config/routes.rb
Rails.application.routes.draw do
  # For details on the DSL available within this file,
  # see https://guides.rubyonrails.org/routing.html
end
ዝርዝር 1.15: ስረ ማዘዋወርያውን ማቀናበር። config/routes.rb
Rails.application.routes.draw do
  root 'application#selamta'
end

ዝርዝር 1.13 እና ዝርዝር 1.15 ባሉት ኮዶች መሰረት፣ የመነሻ አድራሻው “ዓለም እንዴት ነሽ!” የሚለውን ሃረግ፣ እንደተፈለገው ይመልሳል (ምስል 1.20)።21 ዓለም እንዴት ነሽ!

images/figures/hello_world_hello_app
ምስል 1.20: በአሳሹ ውስጥ “ዓለም እንዴት ነሽ!” ን ማየት።

መልመጃዎች

የሬይልስ ስልጠናን ለገዙ ሰወች በሙሉ የሁሉም የመልመጃ መልሶች እዚህ ላይ ይገኛሉ።

የሌሎች ሰዎች መልሶችን ለማየት እና የራሳችሁን ደግሞ ለመመዝገብ፣ በሬይልስ ስልጠና ወይም ሁሉንም በበቂ ተማር መድረሻ ጥቅል ላይ ተመዝገቡ፡፡

  1. በ “ዓለም እንዴት ነሽ!” ምትክ “hola, mundo!” የሚለውን ሰላምታ በስፔንኛ ለማቅረብ፣ በዝርዝር 1.13 ስር ያለውን የ‘ሰላምታ (selamta) ተግባር ይዘትን ቀይሩ፡፡
  2. አንድ የተገለበጠ የቃል አጋኖ (¡) በመጨመር (“¡Hola, mundo!”) ሬይልስ መ.ል.አ.መ.ኮ (ASCII)22 ያልሆኑ ሆሄወችን እንደሚደግፍ በተግባር አሳዩ (ምስል 1.21)፡፡ አንድ የተገለበጠ የቃል አጋኖ (¡) ሆሄን ለመጠቀም ሁሌም ኦፕሽን-1 ‘ን መጠቀም አለበለዚያም ሆሄውን ቀድታችሁ ወደናንተ የጽሑፍ አርታኢ መገልበጥ ትችላላችሁ፡፡23
  3. ዝርዝር 1.13 ውስጥ የ‘ሰላምታ (selamta) ተግባር ምሳሌን በመከተል፣ “ዓለም ደህና ሁኝ!!” የሚል ጽሑፍ የሚያቀርብ፣ አንድ ሰላምሁኝ (selamhugn) የተባለ ሁለተኛ ተግባርን ጨምሩ፡፡ የመነሻ አድራሻው ወደ ሰላምታ (selamta) አድራሻ ከሚሄድ ይልቅ፣ ወደ ሰላምሁኝ (selamhugn) አድራሻ ይሄድ ዘንድ፣ በዝርዝር 1.15 ላይ ያለውን የማዘዋወርያወች ፋይል አርሙ (ምስል 1.22)፡፡
images/figures/hola_mundo
ምስል 1.21: “¡Hola, mundo!” ‘ን እንዲመልስ ስረ መዘዋወርያውን መለወጥ።
images/figures/goodbye_world
ምስል 1.22: “ዓለም ደህና ሁኝ” ‘ን እንዲመልስ ስረ መዘዋወርያውን መለወጥ።

1.3 በጊት ስሪቶችን መቆጣጠር

እስካሁን አንድ አዲስ እና የሚሰራ የሬይልስ አፕልኬሽን አለን፤ አሁን ደግሞ ይህንን ስራ አመርቂ ለማድረግ አንድ ሂደትን እንጨምራለን፤ ይህንን ሂደት መከተሉ ግዴታ ባይሆንም፤ ብዙ የላቁ የሶፍትዌር አበልጻጊወች፣ “ኮድን በስሪት ቁጥጥር ስር ማስቀመጥ በጣም አስፈላጊ ነው”፤ ወዳሉት አሰራር እናመራለን፡፡ ይህንንም ተግባራዊ ለማድረግ፣ አፕልኬሽኑን የሚያመነጨውን ኮድ፣ በስሪት ቁጥጥር (Version Control) ስር እንዲሆን ማድረግ ነው። የስሪት ቁጥጥር ስራዓቶች፣ በፕሮጀክታችን ኮድ ላይ ያደረግናቸው ለውጦችን ለመከታተል፣ በተቀላጠፈ ሁኔት ከሌሎች ጋር እንድንተባበር ለማድረግ እና ማንኛውንም ሳይታሰብ የተደረገ ስህተትን ቀድሞ ወደ ነበረበት ሁኔታ ለመመለስ ያስችሉናል (ለምሳሌ:- ፋይሎችን በስህተት ብንደመስስ)። ስለዚህ አንድ የስሪት ቁጥጥር ስርዓትን፣ እንዴት መጠቀም እንደሚቻል ማወቁ፣ ለእያንዳንዱ ባለሞያ የሶፍትዌር አበልጻጊ አስፈላጊ ችሎታ ነው።

ብዙ ዓይነት የስሪት ቁጥጥር ስርዓቶች ቢኖሩም፣ የሬይልስ ማህበረሰብ በመደበኛነት የሚጠቀመው ግን ጊትን ነው። ጊት የሊኒክስን ውስጣዊ ስርዓት ለማከፋፈል ሲባል በሊነስ ቶርቫልድስ የተዘጋጃ የስሪት ቁጥጥር ስርዓት ነው። ጊት ሰፊ እና ጠለቅ ያለ ዳሰሳን የሚጠይቅ ቢሆንም፣ እኛ በዚህ መጽሐፍ ውስጥ የምንመለከተው ግን ላይ ላዩን ብቻ ይሆናል። ስለ ጊት የበለጠ ለመማር በጊት ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማርን መጎብኘት ትችላላችሁ፡፡

የአፕልኬሽን ኮድ ማመንጫችሁን በስሪት ቁጥጥር ስር ማዋሉ በጣም ጠቃሚ የሚሆነው፣ በሬይልስ በጣም የተለመደ አንድ አሰራር ብቻ ስለሆነ ሳይሆን፣ ኮዳችሁን በቀላሉ (ክፍል 1.3.3) ከሌሎች ጋር ለማጋራት እና ተተኪ ኮድን ለማኖር ስለሚያስችላችሁ ብቻም ሳይሆን፣ አፕልኬሽናችሁን እንደዚሁ፣ ምዕራፍ አንድ ላይ ወደ ሃረኩ ለማሰማራት ስለሚጠቅማችሁም ጪምር ነው (ክፍል 1.4)።

1.3.1 ጊትን ማዋቀር

ክፍል 1.1.1 ውስጥ እንድትጠቀሙበት የተመከረው የዳመናው ቅ.ማ.አ በነባሪነት ጊትን ያካትታል፤ ስለሆነም አንድ ብቸኛ አስፈላጊ መዋቅር ቢኖር የጊት ስሪት ቁጥሩ 2.28.0 ወይም ከዛ በላይ መሆኑን ማረጋገጥ ብቻ ይሆናል። የጊት ስሪት ቁጥሩን እንደሚከተለው አድርጋችሁ ማግኘት ትችላላችሁ:-

$ git --version
git version 2.17.1    # 2.28.0 ወይም ከዛ በላይ መሆን ይኖርበታል።

የስሪት ቁጥሩ ከ 2.28.0 በታች ከሆነ፣ እሱን ማዘመን ይኖርባችኋል። የደመና ቅ.ማ.አን እየተጠቀማችሁ ከሆነ፣ በዝርዝር 1.16 ውስጥ የሚታየውን ትእዛዝ በማስኬድ ይህንን እውን ማድረግ ትችላላችሁ፡፡

ዝርዝር 1.16: በደመና ቅ.ማ.አ ላይ ጊትን ማዘመን።
$ source <(curl -sL https://cdn.learnenough.com/upgrade_git)

የደመና ቅ.ማ.አን የማትጠቀሙ ነገር ግን ጊትን ለማዘመን የምትፈልጉ ከሆነ፣ በጊት ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማር ላይ ጊትን በስርዓታችሁ ላይ ለመጫን የሚረዱ መመሪያዎችን ስለሚያካትት እሱን መጣቀስ ይኖርባችኋል።

ለመጀመርያ ጊዜ ስርዓቱን ማዋቀር

ጊትን ከመጠቀማችሁ በፊት፣ አንድ ጊዜ ብቻ መፈጸም ያለባችሁ ሂደቶች አሉ። እነዚህ የስርዓት መዋቅሮች ሲሆኑ፣ እነዚህን መዋቅሮች በአንድ ኮምፒዩተር ላይ አንድ ጊዜ ብቻ መፈጸም ይኖርባችኋል።

የመጀመሪያው (እና አስፈላጊው) ሂደት በዝርዝር 1.17 ላይ እንደተመለከተው፣ የስም እና የኤመልእክት አድራሻን ማዋቀር ነው፡፡

ዝርዝር 1.17: ለጊት የስም እና የኤመልእክት አድራሻ መስኮችን ማዋቀር።
$ git config --global user.name "ስማችሁ"
$ git config --global user.email ኤመልእክታችሁ.@ምሳሌ.ኮም

በጊት ውቅረት ውስጥ፣ የምትጠቀሟቸው የስም እና የኤመልእክት አድራሻዎች በሙሉ፣ ህዝባዊ ማለት ለመላው ዓለም ግልጽ በምታደርጓቸው ማናቸውም ማከማቻዎች ሁሉ፣ እነሱም ለህዝብ በግልጽ እንደሚታዩ ልታስታውሉ ይገባል።

ሁለተኛው ሂደት ደግሞ የጊት ቅርንጫፍ ነባሪ ስምን ልክ ዝርዝር 1.18 ውስጥ እንደሚታየው አድርጎ ማዋቀር ነው፡፡

ዝርዝር 1.18: ነባሪውን የቅርንጫፍ ስም መበየን።
$ git config --global init.defaultBranch main

ዝርዝር 1.18 የጊት ቅርንጫፍ ስም በነባሪነት ዋና (main) እንዲሆን ያዘጋጃል፡፡ (ከጽሑፉ በላይ ቪዲዮዎቹን ማዘመኑ በጣም አስቸጋሪ ስለሆነ፣ ከዚህ መጽሐፍ ጋር ጎን ለጎን ተያይዘው የሚሄዱት የቪድዮ ትምህርቶች ጌታ‘ን (master) ይጠቀማሉ፤ ይህ የቅርንጫፍ ስምም ጊት ከተፈጠረበት ጊዜ አንስቶ ማለት ከ 15 ዓመት በላይ የጊት የዋና ቅርንጫፍ ነባሪ ስም በመሆን ያገለግል ነበር፤ ይህ በንዲህ እያለ ጽሑፉ ግን በአሁኑ ወቅት ተመራጪ የሆነውን ነባሪ የቅርንጫፍ ስም ይጠቀም ዘንድ በ‘ዋና (main) ተዘምኗል። ለበለጠ መረጃ “የጊት ቅርንጫፍ ነባሪ ስም፣ ከበቂ ተማሩ እና ከሬይልስ ስልጠና ትምህርት ጋር” የሚለውን የለርን ኢነፍ የብሎግ ቅምጥ ተመልከቱ።) ከክፍል 1.3.4 ጀምሮ ስለ ጊት ቅርንጫፎች ከዚህ በበለጠ እንማራለን፡፡

ቀጥሎም በዝርዝር 1.19 ላይ እንደሚታየው፣ ብዙ ጊዜ በተለምዶ አገልግሎት ላይ ለዋለው፣ ለ‘ጨርሰህ ውጣ (checkout) ትእዛዝ፣ አንድ ተለዋጪ-ስም (Alias) ወይም ተመሳሳይ-ቃል እንዲኖረው ለማድረግ አንድ መዋቅር እናደርጋለን፤ ይህ ዝግጅትም በፍላጎት ብቻ የሚደረግ ይሆናል።

ዝርዝር 1.19: ጊት ጨ-ውን (git co) የ‘ጨርሰህ ውጣ (checkout) ተለዋጪ-ስም እንዲሆን ማዘጋጀት።
$ git config --global alias.co checkout

በዚህ ስልጠና ላይ፣ ሁልጊዜ ሁሉጋር እንዲሰራ በማሰብ እኔ ሙሉውን ትእዛዝ እንዳለ ማለት ጨርሰህ ውጣ (git checkout) በማለት እጠቀማለሁ፤ እኔ የግል ስራየን በምሰራበት ጊዜ ግን፣ ሁልጊዜ ባጪሩ ጊት ጨ-ውን (git co) እጠቀማለሁ።

የመጨረሻው መሰናድኦ ደግሞ፣ እንደ ግፋ (push) ወይም ጎትት (pull) ያሉ ትእዛዞችን ለመጠቀም በፈለጋችሁ ቁጥር ጊት መለያችሁን እንዳይጠይቅ መከላከል ነው (ክፍል 1.3.4)፡፡ ይህንን ለማድረግ ያሉ አማራጮች ደግሞ ስርዓተ-ጥገኞች ናቸው (ማለት በእያንዳንዱ ስርዓት ላይ የተወሰኑ ናቸው)። ለስርዓታችሁ ከሊኒክስ ውጪ (የዳመና ቅ.ማ.አ ጨምሮ) የምትጠቀሙ ከሆነ፣ “የጊትሃብ መለያን በጊት ላይ መሸጎጥ” የሚለውን ማብራርያ ተመልከቱ፡፡ ሊኒክስን የምትጠቀሙ ከሆነ (በእርግጥ የዳመና ቅ.ማ.አን ጨምሮ)፣ በዝርዝር 1.20 ላይ እንደሚታየው፣ መሸጎጫው ለምን ያህል ጊዜ መቆየት እንዳለበት የሚወስነውን ትእዛዝ፣ ማለት አንድ የመሸጎጫ ማብቂያ-ጊዜን (Cache Timeout) ማዘጋጀት ትችላላችሁ፡፡

ዝርዝር 1.20: ጊትን ለተወሰነ ጊዜ ያህል መለያውን እንዲያስታውስ ማዘጋጀት።
$ git config --global credential.helper "cache --timeout=86400"

ዝርዝር 1.20 ለ 86,400 ሰከንድ (ማለት ለአንድ ቀን)24 የምትጠቀሙባቸውን ማንኛውንም መለያ ለማስታወስ ጊትን ያዋቅራል፡፡ ለደህንነታችሁ ያን ያክል ጠንቃቃ ከሆናችሁ፣ ጊት መለያችሁን የሚያስታውስበት ጊዜን አጪር ጊዜ በማድረግ፣ ለምሳሌ:- 900 ሰከንድን (ማለት 15 ደቂቃን) ልክ እንደ አንድ ነባሪ ጊዜ አድርጋችሁ መጠቀም ትችላላችሁ፡፡

ለመጀመሪያ ጊዜ ማከማቻውን ማዋቀር

አሁን አንድ አዲስ ማከማቻ በፈጠራችሁ ቁጥር፣ አስፈላጊ ስለሆኑ ሂደቶች የምንወያይበት ጊዜ ላይ ደርሰናል (ማከማቻ፣ ሪፖዚቶሪ እና አንዳንድ ጊዜ ደግሞ ባጪሩ “ሪፖ” በመባልም ይታወቃል)። የመጀመሪያው ሂደትም፣ ወደ ሰላምታ አፕልኬሽኑ ስረ ማውጫ መሄድ እና አንድ አዲስ ማከማቻን ማስጀመር ነው:-

$ cd ~/አካባቢ/selamta    # አጋጣሚ ሁኖ እዛ ላይ ከለላችሁ።
$ git init
Reinitialized existing Git repository in
/home/ubuntu/አካባቢ/selamta/.git/

ልብ በሉ፣ ጊት ማከማቻው ካሁን በፊት ተዘጋጅቶ እንደነበር የሚያሳይ መልእክትን ያስተላልፋል፡፡ ይህ የሆነበት ምክንያት ደግሞ፣ ከሬይልስ 6 ጀምሮ የ‘ሬይልስ አዲስ (rails new) ትእዛዝን ማስኬዱ፣ (ዝርዝር 1.7) አንድ የጊት ማከማቻን በራስሰር የሚያስጀምር ሲሆን፣ ይህ ደግሞ የጊት ጥቅምን በብዙ ቴክኖሎጂወች ላይ፣ በተለያየ ቴክኖሎጂ ውስጥ፣ እንዴት በሰፊው እንደሚጠቀሙበት፣ የሚያሳይ አንድ ዓብይ ምሳሌ ነው፡፡ ይህ በንዲህ እያለ፣ አሁን ባለንበት ሁኔታ፣ የ‘ጊት አስጀምር (git init) ትእዛዝን ማስኬድ አይኖርብንም ማለት ነው፡፡ ይህ ማለት ግን፣ ለሁሉም የጊት ማከማቻ እንደዚሁ ተመሳሳይ ይሆናል ማለት አይደለም፡፡ ስለዚህ ሁሌም፣ የ‘ጊት አስጀምር (git init) ትእዛዝን ማስኬዱ አንድ ጥሩ ልምድ ነው፡፡

ቀጣዩ ሂደት ደግሞ ሁሉንም የፕሮጀክቱን ፋይሎች ወደ ማከማቻው ለመጨመር የ‘ጊት አክል -ኤ (git add -A)25 ትእዛዝን መጠቀም ነው፡-

$ git add -A

ይህ ትእዛዝ .ጊትችላበለው (.gitignore) ከሚባለው ልዩ ፋይል ውስጥ ካለው ጥለት ጋር፣ ይዞታቸው ከሚዛመዱ ፋይሎች በስተቀር፣ ሁሉንም ፋይሎች የአሁኑ/የለንበት ማውጫ ውስጥ ይጨምራል። የ‘ሬይልስ አዲስ (rails new) ትእዛዝ፣ ለአንድ የሬይልስ ፕሮጀክት ተገቢ የሆነ አንድ የ‘.ጊትችላበለው (.gitignore) ፋይልን በራስሰር ያመነጫል፤ ነገር ግን እዛው ላይ ተጨማሪ ጥለቶችን ማከልም ትችላላችሁ።26

በጊት ማከማቻ ውስጥ የተጨመሩት ፋይሎች፣ በመጀመሪያ የመድረክ አካባቢ (Staging Area) በተባለ አንድ ቦታ ላይ ይቀመጣሉ። የ‘ሁኔታዎች (status) ትእዛዝን በመጠቀም፣ የትኞቹ ፋይሎች በመድረኩ አካባቢ እንዳሉ ማየት እንችላለን፡-

$ git status
On branch main

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .browserslistrc
        new file:   .gitignore
        new file:   .ruby-version
        new file:   Gemfile
        new file:   Gemfile.lock
        .
        .
        .

የተደረጉ ለውጦችን ማጽደቅ እንደምንፈልግ ጊትን ለመንገር፣ የ‘አቀላቅል (commit) ትእዛዝን እንጠቀማለን:-

$ git commit -m "ማከማቻ ማስጀመር"
[main (root-commit) df0a62f] ማከማቻ ማስጀመር
.
.
.

የ‘-ኤም (-m) ባንዲራ ለማቀላቀሉ፣ አንድ መልእክትን (Message) እንድንጨምር ያስችለናል፤ የ‘-ኤም (-m) ባንዲራውን ሳናደርግ ከቀረን ጊት የስርዓታችንን ነባሪ የጽሑፍ አርታኢ በራስሰር ይከፍተው እና መልእክታችንን እዚያው ላይ እንድንጽፍ ያደርገናል። (በዚህ ስልጠና ውስጥ ያሉት ምሳሌዎች በሙሉ የ‘-ኤም (-m) ባንዲራን ይጠቅማሉ።)

የጊት ማቀላቀሎች የሰፈር ማለት በምትሰሩበት ኮምፕዩተር ላይ ብቻ የተመዘገቡ መሆናቸውን እና የጊት ማቀላቀሎች በተከናወኑበት ኮምፒዩተር ላይ ብቻ እንደሚመዘገቡ ልብ ሊባል ይገባል፡፡ በክፍል 1.3.4 ውስጥ፣ (የ‘ጊት ግፋ (git push) ትእዛዝን በመጠቀም) ለውጦችን ወደ አንድ ሩቅ ማከማቻ እንዴት እንደምንገፋ እናያለን።

በነገራችን ላይ፣ የ‘ዘግብ (log) ትእዛዝን በመጠቀም፣ የማቀላቀል መልእክት ዘገባወችን በዝርዝር ማየት እንችላለን፡-

$ git log
commit b981e5714e4d4a4f518aeca90270843c178b714e (HEAD -> main)
Author: Michael Hartl <michael@michaelhartl.com>
Date:   Sun Aug 18 17:57:06 2019 +0000

    ማከማቻ ማስጀመር

የማከማቻችሁ ዝጋቤ በጣም ረጅም ከሆነ፣ እሱኑ ለማስቆም ኪው (q) ፊደልን መምታት ሊኖርባችሁ ይችላል። (በጊት ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማር ላይ እንደተብራራውና በማዘዥያ መስመር ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ትምህርት ተማር ላይ በድጋሜ እንደተገለጸው የጊት-ዘግብ (git log) ትእዛዝ፣ የያነሰ (less) በይነጋጽን ይጠቀማል፡፡)

1.3.2 ጊት ምን መልካም ነገር ያደርግላችኋል?

ካሁን በፊት የስሪት መቆጣጠሪያን ተጠቅማችሁ የማታውቁ ከሆነ፣ አሁን ባለንበት ሁኔታ ፋይላችንን በስሪት ቁጥጥር ስር ማዋሉ ያለው ጥቅም በውል ላይገባችሁ ይችላል፤ ስለዚህ አንድ ምሳሌ እንመለከት። በድንገት በጣም አስፈላጊ የሆነውን የ‘አፕ/መቆጣጠሪያዎች (app/controllers/) ማውጫን ሰረዛችሁት እንበል (አረ በለው!!)።

$ ls app/controllers/
application_controller.rb  concerns/
$ rm -rf app/controllers/
$ ls app/controllers/
ls: app/controllers/: No such file or directory

እዚህ ላይ የዩኒክስ የ‘ዘርዝር (ls) ትእዛዝን በ‘አፕ/መቆጣጠሪያዎች (app/controllers/) ማውጫ ውስጥ ያሉትን ፋይሎች በሙሉ ለመዘርዘር እና የ‘አስወግድ (rm) ትእዛዝን ደግሞ፣ ማውጫውን እንዲያስወግደው ተጠቅመናል (ሰንጠረዥ 1.1)። ልክ በማዘዥያ መስመር ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ትምህርት ተማር ላይ እንደተጠቀሰው የ‘-አርኤፍ (-rf) ባንዲራ “በቀጥታ አድርገው (recursive force)” ማለት ሲሆን፤ እያዳንዱን ነገር የመሰረዙን ማረጋገጫ ሳይጠየቅ ሁሉንም ፋይሎች፣ ማውጫዎች እና ንዑስ-ማውጫዎች ከነ አንካቲያቸው እንዲወገዱ ያደርጋል።

ምን እንደተቀየረ ለማየት ሁኔታውን እንመልከት:-

$ git status
On branch main
Changes not staged for commit:
  (use "git add/rm <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        deleted:    app/controllers/application_controller.rb
        deleted:    app/controllers/concerns/.keep

no changes added to commit (use "git add" and/or "git commit -a")

እዚህ ላይ አንድ ፋይል እንደተሰረዘ እናያለን፣ ነገር ግን ለውጦቹ “የመስሪያ ዛፍ working tree” በተባለው ቦታ ላይ ብቻ የተደረጉ ናቸው። ለውጦቹም ገና አልተቀላቀሉም፤ ይህ ማለት አሁን ያሉ ለውጦች እንዲተኩ ለማስገደድ የ‘ጨርሰህውጣ (checkout) ትእዛዝን፣ ከ‘-ኤፍ (-f) ባንዲራ ጋር በመጠቀም፣ ለውጦቹን መቀልበስ እንችላለን ማለት ነው:-

$ git checkout -f
$ git status
On branch main
nothing to commit, working tree clean
$ ls app/controllers/
application_controller.rb  concerns/

የጠፉት ፋይሎች እና ማውጫዎች በሰላም ተመልሰዋል፡፡ ይሄ፣ አንድ ይሄ ነው የማይባል እፎይታን ይሰጣል!! አይደል?

1.3.3 ጊትሃብ

ፕሮጀክታችንን በጊት ስሪት ቁጥጥር ውስጥ አስገብተናል፤ አሁን ጊዜው የጊት ማከማቻወችን27 ለማስተናገድ እና ለማጋራት የተመቻቸ ጣቢያ ወደሆነው፣ ጊትሃብ ኮዳችንን መግፋት ነው። አንድ የጊት ማከማቻ ቅጂን ጊትሃብ ላይ ማስቀመጥ፣ ሁለት ጥቅሞች አሉት:- አንደኛው ጥቅም፣ የተሟላ የኮዳችሁ መጠባበቂያ ሲሆን (ሙሉውን የመቀላቅሎች ታሪኮችን ጨምሮ)፣ ሁለተኛው ደግሞ ወደፊት ለሚደረግ ማንኛውንም አብሮ የመስራት ሂደትን በጣም ቀለል ማድረጉ ናቸው።

ጊትሃብን ለመጠቀም መጀመሩ ምንም የማያስቸግር እና እጅግ ቀላል ነው፤ ቀድሞውኑ የጊትሃብ መለያ ከለላችሁ፣ አንድ የጊትሃብ መላያን ለማግኘት መመዝገብ ብቻ ነው (ምስል 1.23)፡፡ እንዲሁም መለያችሁን ለ2-አይነት ማረጋገጫ (2FA) እንድታዋቅሩት ይመከራል። (በተለይ “የጊትሃብ ማንነታችሁን በጊት ውስጥ ቀይሩ” የሚለውን ይመልከቱ።)

images/figures/github_signup
ምስል 1.23: የጊትሃብ መላያን ለማግኘት መመዝገብ።

አንዴ ከተመዘገባችሁ ወይም ከገባችሁ በኋላ፣ የሲደመር + ምልክት ምናሌው ላይ ጠቅ አድርጉ እና “New repository” የሚለውን ምረጡ (ምስል 1.24)።

images/figures/new_repository
ምስል 1.24: የ “New repository” አማራጪን መምረጥ፡፡

አዲሱ ማከማቻ ገጽ ላይ ባለው ክፍት ቦታ ላይ፣ የማከማቻውን ስም፣ (selamta) እና ከፈለጋችሁ ደግሞ፣ ስለ ማከማቻው ተገቢውን ገለጣ ሙሉና ከዚያም ልክ በምስል 1.25 ላይ እንደሚታየው፣ “Private” የሚለውን አማራጪ፣ ያለ ምንም ቸልተኝነት ምረጡ። የሬይልስ አፕልኬሽኖች ለመላው አለም ማከማቻወች ላይ ግልጽ ለመሆን ደህንነታቸው የተጠበቀ ቢሆንም፣ ብዙ ነገሮች ግን ባልተጠበቀ መንገድ ወደ መጥፎ ሁኔታ ሊያመሩ ይችላሉ (ለምሳሌ:- በድንገት የመለያ ወይም የሚስጥር ቁልፎችን ይፋ ማድረግ የመሳሰሉ …) ስለዚህ እነዚህን ማከማቻወች ከወዲሁ የግል28 ማድረጉ ከውድቀት የሚያድን ብልህነት ይሆናል፡፡

images/figures/acreate_first_repository
ምስል 1.25: በጊትሃብ ላይ አንድ የግል ማከማቻን መፍጠር።

ማከማቻ የሚፈጥረው “Create repository” አዝራርን ጠቅ ካደረጋችሁ በኋላ፣ አንድ ካሁን በፊት የተፈጠረ ማከማቻን ወደ ጊትሃብ የሚጨምር ትእዛዝ፣ ማለት ልክ እንደ ምስል 1.26 ዓይነት ነገር ማየት አለባችሁ። በ HTTPS አማራጪ29 ላይ ጠቅ አድርጉ እና ከዚያ “…or push an existing repository from the command line” ከሚለው ስር ያለውን ትእዛዝ ቅዱ። በዝርዝር 1.21 ላይ የተመለከተውን ትእዛዝ በራስሰር ወደ መለጠፊያ-ሰሌዳ ቋታችሁ የሚቀዳውን፣ ማለት በስክሪኑ በቀኝ በኩል የተመለከተውን፣ አዶ ጠቅ እንድታደርጉ እመክራለሁ፤ ይህ ደግሞ ትእዛዙን፣ በማዘዥያ መስመር መናኸሪያው ላይ እንድትገለብጡት ያስችላችኋል፡፡

images/figures/aadd_repository
ምስል 1.26: አንድ የተፈጠረ ማከማቻን ለማከል የሚያገለግል ኮድ።

በመጨረሻም፣ በዝርዝር 1.21 ውስጥ የተመለከቱትን ትእዛዞች አስኪዱ፡፡ የጊትሃብ መለያችሁን ማስገባት ይኖርባችኋል፤ በዝርዝር 1.20 ላይ በተደረገው ውቅረት ምክንያት፣ በሚቀጥለው ጊዜ ግን (የወሰናችሁት ጊዜ የመሸጎጫ ማብቂያ-ጊዜ ውስጥ እስካለ ድረስ) አያስፈልግም።

ዝርዝር 1.21: ጊትሃብን እንደ አንድ የርቀት መነሻ ማከል እና ማከማቻውን መግፋት።
$ git remote add origin https://github.com/<የመጠቀሚያ ስም>/selamta.git
$ git push -u origin main

ዝርዝር 1.21 ውስጥ ያሉ ትእዛዞችን ስንመለከት፣ መጀመሪያ ጊት፣ ጊትሃብን ለማከማቻ እንደ መነሻ (Origin) አድርጋችሁ መጨመር እንደፈላጋችሁ ይነግረዋል፣ ከዚያ ማከማቻችሁን ወደ ሩቁ መነሻ እንዲገፋ ይነግረዋል። (የ‘-ዩ (-u) ባንዲራ ስለሚሰራው ነገር አትጨነቁ፤ የማወቅ ጉጉቱ ካደረባችሁ ግን፣ “git set upstream” ብላችሁ መጎገል ትችላላችሁ።) ዝርዝር 1.21 ላይ ያለውን <የመጠቀሚያ ስም> በትክክለኛው የመጠቀሚያ ስማችሁ፣ መተካት ይኖርባችኋል። ለምሳሌ እኔ ያስኬድኩት ትእዛዝ ይሄን ይመስላል:-

$ git remote add origin https://github.com/mhartl/selamta.git

ያገኘሁት ውጤት ደግሞ በጊትሃብ ውስጥ ለሰላምታ (selamta) ማከማቻ፣ ፋይልን ማሰሻ፣ የተሟላ የመቀላቀል ታሪክ እና ሌሎች በርካታ ገጸባህሪያትን ያሟላ አንድ ገጽን ነው (ምስል 1.27)፡፡

images/figures/repository_page
ምስል 1.27: አንድ የጊትሃብ የማከማቻ ገጽ።

1.3.4 ቅርንጫፍ፣ ማረም፣ መቀላቀል እና ማዋሃድ

ክፍል 1.3.3 ውስጥ የተዘረዘሩትን ሂደቶች ተከታትላችሁ ከሆነ፣ በምስል 1.28 ላይ እንደተመለከተው፣ ጊትሃብ የማከማቻውን የ‘አንብበኝ.ኤምዲ (README.md) ፋይልን በራስሰር እንደሚያመጣ አስተውላችሁ ይሆናል፡፡ ይህ የአንብበኝ ፋይል በራስሰር የመነጨው፣ ዝርዝር 1.7 ላይ በተደረገው ትእዛዝ አማካኝነት ነው፡፡ በፋይል ቅጥያ ስሙ .ኤምዲ (.md) እንደተመለከተው፣ ወደ ሃ.ጽ.መ.ቋ ለመለወጥ ቀላል ተብሎ በተነደፈው እና በሰወች ዘንድ በቀላሉ ሊነበብ በሚችለው ማርክዳውን (Markdown)30 በተባለው ቋንቋ ተጽፏል፡፡ የማርክዳውንን በቀላሉ በሰወች የመነበብ ችሎታን ጊትሃብ አሁን በትክክል አስመስክሮታል፡፡

ይህ የፕሮጀክቱን አጠቃላይ ገለጣ በራስሰር ይዞ የመጣው፣ የአንበበኝ ፋይል ይዞታው በቂ ነው፣ በእርግጥ የፋይሉን ይዘቶች፣ ከፕሮጄክቱ ገለጣ ጋር የሚተሳሰር ብናደርገው ደግሞ የበለጠ የተሻለ ይሆናል፡፡ ስለሆነም በዚህ ክፍል ውስጥ፣ አንዳንድ የሬይልስ ስልጠናን የሚመለከቱ ይዘቶችን በማከል እናበጀዋለን። በሂደቱም የመጀመሪያውን የቅርንጫፍ፣ የማረም፣ የመቀላቀል እና የማዋሃድ የስራ ሂደት ምሳሌዎችን እንመለከታለን፤ ለዚህም ጊትን እንድትጠቀሙ ምክሬን እለግሳለሁ፡፡31

images/figures/default_readme
ምስል 1.28: የጊትሃብ ነባሪ የሬይልስ የአንብበኝ ፋይል አቅርቦት።

ቅርንጫፍ

ጊት ዋና የሆኑ የፋይሎች ይዘቶችን፣ ፈጽመው ሳይቀይሩ፣ ለውጦችን ማድረግ የምንችልበት፣ ውጤታማ የሆኑ የማከማቻ ቅጅዎች፣ የሆኑ ቅርንጫፎችን (Branches) ለማዘጋጀት፣ እጅግ በጣም ጥሩ የሆነ መሳርያ ነው። ብዙ ጊዜ ዋናው ማከማቻ ዋና (Main) ቅርንጫፍ ነው፤ እናም የ‘ጨርሰህውጣ (checkout) ትእዛዝን ከ‘-ቢ (-b) ባንዲራ ጋር በመጠቀም፣ አንድ አዲስ የርእስ ቅርንጫፍን እንደሚከተለው አድርገን መፍጠር እንችላለን:-

$ git checkout -b አንብቡኝን-ማስተካከል
Switched to a new branch 'አንብቡኝን-ማስተካከል'
$ git branch
  main
* አንብቡኝን-ማስተካከል

እዚህ ላይ ሁለተኛው ማለት የ‘ጊት ቅርንጫፍ (git branch) ትእዛዝ፣ ሁሉንም የሰፈር ቅርንጫፎች ይዘረዝራል (የሰፈር ቅርንጫፎች ተብለውም ይጠራሉ)። የ‘ኮከብ * ምልክቱ ደግሞ ያለንበትን ማለት አሁን የምንሰራበትን ቅርንጫፍ ያመለክታል። ይህን አስተውሉ:- git checkout -b አንብቡኝን-ማስተካከል የሚለው ትእዛዝ አንድ አዲስ አንብቡኝን-ማስተካከል የተባለ ቅርንጫፍን ይፈጥር እና የምንሰራበት ቦታን ወደ ፈጠረው ቅርንጫፍ ይቀይረዋል። ይህንን ለማሳየት ጊት የ አንብቡኝን-ማስተካከል ቅርንጫፍ ፊት ላይ አንድ የኮከብ * ምልክትን ይጠቀማል።

የቅርንጫፍ ጥቅም ወለል ብሎ የሚታየው፣ በአንድ ቅርንጫፍ ውስጥ ያለ አንድ ፕሮጀክት ላይ ብዙ አበልጻጊወች32 ሲሰሩበት ብቻ ነው። ነገር ግን ቅርንጫፎች ለእንኮው የስልጠናው አበልጻጊውም ቢሆን ጠቃሚ ናቸው። በተለይም ዋና ቅርንጫፉ በርእስ ቅርንጫፍ ላይ፣ ከምናደርጋቸው ማናቸውም ለውጦች ሁሉ የተጠበቀ ስለሆነ፣ በርእስ ቅርንጫፉ ላይ ስህተቶችን ብንሰራ፣ ዋና ቅርንጫፉን በማውጣት ርእስ ቅርንጫፉን በመሰረዝ፣ የተፈጸሙ ለውጦችን ሁልጊዜ ማስቀረት እንችላለን። ይሄን እንዴት አድርገን እንደምንተገብር በዚህ ክፍል መጨረሻ ላይ እናያለን፡፡

በነገራችን ላይ፣ ይሄን ለመሰለ አንድ ትንሽ ለውጥ ብየ፣ አንድ አዲስ ቅርንጫፍን ለመፍጠር ብዙም ባልተጨነኩ ነበር (አዲስ ቅርንጫፍ ሳልፈጥር፣ በቀጥታ ዋና ቅርንጫፉ ላይ መስራትን በመረጥኩ ነበረ)፣ ነገር ግን አሁን ባለው ሁኔታ አንድ መልካም የሆነ ልምድን ለማዳበር የሚያግዝ ጥሩ አጋጣሚ ስለሆነ፣ አንድ አዲስ ቅርንጫፍን ፈጥረናል፡፡

እርማት

የርእስ ቅርንጫፉን ከፈጠርን በኋላ፣ በዝርዝር 1.22 እና በምስል 1.29 ላይ እንደሚታየው፣ ብጁ ይዘትን በማከል የአንብበኝ ፋይልን እናርመዋለን።

ዝርዝር 1.22: አዲሱ የአንብበኝ (README) ፋይል፡፡ README.md
# የሩቢ ኦን ሬይልስ ስልጠና

## "ዓለም እንዴት ነሽ!"

ይህ [በማይክል ሀርትል](https://www.michaelhartl.com/) የቀረበ፣
[*የሩቢ ኦን ሬይልስ ስልጠና፡*](https://www.railstutorial.org/)
የመጀመሪያ አፕልኬሽን ነው። ዓለም እንዴት ነሽ!
images/figures/readme
ምስል 1.29: የአንብቡኝ ፋይልን ማረም።

መቀላቀል

የተደረጉ ለውጦችን ለማወቅ፣ የቅርንጫፉን ሁኔታ መመልከት እንችላለን:-

$ git status
On branch modify-README
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

        modified:   README.md

no changes added to commit (use "git add" and/or "git commit -a")

በዚህ ጊዜ፣ ልክ ክፍል 1.3.1.2 ላይ እንደተጠቀምነው፣ የ‘ጊት አክል -ኤ (git add -A) ትእዛዝን መጠቀም እንችል ነበር፤ ነገር ግን ጉዳዩ፣ ሁሉንም ማሻሻያዎች ወደ ነባር ፋይሎች መቀላቀል በሚሆንበት ጊዜ ግን፣ ጊት አቀላቅል (git commit) እንደ አንድ አቋራጪ የ‘-ኤ (-a) ባንዲራን ያቀርባል:-

$ git commit -a -m "አንብበኝ ፋይልን ማሻሻል"
[አንብቡኝን-ማስተካከል 9c6fc10] አንብበኝ ፋይልን ማሻሻል
 1 file changed, 5 insertions(+), 22 deletions(-)

የ‘-ኤ (-a) ባንዲራን ትክክለኛ ባልሆነ መንገድ ላለመጠቀም ሞክሩ፣ ከመጨረሻው መቀላቀል በኋላ፣ ማናቸውንም አዲስ ፋይል ወደ ፕሮጀክቱ ከጨመራችሁ፤ በመጀመርያ የ‘ጊት አክል -ኤ (git add -A) ትእዛዝን በመጠቀም፣ ስለእነሱ ለጊት ማሳዎቅ አለባችሁ።

የመቀላቀል መልእክቱን የአሁን ጊዜ (Present Tense) (እና በቴክኒካዊ አነጋገር፣ በትእዛዛዊ መልኩ (Imperative Mood)) የምንጽፍ መሆኑን ልብ ልትሉ ይገባል። ጊት መቀላቀሎችን ልክ እንደ አንድ ተከታታይ ጥገናዎች (Patches)33 አድርጎ ይቆጥራቸዋል፤ በዚህ አውድ ውስጥ፣ እያንዳንዱ መቀላቀል የሰራውን ሳይሆን የሚሰራውን ነገር ይገልጻል ብንል ትርጉም ይሰጣል። በተጨማሪም ይህ አጠቃቀም፣ ከጊት ትእዛዛት ከመነጩት የመቀላቀል መልእክቶች ጋር ይመሳሰላል። ለተጨማሪ መረጃ ከ በጊት ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማር ላይ የሚገኘውን እና ወደ ጊት ማቀላቀል በሚል አርእስት ስር የቀረበውን መጣጥፍ ተመልከቱ።

ማዋሃድ

የምንፈልገውን ለውጥ አድርግን ጨርሰናል፤ አሁን ውጤቱን ከዋናው ቅርንጫፍ ጋር ለማዋሃድ (Merge) ዝግጁ ነን:-

$ git checkout main
Switched to branch 'main'
$ git merge አንብቡኝን-ማስተካከል
Updating b981e57..015008c
Fast-forward
 README.md | 27 +++++----------------------
 1 file changed, 5 insertions(+), 22 deletions(-)

የጊት ውጽዓት ሁልጊዜ እንደ 34f06b7 የመሰሉ የጊት ውስጣዊ የማከማቻወች ውክልና ጋር የሚዛመዱ ነገሮችን እንደሚያካትት አስተውሉ። እናንት የምታገኟቸው ውጤቶች ከነዚህ የተለዩ ቢሆኑም፣ መሰረታዊ አቀራረባቸው ግን ከላይ ከተመለከተው ውጤት ጋር የሚዛመዱ መሆን አለባቸው፡፡

ለወጦቹን ከዋናው ቅርንጫፍ ጋር ካዋሃዳችሁ በኋላ፣ የርእስ ቅርንጫፉን የ‘ጊት ቅርንጫፍ -ሰ (git branch -d) ትእዛዝን ተጠቅሞ በመሰረዝ ቅርንጫፎቻችሁን ጸዳ ማድረግ ትችላላችሁ:-

$ git branch -d አንብቡኝን-ማስተካከል
Deleted branch አንብቡኝን-ማስተካከል (was 9c6fc10).

ይህ ሂደት በፍላጎት የሚደረግ ነው፤ እንዳውም የርእስ ቅርንጫፉን ዝም ብሎ እንዳለ በመተው የተለመደ አሰራር ነው። በዚህ መንገድም ከዋና ቅርንጫፉ ወደ ርእስ ቅርንጫፉ እየቀያየራችሁ መስራት እና አንድ ተፈላጊ የማቆሚያ ነጥብ ላይ ስትደርሱ የርእስ ቅርንጫፉን ወደ ዋና ቅርንጫፉ ማዋሃድ ትችላላችሁ።

ከላይ እንደተጠቀሰው፣ ርእስ ቅርንጫፉ ላይ የተደረጉ ለውጦችን ለመተው በሚፈለግበት ጊዜ፣ የ‘ጊት ቅርንጫፍ ሰርዝ (git branch -D) ትእዛዝን መጠቀም ይቻላል:-

# ይህ የቀረበው ለምሳሌ ብቻ ነው፤ የተበላሸ ቅርንጫፍን ለመሰረዝ ካልሆነ በስተቀር
# ይህንን እንዳትጠቀሙ።
$ git checkout -b topic-branch
$ <really mess up the branch>
$ git add -A
$ git commit -a -m "በጣም ትልቅ ስህተት ተደረገ"
$ git checkout main
$ git branch -D topic-branch

የ‘-ዲ (-d) ባንዲራ፣ ከ‘-ዲ (-D) ባንዲራ በተለየ መልኩ፣ ለውጦቹ ባይዋሃዱም እንኳን ቅርንጫፉን ይሰርዛል።

መግፋት

የ‘አንብበኝ (README) ፋይሉን ስላዘመነው፣ አሁን ውጤቱን ለማየት ለውጦቹን ወደ ጊትሃብ መግፋት እንችላለን። ካሁን በፊት አንድ ጊዜ ስለገፋን (ክፍል 1.3.3)፣ በብዙ ስርዓቶች ላይ ዋና መነሻ (origin main) የተባለውን ትእዛዝ በመተው የ‘ጊት ግፋ (git push) ትእዛዝን ብቻ ማስኬድ እንችላለን:-

$ git push

ልክ ከዚህ በፊት እንደነበረው የ‘አንብበኝ (README) ፋይል፣ አሁንም ጊትሃብ የተዘመነውን የአንብበኝ ፋይልን በጥሩ ሁኔታ ወደ ሃ.ጽ.መ.ቋ ለውጦታል (ምስል 1.30)፡፡

images/figures/new_readme
ምስል 1.30: የተሻሻለው የአንብበኝ ፋይል በጊትሃብ ላይ።

1.4 ማሰማራት

ምንም እንኳን ይህ የመጀመሪያው ምዕራፍ ቢሆንም፣ እኛ ግን የሬይልስ አፕልኬሽናችንን ወደ ምርት ለማሰማራት ዝግጁ ነን! ልክ በክፍል 1.3 ላይ እንደተዋቀረው የስሪት መቆጣጠሪያ ይህ መዋቅርም በምርጫ መደረግ የሚገባው አይሁን እንጅ፣ ቀደም ብሎ ማሰማራቱ ግን ብዙውን ጊዜ፣ አፕልኬሽኑን በማበልጸግ ኡደት ውስጥ፣ የሚያጋጥም ማንኛውንም የማሰማራት ችግርን ከወዲሁ ለመያዝ ያስችለናል። በተገላቢጦሹ ደግሞ:- በማበልጸጊያ አካባቢ ላይ ብቻ ከተገደበ ከባድ የጉልበት ስራ በኋላ ብቻ፣ አንድ አፕልኬሽንን ማሰማራቱ፣ ብዙውን ጊዜ የማሰማራት ጊዜ ሲመጣ ወደ መጥፎ የማሰማራት ራስ ምታት ያመራል።34

በድሮ ጊዜ የሬይልስ አፕኬሽኖችን ለማሰማራት በጣም አድካሚ ነበረ፣ አሁን ግን የማሰማሪያው ስነ ምህዳር ባለፉት ጥቂት ዓመታት በአስገራሚ ሁኔታ ስለተሻሻለ፣ ብዙ አማራጮችን መጠቀም እንችላለን። ይህም የጋራ አስተናጋጅ ወይም የግል አገልጋዮች ፉዥን ፓሴንጀር (ለአፓቸ እና ለኤንጂኤክስ35 ለተባሉት የድር አገልጋዮች የተዘጋጀ ክፍለክፍልን) የሚያስኬዱ የድር አገልጋይ አገልግሎቶችን ያቀርባሉ። ኢንጂን ያርድን እና ሬይልስ ማሽን የመሳሰሉት የተሟሉ የማሰማርያ አገልግሎቶችን ሲሰጡ ኢንጂን ያርድ ክላውድ ን እና ሃረኩን የመሳሰሉት ደግሞ የዳመና ማሰማርያ አገልግሎቶችን ይሰጣሉ።

የሬይልስ አፕልኬሽንን ለማሰማራት ምርጫየ ሃረኩ ነው፤ እሱ የተዘጋጀውም ሬይልስን እና ሌሎችን የድር አፕልኬሽኖች ለማሰማራት ተብሎ ነው። (እዚህ ላይ እንደምትገምቱት፣ ሃረኩ ራሱ የተጻፈው/የተገነባው በሬይልስ ነው፡፡) የአፕልኬሽናችሁ የኮድ ማመንጫ፤ በጊት ስሪት ቁጥጥር ስር የዋለ እስከሆነ ድረስ፣ ሃረኩ የሬይልስ አፕልኬሽንን የማሰማራት ተግባሩን እጅግ ቀለል ያደርገዋል። (ለዚህ ነው ቀደም ብለን ጊትን ያሰናዳነው፤ ምናልባት ጊትን ካላዋቀራችሁ፣ ክፍል 1.3 ላይ ተመልከቱ።) በተጨማሪ ይህንን ስልጠና ጨምሮ፣ ሌላ ብዙ ነገሮችን ለማስተናገድ፣ በሃረኩ የቀረበው የነጻ አገልግሎት ከበቂ በላይ ነው።

የተቀረው የዚህ ክፍል የሚያተኩረው፣ የመጀመሪያ አፕልኬሽናችንን ሃረኩ ላይ እንዴት አድርገን ማሰማራት እንደምንችል መመልከት ላይ የተመደበ ይሆናል። የተወሰኑት ሀሳቦች በእርግጥ የላቁ ናቸው፣ ስለሆኑም ሁሉም ነገር በዝርዝር ካልገባችሁ ልትጨነቁ አይገባም። አንድ ማወቅ የሚያስፈልጋችሁ ነገር ቢኖር፣ በሂደቱ ማብቂያ ላይ አፕልኬሽናችንን በቀጥታ ድር ላይ ማሰማራታችንን ብቻ ነው።

1.4.1 ሃረኩን ማዋቀር እና ማሰማራት

ሃረኩ የሚጠቀመው ፖስትግሬስተ.መ.ቋ (PostgreSQL) የተባለ ውሂበጎታን ነው፣ (“ፖስት-ግረስ-ስ-ኴል ተብሎ ሲነበብ” አንዳንድ ጊዜ፣ ባጪሩ “ፖስትግሬስ” ተብሎም ይነበባል።) ይህ ማለት ሬይልስ ከፓስትግሬስ ጋር እንዲነጋገር ከፈለግን ፒጅ (pg) የተባለውን እንቁ በምርት አካባቢ ላይ መጨመር ይኖርብናል:-

group :production do
  gem 'pg', '1.2.3'
end

እንዲሁም ቀ.መ.ቋ (SQLite) በሃረኩ ላይ ተቀባይነት ስለለለው፣ በዝርዝር 1.9 ውስጥ የሚገኘው የ‘ስኴልላይት3 (sqlite3) እንቁ፣ በምርት አካባቢ ውስጥ አለመካተቱን አረጋግጡ፡፡36

group :development, :test do
  gem 'sqlite3', '1.4.2'
  gem 'byebug',  '11.1.3', platforms: [:mri, :mingw, :x64_mingw]
end

የተገኘው የ‘እንቁፋይል (Gemfile) ውጤት በዝርዝር 1.23 ውስጥ ይታያል፡፡

ጠቃሚ ማሳሰቢያ፡- በዚህ መጽሐፍ ውስጥ ላሉት እንቁዎች ሁሉ፣ ከዚህ በታች ከተዘረዘሩት እንቁዎች ይልቅ፣ በ gemfiles-6th-ed.railstutorial.org ላይ የተዘረዘሩትን እንቁዎች መጠቀም ይኖርባችኋል (ምንም እንኳን ተመሳሳይ እንቁዎች ቢመስሉም)፡፡

ዝርዝር 1.23: የ‘እንቁፋይል (Gemfile) ከተስተካከሉና ከተጨመሩ እንቁወች ጋር።
source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

gem 'rails',      '6.1.4.1'
gem 'puma',       '5.3.1'
gem 'sass-rails', '6.0.0'
gem 'webpacker',  '5.4.0'
gem 'turbolinks', '5.2.1'
gem 'jbuilder',   '2.10.0'
gem 'bootsnap',   '1.7.2', require: false

group :development, :test do
  gem 'sqlite3', '1.4.2'
  gem 'byebug',  '11.1.3', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'web-console',           '4.1.0'
  gem 'listen',                '3.4.1'
  gem 'spring',                '2.1.1'
  gem 'spring-watcher-listen', '2.0.1'
end

group :test do
  gem 'capybara',           '3.35.3'
  gem 'selenium-webdriver', '3.142.7'
  gem 'webdrivers',         '4.6.0'
end

group :production do
  gem 'pg', '1.2.3'
end

# ዊንዶውስ የዞን መረጃ ፋይሎችን አያካትትም፤ ስለሆነም፣ በአንድ የቤተኛ የዊንዶውስ ስርዓት
# ላይ፣ ሬይንስን የምታካሂዱ ከሆነ፣ የሚከተለው እንቁ ላይ ያለውን የአስተያየት ምልክት ማስወገድ
# ይኖርባችኋል:-
# gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]

ልክ ዝርዝር 1.24 ላይ እንደሚታየው፣ ስርዓቱን ምርት ላይ እንዲሰማራ ለማዘጋጀት፣ ማናቸውንም የምርት እንቁ በሰፈር ላይ እንዳይጫን ለመከላከል፣ መጀመሪያ አንድ ልዩ የ‘ጠቅል አዋቅር (bundle config) ትእዛዝን እናስኬዳለን፤ (በዚህ ሁኔታ ላይ የማይካተተው የ‘ፒጅ (pg እንቁ) ነው)።

ዝርዝር 1.24: ያለምንም የምርት እንቁ መጠቅለል።
$ bundle _2.2.17_ config set --local without 'production'
$ bundle _2.2.17_ install

ዝርዝር 1.23 ውስጥ ያለው ብቸኛው እንቁ፣ በምርት አካባቢ ላይ ብቻ የተወሰነ ስለሆነ፣ በአሁኑ ጊዜ በዝርዝር 1.24 ውስጥ ያለው ትእዛዝ ምንም ተጨማሪ የሰፈር እንቁወችን አይጪንም፤ ነገር ግን የፒጂ እንቁ (pg gem) መረጃን ወደ እንቁ.ቆልፍ (Gemfile.lock) ለማስገባት ማዘመን ያስፈልጋል፡፡ የተገኘውን ለውጥ እንደተመለከተው አድርገን ማቀላቀል እንችላለን:-

$ git commit -a -m "የጀምፋይልን ለሃረኩ ማዘመን"

ከዚህ በመቀጠል፣ አንድ አዲስ የሃረኩ መለያን መፍጠር እና ማዋቀር ይኖርብናል። የመጀመሪያው ሂደት የሃረኩ መለያን ለማግኘት መመዝገብ ይሆናል። (አንድ የቤተኛ ስርዓትን የምትጠቀሙ ከሆነ፣ ባለብዙ-አይነት ማረጋገጫን (ባ.አ.ማ (MFA)) እንድታዋቅሩ ይመክራል፣ ነገር ግን በማዘዥያ መስመር መግባትን አስቸጋሪ ወይም የማይቻል ስለሚያደርገው ይህ ለቅ.ማ.አ አይመከርም።)

ቀጣዩ ሂደት ደግሞ፣ ስርዓታችሁ ቀድሞውኑ የሃረኩ የማዘዥያ መስመር በይነገጽን እንደተጫነ እና እንዳልተጫነ በሚከተለው ትእዛዝ ማረጋገጥ ይሆናል፡-

$ heroku --version    # ይህ የሚሰራው ሃረኩ ከተጫነ ብቻ ነው።
heroku: command not found

ይህ ትእዛዝ፣ የ‘ሃረኩ (heroku) የማዘዥያ መስመር በይነገጽ (ት.መ.በ. (CLI))37 በስርዓቱ ውስጥ ካለ፣ አሁን ያለውን የስሪት ቁጥር ያሳያል፤ ነገር ግን በአብዛኛዎቹ ስርዓቶች ላይ የሃረኩ (ት.መ.በን) መጫን ያስፈልጋል።38 በተለይ የዳመና ቅ.ማ.አን እየተጠቀማችሁ ከሆነ፣ በዝርዝር 1.25 ውስጥ የተገለጸውን ትእዛዝ በመጠቀም ሃረኩን መጫን ትችላላችሁ፡፡ ማሳሳቢያ:- ለደመና ቅ.ማ.አ አካባቢው ተጨማሪ ቦታን ለማከል፣ መጀመሪያ በዝርዝር 1.5 ውስጥ ያለውን ትእዛዝ ማስኬድ ሊኖርባችሁ ይችል ይሆናል።

ዝርዝር 1.25: በደመና ቅ.ማ.አ ላይ ሃረኩን መጫኛ ትእዛዝ።
$ source <(curl -sL https://cdn.learnenough.com/heroku_install)

ዝርዝር 1.25 ውስጥ ያለውን ትእዛዝ ካስኬዳችሁ በኋላ፣ አሁን ያለውን የስሪት ቁጥር በመመልከት መጫኑን ማረጋገጥ መቻል አለባችሁ (እናንተ ስርዓት ላይ የምታዩት የስሪት ቁጥር እዚህ ላይ ከምታዩት የተለየ ሊሆን ይችላል):-

$ heroku --version
heroku/7.54.1 linux-x64 node-v12.21.0

አንዴ የሃረኩ የማዘዥያ መስመር በይነገጽ መጫኑን ካረጋገጣችሁ በኋላ፣ የ‘ሃረኩ (heroku) ትእዛዝን በመጠቀም ወደ ሃረኩ ጣቢያ ለመግባት፣ የሃረኩ መለያችሁን እና የኤመልእክት አድራሻችሁን ተጠቀሙ። (በ‘ይነተገናኝ (--interactive) የተባለው አማራጪ፣ የ‘ሃረኩ (heroku) ትእዛዝን፣ የድር ማሰሻውን ለመክፈት እንዳይሞክር ይከላከላል):-

$ heroku login --interactive

በመጨረሻም፣ አፕልኬሽኑ ሃረኩ አገልጋይ ላይ እንዲኖር፣ በሃረኩ አገልጋዮች ላይ አንድ ቦታ ለመፍጠር፣ የ‘ሃረኩ ፍጠር (heroku create) ትእዛዝን ተጠቀሙ (ዝርዝር 1.26)።

ዝርዝር 1.26: በሃረኩ ላይ አንድ አዲስ አፕልኬሽንን መፍጠር።
$ heroku create
Creating app... done, ⬢ blooming-bayou-75897
https://blooming-bayou-75897.herokuapp.com/ |
https://git.heroku.com/blooming-bayou-75897.git

የ‘ሃረኩ (heroku) ትእዛዝ ወድያውኑ ለማየት ብቁ የሆነ፣ አንድ አዲስ ንዑስ-ግዝአትን ለአፕልኬሽናችን ይፈጥራል። አሁን ግን በዛ አድራሻ ላይ ምንም የሚታይ ነገር የለም፤ ስለዚህ በማሰማራት ስራ ላይ እንጠመድ።

ሃረኩ ላይ ለማሰማራት የመጀመሪያው ሂደት

የመጀመሪያው ሂደት፡ ዋና ቅርንጫፉን፣ ወደ ሃረኩ ለመግፋት ጊትን መጠቀም ነው:-

$ git push heroku main

(እዚህ ላይ አንዳንድ የማስጠንቀቂያ መልእክቶችን ልታዩ ትችላላችሁ፤ እነዚህንም ለአሁኑ ችላ ልትሏቸው ይገባል። በክፍል 7.5 ውስጥ በበለጠ እንነጋገርባቸዋለን። ስለ አንድ ያልተደገፈ ስርዓት የተሰጠ፣ አንድ የስህተት መልእክት ካጋጠማችሁ፣ የሃረኩ የሊኒክስ ስርዓትን እንቁ.ቆልፍ (Gemfile.lock) ላይ ለማከል በማዘዥያ መስመሩ ላይ bundle 2.2.17 lock –add-platform x8664-linux ‘ን ለማስሄድ ሞክሩ። በዚህ ሁኔታ ላይ፣ ሌላ የጊት መቀላቀል እና ወደ ሃረኩ እንደገና ለመግፋት ጊት ዋናን ለሃረኩ ግፋ‘ን (git push heroku main) መጠቀም ያስፈልጋችኋል።)

ሃረኩ ላይ ለማሰማራት ሁለተኛው ሂደት

ሁለተኛ ሂደት የሚባል ነገር የለንም፤ በቃ ጨርሰናል! አዲስ የተሰማራውን አፕልኬሽን መመልከት39 ከፈለጋችሁ ሃረኩ ፍጠር (heroku create) ብላችሁ ስታስኬዱ (ዝርዝር 1.26) ያገኛችሁትን አድራሻ መጎብኘት ትችላላችሁ። ምናልባት የድር ዓ.አ.ሃ.አችሁን እንደገና ለማወቅ ከፈለጋችሁ፣ በዝርዝር 1.27 ላይ እንደሚታየው፣ የ‘ሃረኩ የአፕ መረጃ (heroku apps:info) ትእዛዝን ማስኬድ ትችላላችሁ፡፡

ዝርዝር 1.27: ስለ ሃረኩ አፕልኬሽን የድር ዓ.አ.ሃ.አን ጨምሮ አጠቃላይ መረጃን ማግኘት።
$ heroku apps:info
=== mysterious-atoll-47182
.
.
.
Web URL:        https://mysterious-atoll-47182.herokuapp.com/

ዝርዝር 1.27 ላይ ያለውን ዓ.አ.ሃ.አ መጎብኘት፣ በምስል 1.31 ላይ የተመለከተውን ውጤት ያስገኛል፡፡ ገጹ ከምስል 1.20 ጋር ፍጹም አንድ ዓይነት ነው፤ ነገር ግን አሁን በአንድ የምርት አካባቢ ላይ በቀጥታ ድር40 ላይ በመካሄድ ላይ ነው። (አንድ herokuapp.com የሚል ቅጥል ስም ያለው የጣቢያ አድራሻ በመጠቀም ጣቢያችሁን ከማስተናገድ ይልቅ፣ አንድ ብጁ ግዝአትን በመጠቀም ጣቢያችሁን በሃረኩ ጣቢያ ላይ እንዴት ማስተናገድ እንደምትችሉ ለማወቅ፣ ማለት ስለዚህ ጉዳይ የነጻ ትምህርት ለማግኘት፣ በብጁ ግዝአት ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማርን ጎብኙ፡፡)

images/figures/heroku_app_hello_world
ምስል 1.31: የመጀመሪያው የሬይልስ ስልጠና አፕልኬሽን በሃረኩ ላይ እየሄደ።

መልመጃዎች

የሬይልስ ስልጠናን ለገዙ ሰወች በሙሉ የሁሉም የመልመጃ መልሶች እዚህ ላይ ይገኛሉ።

የሌሎች ሰዎች መልሶችን ለማየት እና የራሳችሁን ደግሞ ለመመዝገብ፣ በሬይልስ ስልጠና ወይም ሁሉንም በበቂ ተማር መድረሻ ጥቅል ላይ ተመዝገቡ፡፡

  1. ልክ የክፍል 1.2.4.1 አይነት ለውጥን በማድረግ፣ የምርት አፕልኬሽናችሁ “hola, mundo!” ብሎ እንዲያሳይ አድርጉ።
  2. ልክ ክፍል 1.2.4.1 ላይ እንደተደረገው፣ የስር ማዘዋወሪያው የ‘ሰላምሁኝ (selamhugn) የተግባር ውጤትን፣ በመነሻ ገጹ ላይ እንደሚያሳይ አድርጉ። ጊት ወደሃረኩ-ግፋ (git push heroku) የተባለው ትእዛዝ ላይ ዋና (main) የሚለውን ምርጫ እንደማታስገቡ ሁሉ፣ አፕልኬሽናችሁን በምታሰማሩበት ጊዜ፣ የጊት ማዘዥያ ላይም ዋና (main) የሚለውን ምርጫ መተው እንደምትችሉ አረጋግጡ።

1.4.2 የሃረኩ ትእዛዛት

ብዙ የሃረኩ ትእዛዛት አሉ (በክፍል 1.4.1 መጨረሻ ላይ በዝርዝር 1.27 ውስጥ ያለውን ጨምሮ)፤ እናም እዚህ መጽሐፍ ላይ የምንመለከተው፣ እጅግ በጣም የተወሰኑትን ብቻ ይሆናል። እስቲ የአፕልኬሽናችንን ስም እንደገና ለመሰየም፣ ከትእዛዞቹ መካከል አንዱን ትእዛዝ ለመመልከት አንድ ደቂቃ እንውሰድ:-

$ heroku rename rails-tutorial-selamta

ይህንን ስም ለመጠቀም እንዳትሞክሩ፣ እኔ ወስጄዋለሁ! በሃረኩ የተሰጣችሁ አድራሻ በቂ ስለሆነ፣ በርግጥ፣ በዚህ ጉዳይ ላይ አሁን ብዙ የምትጨነቁ አይመስለኝም። አፕልኬሽናችሁን እንደገና ለመበየን ከፈለጋችሁ ግን እንደሚከተለው ያሉ በዘፈቀደ ወይም ግልጽ ያልሆነ ንዑስ-ግዝአትን በመጠቀም ደህንነቱ የተጠበቀ፣ አንድ አዲስ ስምን ማዘጋጀት ትችላላችሁ:-

hwpcbmze.herokuapp.com
seyjhflo.herokuapp.com
jhyicevg.herokuapp.com

ልክ እንደዚህ ባለ፣ ለመገመት አስቸጋሪ የሆነ አንድ የንዑስ-ግዝአትን ተጠቅመው ሰወች ጣቢያችሁን ሊጎበኙ የሚችሉት፣ እናንተ ንዑስ-ግዝአቱን/አድራሻውን ከሰጣችኋቸው ብቻ ነው።41 (በነገራችን ላይ፣ እንደ አንድ ውብ የሩቢ ጥብቅብቅ ያለ የኮድ አጻጻፍ ቅድመ-እይታ ይሆነን ዘንድ፣ ከዚህ በላይ ያሉትን ንዑስ-ግዝአቶች ለማመንጨት የተጠቀምኩበት የሩቢ ኮድን ጀባ ልበላችሁ:-

('a'..'z').to_a.shuffle[0..7].join

ይህንን ትንሽ ኮድ ምዕራፍ 4 ላይ እንመለከታዋለን።)42

ሃረኩ ንዑስ-ግዝአቶችን ከመደገፍ በተጨማሪ፣ ብጁ ግዝአቶችንም ይደግፋል። (በርግጥም የሩቢ ኦን ሬይልስ ስልጠና ጣቢያ፣ በሃረኩ አገልጋይ ላይ ይኖራል። ይህንን መጽሐፍ መስመር ላይ እያነበባችሁ ከሆነ፣ አሁን በሃረኩ የተስተናገደ ጣቢያን እየተመለከታችሁ ነው ማለት ነው።) ስለ ብጁ ግዝአቶች እና ስለ ተለያዩ አርእስተ ጉዳዮች በይበልጥ ለመረዳትየሃረኩ ሰነድን መመልከት ትችላላችሁ።

መልመጃዎች

የሬይልስ ስልጠናን ለገዙ ሰወች በሙሉ የሁሉም የመልመጃ መልሶች እዚህ ላይ ይገኛሉ።

የሌሎች ሰዎች መልሶችን ለማየት እና የራሳችሁን ደግሞ ለመመዝገብ፣ በሬይልስ ስልጠና ወይም ሁሉንም በበቂ ተማር መድረሻ ጥቅል ላይ ተመዝገቡ፡፡

  1. የሃረኩ ትእዛዛትን በዝርዝር ለማየት፣ የ‘ሃረኩ እርዳ (heroku help) ትእዛዝን አስኪዱ (የ‘ሃረኩ እርዳ (heroku help) ውጽዓት በመናኸሪያ መስኮታችሁ ውስጥ የማይመጣጠን ከሆነ፣ ወደ ላይ አሸብልሉ፣ ወይም heroku help | less ‘ን ወደ ያነሰ (less) ትእዛዝ አስተላላፊ (Pipe) ለማሳለፍ heroku help | less ‘ን ተጠቀሙ)፡፡ የአንድ አፕልኬሽን ዘገባን ለማሳየት የሚጠቅመው ትእዛዝ ምንድነው?
  2. ከላይ በተሰጠው መልመጃ ውስጥ፣ በአፕልኬሽናችሁ ውስጥ ያለውን ሁኔታ ለማወቅ፣ አፕልኬሽናችሁን ለመመርመር የሚጠቅመውን ትእዛዝ ፈልጋችሁ በማግኘት፣ የአፕልኬሽናችሁን ሁኔታ አረጋግጡ። በጣም ቅርብ በሆነ ጊዜ ውስጥ የተከሰተው ነገር ምንድነው? (ይህ ትእዛዝ ብዙውን ጊዜ አፕልኬሽኑ በምርት ላይ በሚሆንበት ወቅት አፕልኬሽኑን ለማረም ያገለግላል።)

1.5 ማጠቃለያ

በዚህ ምዕራፍ ውስጥ፣ ብዙ መንገድ ተጉዘን የሚከተሉትን አድርገናል፡- ሶፍትዌሮችን መጫን፣ የማበልጸጊያ አካባቢን ማዋቀር፣ የስሪት ቁጥጥርን መጠቀም እና ማሰማራት ነበሩ። በሚቀጥለው ምዕራፍ ውስጥ፣ አንድ በውሂበጎታ-የተደገፈ ጨዋታ የተባለ አፕልኬሽንን ለመስራት፣ የምዕራፍ 1 መሰረት ላይ ግንባታችንን እንቀጥላለን፤ ይህም ሬይልስ መስራት የሚችለውን ነገር እንድንቋደስ፣ ለመጀመርያ ጊዜ ሃቀኛ መዓዛውን ያቀምሰናል።

በዚህ ጊዜ፣ በዚህ የስልጠና ክፍለ ጊዜ፣ እስከአሁን ያደረጋችሁትን ነገር፣ ለሌሎች ለማካፈል ከፈለጋችሁ፣ የትዊተር ወይም የፌስቡክ ወቅታዊ ሁኔታ ማበሰሪያ ላይ፣ ልክ እንደዚህ ዓይነት መልእክት፣ መላክ እንደምትችሉ ላስታውሳችሁ እወዳለሁ፡-

በተጨማሪም የሬይስ ስልጠና የኤመልእክት መቀባበያ ማዕከል43 ላይ እንድትመዘገቡ አሳስባለሁ፣ ይህም የሩቢ ኦንሬይልስ ስልጠናን በተመለከተ የሚደረጉ መሻሻሎችን (እና ልዩ የኩፖን ኮዶችን) በቀደምትነት ማገኘታችሁን ያረጋግጣል።

1.5.1 በዚህ ምዕራፍ ውስጥ የተማርናቸው ነገሮች:-

  • ሩቢ ኦን ሬይልስ በሩቢ ፕሮግራም የተጻፈ አንድ የድር ማበልጸጊያ መዋቅር እንደሆነ፣
  • ቀደም ብሎ በተስተካከለ አንድ የዳመና አካባቢ ላይ፣ ሬይልስን መጫን፣ አንድ አፕልኬሽንን ማመንጨት እና የመነጩትን ፋይሎች ማረሙ ቀላል እንደሆነ፣
  • ሬይልስ፣ ሬይልስ (rails) ከተባለ አንድ የማዘዥያ መስመር ትእዛዝ ጋር እንደሚመጣ እና ይህም አዲስ አፕልኬሽንን ለማመንጨት (ሬይልስ አዲስ‘ን (rails new)) እና የሰፈር አገልጋይን (ሬይልስ አገልጋይ‘ን (rails server)) ለማስኬድ እንደሚችል፣
  • አንድ “ዓለም እንዴት ነሽ!” የተባለ አፕልኬሽንን ለመፍጠር አንድ የመቆጣጠሪያ ተግባርን በመጨመር የስር ማዘዋወሪያውን እንደቀየርነው፣
  • የአፕልኬሽናችንን ኮድ ማመንጫ በጊት ስሪት ቁጥጥር ስር በማስቀመጥ እና ኮዱን ወደ ጊትሃብ የግል ማከማቻ በመግፋት ከሌሎች ጋር ተባብረን መስራትን እንደፈቀድን እና የውሂብ መጥፋትን እንደተከላከልን፤ እና በተጨማሪም
  • ሃረኩን በመጠቀም አፕልኬሽናችንን በአንድ የምርት አካባቢ ላይ እንዳሰማራን ተምረናል።

1.6 በዚህ መጽሐፍ ውስጥ የሚያገለግሉ ደንቦች

በዚህ መጽሐፍ ላይ ያሉ ደንቦች፣ በብዛት ያለምንም ማብራርያ ራሳቸውን የሚገልጹ ናቸው። ምናልባት በደንብ ግልጽ ላይሆኑ ይችላሉ ብለን የገመትናቸውን አንዳንድ ነገሮች ግን በዚህ ክፍል ውስጥ አብረን እንመለከታለን፡፡

በዚህ መጽሐፍ ውስጥ ያሉ ምሳሌዎች፣ ብዙውን ጊዜ የማዘዥያ መስመር ትእዛዛትን ይጠቀማሉ፤ ይህንንም ቀላል ለማድረግ፣ ሁሉም የማዘዥያ መስመር ምሳሌዎች አንድ የዩኒክስ ዓይነት የማዘዥያ መስመር ግባትን (አንድ የዶላር ምልክትን) ይጠቀማሉ። አጠቃቀሙም እንደሚከተለው ይሆናል:-

$ echo "ዓለም እንዴት ነሽ"
ዓለም እንዴት ነሽ

ሬይልስ በማዘዥያ መስመር ላይ ሊሄዱ ከሚችሉ ብዙ ትእዛዞች ጋር ይመጣል፡፡ ለምሳሌ:- በክፍል 1.2.2 ውስጥ፣ አንድ የሰፈር ማበልጸጊያ አገልጋይን ለመጠቀም፣ የ‘ሬይልስ አገልጋይ (rails server) ትእዛዝን እንደሚከተለው አድርገን እናስኬዳለን:-

$ rails server

የሬይልስ ስልጠና፡ ለአድራሻ/ለማውጫ መለያያ፣ የዩኒክስን ልምዳዊ አሰራር የሆነውን፣ የ‘ህዝባር / ምልክትን ይጠቀማል። ለምሳሌ:- የማሳያ አፕልኬሽኑ የ‘ምርት.አርቢ (production.rb) የውቅረት ፋይል እንደሚከተለው ይታያል፡-

config/environments/production.rb

የዚህ የፋይል መንገዱ (File Path)፣ ከአፕልኬሽኑ ስር ማውጫ ጋር የተዛመደ እንደሆነ ልትገነዘቡ ይገባል፤ ይህም እንደየ ስርዓቱ ይለያያል፤ በዳመና ቅ.ማ.አ (ክፍል 1.1.1) ላይ ይህንን ይመስላል፡-

/home/ubuntu/አካባቢ/masaya_app/

ስለሆነም ወደ ምርት.አርቢ (production.rb) የሚወስደው ሙሉው መንገድ ይህን ይመስላል ማለት ነው:-

/home/ubuntu/አካባቢ/masaya_app/config/environments/production.rb

ብዙውን ጊዜ የአፕልኬሽኑን መንገድ ትቸ፣ ባጪሩ config/environments/production.rb ብየ እጽፈዋለሁ።

የሬይልስ ስልጠና ብዙውን ጊዜ ከተለያዩ ፕሮግራሞች የተገኙ ውጽዓቶችን ያሳያል፡፡ በተለያዩ ስርዓተ ክወናዎች መካከል፣ ስፍር ቁጥር በሌላቸው ጥቃቅን ልዩነቶች ምክንያት፣ የምታዩት ውጤት ከዚህ ስልጠና ውጽዓት ውስጥ ከሚታዩት ጋር ሁልጊዜ ላይመሳሰል ይችላል፤ ይሁን እንጅ ይህ ሁኔታ ግን ሊያስጨንቃችሁ አይገባም፡፡ በተጨማሪም፣ አንዳንድ ትእዛዞች፣ በስርዓተ ክወናችሁ ላይ በመመርኮዝ የስህተት መልእክቶችን ሊያሳዩ ይችላሉ፤ በዚህ ስልጠና ውስጥ ያሉትን ስህተቶች ሁሉ ለማስመዝገብ፣ የሲሲፌን ተግባርን ለመተግበር ከመሞከር ይልቅ፣ “የስህተት መልእክቱን ጎግል” በማድረግ፣ በይነመረብ ላይ መፍትሔውን እንድትፈልጉ ማበረታታቱን የተሸለ ሆኖ አግኝቼዋለሁ፤ ይህ አሰራር ደግሞ ማንኛውንም ሶፍትዌር የማበልጸግ ስራ ላይ በጣም ይረዳችኋል (ሳጥን 1.2)። ስልጠናውን በምትከታተሉበት ጊዜ፣ ማናቸውም ዓይነት ችግር ካጋጠማችሁ፣ በሬይልስ ስልጠና ርዳታ ገጽ44 ላይ የተዘረዘሩትን ምንጮች እንድትጠቀሙ ከወዲሁ እመክራችኋለሁ።

የሬይልስ ስልጠና የሬይልስ አፕልኬሽኖችን የመፈተን ስራን የሚሸፍን ስለሆነ፣ ብዙውን ጊዜ፣ አንድ የተወሰነ ትንሽ ኮድ፣ የፈተና ስብስቡን እንዲሳካ እና እንዲያልፍ (ይህ በአረንጓዴ ቀለም ተመልክቷል)፤ ወይም እንዳይሳካ እና እንዲወድቅ (ይህ በቀይ ቀለም ተመልክቷል)፤ የሚያደርገው መሆኑን ማወቁ ጠቃሚ ነው፡፡ የበለጠ ግልጽ ለማድረግ፣ የፈተና ውድቀትን የሚያስከትለው ኮድ በ ቀይይታያል፣ የፈተና ማለፍን የሚያስከትለው ኮድ ደግሞ በ አረንጓዴይገለጻል።

በመጨረሻም፣ የሩቢ ኦንሬይልስ ስልጠና ብዙ የኮድ ምሳሌወችን መረዳትን ቀላል ለማድረግ የታቀዱ ሁለት ደንቦችን ስራ ላይ አውሏል። የመጀመሪያው ደንብ፣ አንዳንድ የኮድ ዝርዝሮች ከዚህ በታች እንደሚታየው፣ አንድ ወይም ከዚያ በላይ የደመቁ መስመሮችን ያካትታሉ:-

class Teteqami < ApplicationRecord
  validates :sim,  presence: true
  validates :emelekt, presence: true
end

እንደነዚህ ያሉት የደመቁ መስመሮች፣ በተጠቀሰው ምሳሌ ውስጥ በጣም አስፈላጊ የሆነውን አዲስ ኮድ ያመለክታሉ፤ እና ብዙውን ጊዜ (ምንም እንኳን ሁልጊዜ ባይሆኑም)፣ አሁን ባለው የኮድ ዝርዝር እና በቀደሙት ዝርዝሮች መካከል ያለውን ልዩነት ያመለክታሉ፡፡ ሁለተኛው ደንብ፣ አብዛኞቹ የመጽሐፉ የኮድ ዝርዝሮችን ግልጽ እና ቀላል ለማድረግ ሲባል፣ እንደሚታየው ዓይነት ቀጥ ያሉ ነጠብጣቦችን ያካትታሉ:-

class Teteqami < ApplicationRecord
  .
  .
  .
  has_secure_password
end

እነዚህ የነጥብ ምልክቶች፣ የተተወውን ኮድ ያመለክታሉ፤ እናም መቀዳት የለባቸውም።

በተርጉዋሚው የታከሉ አዲስ ደንቦች፣ ከዚህ በታች ሊካተቱ ይችላሉ።

  የቪድዮ ቱቶርያሉን ተመልከቱ
1. የሃይለ ጽሑፍ መንቀሻ ቋንቋ (ሃ.ጽ.መ.ቋ) (Hypertext Markup Language HTML)
2. የወራጅ የሉህ ቅጥ (ወ.ሉ.ቅ) (Cascading Style Sheets CSS)
3. የተዋቀረ የመጠይቅ ቋንቋ (ተ.መ.ቋ) (Structured Query Language SQL)
4. የተቀሩትን የ በቂ ተማርን የቅደም ተከተል ስልጠናዎችን ማከሉ በእርግጥ፣ ለዚህ ስልጠና በጣም ጥሩ የሆነ ቅድመ ዝግጅትን ያበረክታል፤ ይሁን እንጅ ይህንን ስልጠና ለመጀመር ከቸኮላችሁ ግን፣ የማዘዥያ መስመርን እና የሩቢ ትምህርቱን ብቻ ብትወስዱ ያለምንም ጥርጥር ይህንን ስልጠና ያዛልቛችኋል የሚል እምነት አለኝ። በተለይም በሩቢ ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማር በሩቢ ላይ የተመሰረተ፣ ለሬይልስ ጥሩ ዝግጅት ሆኖ የሚያገለግለውን፣ ሲኔትራ የተባለ ቤተኮድን (Library) በመጠቀም ቀላል የድር አፕልኬሽን መስራት ላይ የተመረኮዘ አንድ ምዕራፍ አለው፡፡ ይህ ስልጠና ከከበዳችሁ፣ እኔ በሩቢ ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ተማርን እና ይህንን ስልጠና ለመወሰድ፣ በቅድሚያ የሚያስፈልጉትን ስልጠናወች እንድትወስዱ እና ከዚያ ወደዚህ እንድትመለሱ ሃሳቤን አቀርባለሁ።
5. እንደ አ.ድ.አ ያሉ ጣቢያዎች፣ ባላቸው ይሄ ነው የማይባል እድገት ምክንያት፣ በየጊዜው የምታዩዋቸው መረጃወች ሊለያዩ ይችላሉ፣ ማንኛውንም ልዩነት/አለመጣጣም ለማስተካከል ቴክኒካዊ ችሎታችሁን (ሳጥን 1.2) ተጠቀሙ።
6. https://aws.amazon.com/
7. ከዚህ በፊት ይህን ስልጠና ወስዳችሁ ከሆነ፣ አንድ አዲስ “rails-tutorial-6” የተባለ አካባቢ መፍጠር ይኖርባችሁ ይሆናል፡፡
8. ስር (root) በዩኒክስ እና በመሳሰሉት ስርዓቶች ላይ፣ በሁሉም ትእዛዞች እና ፋይሎች ላይ፣ በተፈጥሮው ስልጣን ያለው የተጠቃሚ ስም ወይም መለያ ነው።
9. ይህ በ በማዘዥያ መስመር ላይ መሰረታዊ እውቀትን ለማግኘት የሚያስፈልገውን ትምህርት ተማር ላይ በክፍል 1.3 እና በክፍል 2.1 ውስጥ የተዘረዘሩትን የ‘አስተጋባ (echo) እና የ‘ >> ትእዛዛትን ይጠቀማል፡፡ ሊቀጠልበት የተፈለገው ፋይል ከሌለ፣ የ‘ >> ትእዛዝ አዲስ ፋይልን እንደሚፈጥር ልብ በሉ።
10. የሰፈር (local) ማለት ከሌላ ስርዓት ጋር ያልተያያዘ ስርዓት ማለት ነው፡፡ ስለዚህ እዚህ ላይ አሁን የምትጠቀሙበት ስርዓት ማለት ኮምፒዩተራችሁ ማለት ነው፡፡
11. በኮምፒተር ሳይንስ ውስጥ ባንዲራ ማለት፣ ለአንድ ተግባር ወይም ለአንድ ሂደት ልክ እንደ አንድ ምልክት ሆኖ የሚያገለግል እሴት ማለት ነው፡፡
12. ይህ የአሰራር ሂደት፣ አንድ ዓይነት የማውጫ አወቃቀሮችን በመጠቀም ስርዓተ ክወናዎችን እና የደመና ቅ.ማ.አን አንድ ዓይነት ለማድረግ የተቀየሰ ስልት ነው። በቴክኒካዊ ችሎታችሁ ላይ የምትተማመኑ ከሆነ፣ ይህንን መሰናድኦ በመተው የመረጣችሁትን ማውጫ መጠቀም ትችላላችሁ፡፡
13. ስእላዊ የተጠቃሚ በይነገጽ (ስ.ተ.በ) Graphical User Interface (GUI) ማለት፣ ተጠቃሚዎች በኤሌክትሮኒክ መሳሪያዎች አማካኝነት፣ በእይታ አመላካች፣ ውክልና አማካኝነት፣ የሚገናኙበት የተጠቃሚ በይነገጽ ነው፡፡
14. አገባብ (Syntax):- አንድ የፕሮግራም ቋንቋን በሚመለከት መልኩ፤ አገባብ ማለት፣ የሰዋሰው እና የፊደል አጻጻፍ ህጎች ስብስብ ማለት ነው፡፡ በሌላ አገላለጽ አንድ ኮምፕዩተር ሊተረጉመው የሚችላቸውን፣ የሆሄ መዋቅሮችን መጠቀም ማለት ነው፡፡ ለምሳሌ:- አንድ ተጠቃሚ ያለ ትክክለኛ አገባብ፣ አንድ ትእዛዝን ለመፈጸም ከሞከረ፣ የአገባብ ስህተት ይፈጥር እና ብዙውን ጊዜ ፕሮግራሙ እንዲወድቅ ምክንያት ይሆናል፡፡
15. ይህ አንዱ የተለመደ የቴክኒካዊ ችሎታ ምሳሌ ነው (ምሳሌ 1.2)።
16. በተመሳሳይ መልኩ ~> 6.06.9 የእንቁ ስሪትን ይጪናል፤ ነገር ግን 7.0 ‘ን አይጪንም፡፡ በተለይ የሚፈለገው ፕሮጀክት የፍቺ ስሪት-ሰጪ (Semantic Versioning) የተባለውን (“semver” ተብሎም ይጠራል) ዘዴ የሚጠቀም ከሆነ፣ በጣም ጠቃሚ ነው፡፡ የፍቺ ስሪት-ሰጪ አንድ ሶፍትዌር ከሌላ ሶፍትዌር ጋር በሚያደርገው ጥገኝነት ላይ፣ የሚመጡ ያለመስራት ችግሮችን ለመቀነስ፣ የሶፍትዌር ስርጪቶችን ቁጥር ለመስጠት የተነደፈ አንድ ደንብ ነው፡፡
17. በማዘዥያ መስመሩ ላይ፣ የ gem list <ከእንቁ ስም ጋር> ትእዛዝን በማስኬድ፣ ለእያንዳንዱ እንቁ የፈላጋችሁትን የስሪት ቁጥር መወሰን ትችላላችሁ፤ ነገር ግን፣ ዝርዝር 1.9 ድካማችሁን ቀላል ያደርግላችኋል፡፡
18.ሰንጠረዥ 3.1 ውስጥ እንደተገለጸው፣ ጫን (install) የሚለውን መተው ትችላላችሁ። ይህ የሆነበት ምክንያት ደግሞ ጫን (install) የተባለው ትእዛዝ እራሱ የ‘ጠቅል ጫን (bundle install) ተለዋጪ-ስም ስለሆነ ነው።
19. እዚህ ላይ “C” የሚያመለክተው፣ የቁልፈሰሌዳውን ባህሪን እንጅ የዓቢይ ፊደልን አይደለም። ስለሆነም “C” ‘ን ወደ ዓብይ ፊደል ለመቀየር “Shift” ‘ን መጫን አይጠበቅብንም።
20. የዓለም አቀፍ ሃብት አመልካች (ዓ.አ.ሃ.አ) Universal Resource Locator (URL):- አንድ የዓ.አ.ሃ.አ አይነት እና፣ በበይነመረብ እና በውስጠመረብ ውስጥ ተደራሽ ሰነዶችን የሚፈታ፣ የአሰያየም ተለምዶ መመደቢያ/መስፈሪያ ነው፡፡ ለምሳሌ:- ይህ አንድ ዓ.አ.ሃ.አ https://www.emuna.com ሲሆን፤ ይህም የእሙና ድርጣቢያ ዓ.አ.ሃ.አ ነው ማለት ነው፡፡
21. የሬይልስ ስልጠና ከአማዞን የድር አገልግሎቶች ውስጥ አንዱን ስለሚጠቀም፣ በክላውድ9 የድር አሳሽ የአድራሻ ማስፈርያ ላይ አድራሻው rails-tutorial-c9-mhartl.c9.io ሁኖ ይታያል፡፡ ድሮ ከስክሪኑ የተወሰዱት ስእሎች፣ የድሮውን ዓ.አ.ሃ.አ ከመያዝ (እንደ ምስል 1.20 ያሉ) በስተቀር፣ ካሁኑ ጋር አንድ ዓይነት መልክ አላቸው። በተጨማሪ፣ ይህ ስልጠና በአማርኛ እና በትግርኛ ስለተተረጎመ አንዳንድ ጊዜ የተዘበራረቀ ወይም ከእንግሊዝኛው እትም ጋር የማይመሳሰል ዓ.አ.ሃ.አ ልታዩ ትችላላችሁ፤ ይህም ቴክኒካዊ ችሎታችሁን (ሳጥን 1.2) በመጠቀም፣ ሊፈታ የሚቻል አነስተኛ ልዩነት ነው፡፡
22. ለመረጃ ልውውጥ የአሜሪካ መደበኛ ኮድ (መ.ል.አ.መ.ኮ) (American Standard Code for Information Interexchange (ASCII)) ማለት እና፤ በ8-ቢት ኮድ ውስጥ በሚገኙ 256 ክፍተቶች ውስጥ ፊደሎችን፣ ቁጥሮችን እና ሌሎች ሆሄወችን የሚመደብ አንድ መስፈርት ነው፡፡
23. የናንተ የጽሑፍ አርታኢ ምናልባት እንዲህ የሚል “invalid multibyte character” መልእክት ሊያሳያችሁ ይችላል፤ ይሄ ግን ምንም የሚያሳስብ አይደለም። እንዴት ማስወገድ እንደሚቻል ለመማር ከፈለጋችሁ የስህተት መልእክቱን ጎግል ማድረግ ትችላላችሁ።
24. የፈለጋችሁትን ያህል የሚቆይ የጊዜ ገደብን መጠቀም ትችላላችሁ፤ ነገር ግን፣ የዳመና ቅ.ማ.አው የጊዜ ገደቡን በየቀኑ ዳግም-ስለሚያስጀምረው “ከ 86,400 ሰከንድ በላይ” ብሎ የጊዜ ገደብን ማዘጋጀቱ፣ በዚህ ሁኔታ ላይ ብዙም ለውጥ የሚያመጣ አይመስልም፡፡
25. ብዙ አበልጻጊወች በጣም ተመሳሳይ የሆነውን የጊት አክል . (git add .) ትእዛዝን ይጠቀማሉ . (“ነጥብ”) አሁን ያላችሁበትን ማውጫን ይወክላል፡፡ ሁለቱ አልፎ አልፎ በሚለያዩበት ወቅት ብዙውን ጊዜ የሚያስፈልጋችሁ ጊት አክል -ኤ (git add -A) የተባለው ትእዛዝ ነው፤ እና የጊት የይፋ የመረጃ ሰነድም የሚያመለክተው ይህንኑ ትእዛዝ መጠቀም ስለሆነ፣ እዚህ ስልጠና ላይም ተግባራዊ የምናደርገው አሰራር ይህንኑ ይሆናል፡፡
26. በዋናው ስልጠና ውስጥ ይህንን ፋይል ማረም ባይጠበቅብንም፣ ለ‘.ጊትችላበለው (.gitignore) ፋይል አንድ ህግን የመጨመር ምሳሌ፣ በክፍል 3.6.2 ውስጥ ይታያል። ይህም በክፍል 3.6 ውስጥ ግዴታዊ ያልሆነ እና የረቀቀው የፈተና መሰናድኦ ክፍል ነው።
27. ቢትባኬት እና ጊትላብ ሁለቱም ጥሩ የሆኑ ምርጫዎች ናቸው። ልክ እንደ ጊትሃብ ጊትላብም በሬይልስ የተሰራ ነው፡፡
28. ጊትሃብ ወሰን የሌለው፣ በህዝብ የሚታዩ እና የግል የሆኑ ማከማቻወችን ይሰጣል።
29.ምስል 1.26 ላይ የሚታየው፣ የጥብቅ ቀፎ ቁልፎች (ጥ.ቀ.ቁ SSH) አማራጪ፣ ችሎታ ላላቸው ተጠቃሚዎች በጣም ጥሩ የሆነ አማራጪ ነው። ስለሆነም የ የጥብቅ ቀፎ ቁልፎችን ለመፍጠር እና ለማዘጋጀት ብቃቱ ካላችሁ እሱን መጠቀም ትችላላችሁ፡፡ የጥ.ቀ ቁልፎች አማራጪ፣ በዝርዝር 1.20 ውስጥ የተገለጸውን ሂደት በማስወገድ ስርዓታችሁ መለያችሁን በራስሰር እንደሚሞላ ይፈቅዳል።
31. የጊት ማከማቻወችን በስእላዊ መልኩ ለማየት የአትላስ የምንጪዛፍ አፕን ተመልከቱ።
33. ጠጋኝ (Patche):- አንድ የሶፍትዌር ፕሮግራም ከተጫነ በኋላ፣ በዚያ ፕሮግራም ላይ የተከሰተ ችግርን ለማስተካከል ሊተገበር የሚችል የሶፍትዌር ኮድ ነው። አብዛኛዎቹ የሶፍትዌር ፕሮግራሞች፣ ከመጀመሪያ ስርጪታቸው በኋላ፣ ብዙ መጠገኛዎች ሊኖራቸው ይችላል፤ ሲጫኑም አብዛኛውን ጊዜ የፕሮግራሙን ስሪት ያዘምናሉ፡፡ ይህ በእንዲህ እንዳለ፣ ጠጋኝ (Patche):- በአንድ ማከማቻ ውስጥ የተደረጉ ለውጦችን የሚያመለክት ማለት መዘመንን፣ ማስተካከልን፣ ወይም መቀላቀልን ወዘተረፈን የሚከታተል/የሚያካትት አንድ ትንሽ ፋይል ነው፡፡
34. በሬይልሰ ስልጠና ውስጥ ላሉት የመሰልጠኛ አፕልኬሽኖች አስፈላጊ ባይሆንም በድንገት አፕልኬሽናችሁ፣ በአደባባይ ላይ እንዳይጋለጥ የሚያስጨንቃችሁ ከሆነ፣ ይህንን ለመከላከል ብዙ አማራጮች አሉ። በክፍል 1.4.2 ላይ ያለው አሰራርም እንደ አንድ አማራጪ ሊወሰድ ይችላል።
35. “ኢንጂን ኤክስ” ተብሎ ይጠራል
36. ቀላል የመጠይቅ ቋንቋ (ቀ.መ.ቋ (SQLite)) በብዛት በአፕልኬሽን ውስጥ ተካቶ የሚያገለግል አንድ የውሂበጎታ ነው (ለምሳሌ በተንቀሳቃሽ ስልኮች ውስጥ አብይ ሚናን ይጫወታል)። ቀ.መ.ቋ ለማዘጋጀት በጣም ቀላል ስለሆነ፣ ሬይልስ ከምርት በስተቀር (ለማበልጸጊያ ብቻ) በተፈጥሮው ይጠቀምበታል፤ ነገር ግን፣ በውሂበጎታ ለተደገፈ የድር አፕልኬሽን አይጠቀምበትም፡፡ ለበለጠ መረጃ ክፍል 3.1 ን ተመልከቱ።
37. የማዘዥያ መስመር በይነገጽ (ት.መ.በ) (Command Line Interface CLI):- እንደ አውታረመረብ ማዘዋወሪያዎች ባሉ፣ አውታረመረብ መሳሪያዎች ላይ የሚገኝ አንድ በይነገጽ ነው፡፡ በይነገጹ የአውታረመረብ መሳሪያ ቁጥጥርን እና አስተዳደርን ይፈቅዳል።
38. toolbelt.heroku.com
39. ጣቢያችሁን በድር አሳሹ ላይ በራስሰር ለመክፈት የ‘ሃረኩ ክፈት (heroku open) ትእዛዝን መጠቀም ትችላላችሁ፡፡
40.ክፍል 1.2.4.1 ውስጥ ያሉትን መልመጃዎች ካጠናቀቃችሁ የናንተ ውጤቶች ከዚህ የተለዩ ሊሆኑ ይችላሉ፡፡
41. ይህ መፍትሔ በተለምዶ “ደህንነት በድብቅነት” ተብሎ የሚጠራ ሲሆን፣ ይህ ደህንነትም፣ ለትርፍ ጊዜ ማሳለፊያ ተብሎ ለሚሰሩ ፕሮጀክቶች በቂ ነው፡፡ ከመጀመሪያው ጀምሮ ከዚህ የበለጠ ደህንነት ለሚያስፈልግ አንድ ጣቢያ ግን፣ የ የሬይስ የሃ.ጽ.ማ.ስ መሰረታዊ ማረጋገጫን እንድትጠቀሙ እመክራለሁ፡፡ ይህ እጅግ የላቀ ቴክኒክ ስለሆነ፣ እሱን ለመተግበር እጅግ በጣም ብቁ የሆነ ቴክኒካዊ ችሎታን (ሳጥን 1.2) ይጠይቃል፡፡ (ይህንን ጉዳይ ስላመላከቱት ክቡር አልፋይ ፓተስን አመሰግናለሁ፡፡)
42. እንደየ ሁኔታው ሁሉ፣ ይህ ኮድ እንኳን አብሮገነቡን የሩቢ ክፍልን በመጠቀም፣ ከዚህ በበለጠ እንዲጠቀጠቅ ተደርጎ ሊሰራ ይችላል፣ በዚህ ሁኔታ ላይ የሚያስፈልገው ናሙና (sample) ይባላል፤ እንዲህ በማድረግም ኮዱን በደምብ ማጠቃጠቅ እንችላለን ('a'..'z').to_a.sample(8).join ። ስቴፋን ፖችማን የተባሉ ክቡር አንባቢ፣ ይህንን ምክር ስለለገሱ አመሰግናለሁ፡፡ ከ‘ናሙና (sample) አብሮገነብ ዘዴ ጋር ለመጀመሪያ ጊዜ ያስተዋወቁኝ እሳቸው ናቸው!
43. railstutorial.org/email
44. https://www.railstutorial.org/help