מדריך ריילס - פרק 1
Tags: rails, ruby, webdev, tutorial
Published: 2021-09-18 13:54:32


אהלן, במדריך הזה נלמד איך לבנות אפליקציית מאגר של חתולי קהילה בריילס, שתאפשר לאקטיביסטים ואוהבי חתולים לעזור לחתולי הקהילה. נשאיר אותה מאוד פשוטה ובסיסית, כדי שיהיה אפשר להבין כמה שיותר, ונסביר כל שלב בתהליך. המדריך הזה מיועד למי שמעולם לא עשה rails new (נסביר מה זה אומר עוד שניה).


## מה זה ריילס

ריילס היא פריימוורק (framework) פול סטאק (full stack) שנכתב בשפת רובי (ruby) לבניית אפליקציות רשת (web app). אכתוב את המונחים בעברית לשם הנוחות, בכל פעם שאכתוב מונח חדש אכתוב אותו באנגלית, גם כי אני לא יודע ניקוד וגם כדי שתוכלו לחפש את המונח בגוגל וכו'.

בואו נסביר את המשפט שנכתב למעלה מהסוף להתחלה. 
אפליקציית רשת היא סוג של אפליקציה שגרה באינטרנט (לעומת אפליקציה נייטיב [native] שגרה על הטלפון או המחשב שלכם), אתם ניגשים אליה דרך הדפדפן ולא דרך חנות האפליקציות של גוגל/אפל ולא מתקינים אותה על המחשב או הטלפון. הויכוח על האם אפליקציית רשת זה טוב יותר או פחות מאפליקציית נייטיב הוא ויכוח ארוך שלא ניכנס אליו במאמר הזה, אבל בואו נניח שאם אתם קוראים את זה אתם מעוניינים לפתח אפליקציות רשת.
שפת רובי היא שפת תכנות שנכתבה בשנת 1995 על ידי [יוקיהירו מאטסומוטו](https://en.wikipedia.org/wiki/Yukihiro_Matsumoto) או בקיצור מאטס. רובי היא שפה דינמית מונחית עצמים (dynamically types, object oriented) לא ניכנס למושגים האלה כרגע אבל חשוב שתכירו אותם להמשך. רובי היא שפה יחסית קריאה, דומה במובנים מסויימים לפייתון.
פול סטאק זה מושג שאומר שבריילס אתם מפתחים את הכל, ממסד הנתונים, דרך הניתוב הרשת ועד יצירה דינמית של דפי האינטרנט, עיצובם והג'אווה סקריפט (javascript) שלהם. אם זה נשמע גדול ומלחיץ אז אל תילחצו, מה שיפה בריילס זה שהיא עושה עבורכם הרבה מהעבודה המבאסת ומשאירה אתם לבנות את מה שמעניין באמת.
פריימוורק זה מושג שאומר שריילס היא מסגרת פיתוח

אחת הגישות החשובות של ריילס היא העדפת מוסכמות על הגדרות (convention over configuration). כלומר ריילס נותנת לכן הגדרות בסיסיות לאפליקציית רשת שרוב הא.נשים צריכים, כדי שלא תצטרכו לבנות הכל מאפס בדרך הספציפית שלכן. זה לא אומר שאי אפשר לעשות הכל. זה אומר שמהר יותר לפתח, קל יותר לעבוד בצוות, ואפשר להקים בלוג ברבע שעה, כמו שדייוויד היינמייר האנסון המכונה DHH שבנה את ריילס הדגים [פה.](https://www.youtube.com/watch?v=Gzj723LkRJY) כמו שאתם יכולים לראות בסרטון וגם תראו בהמשך, איך שאתם מתחילים את הפרויקט ריילס יוצרת הרבה קבצים, אלה קבצי הגדרות שמאפשרים לכן לצלול ישר לפיתוח האפליקציה בלי לדאוג יותר מדי מלהגדיר בעצמנו את השרת, ניתוב של כל בקשה ועוד שטויות חשובות כאלה. הסרטון מאוד ישן אז אל תתייחסו לאיך דברים כתובים ועובדים, רק תקבלו השראה.

## יצירת פרוייקט חדש

בהמשך המדריך אניח שהתקנתן את rvm ושאתן יודעות לעבוד עם טרמינל בלינוקס או wsl בוינדוס,  הנה [כמה מילים על wsl](https://linvirtstor.net/2019/05/09/%D7%9B%D7%9E%D7%94-%D7%9E%D7%99%D7%9C%D7%99%D7%9D-%D7%A2%D7%9C-wsl-2/) [ומדריך להתקנת wsl](https://docs.microsoft.com/he-il/windows/wsl/install-win10) (באנגלית עד שאכתוב אחד בעצמי) . בטח מתישהו אפרסם מדריך להתחלת עבודה עם ריילס אבל זה פחות מעניין אותי אז נראה.

נתחיל בלהתקין את rvm (ruby version manager), שהיא תוכנה שעוזרת לנו לעקוב אחר גרסאות הרובי שלנו ולהשתמש בגרסה הנכונה בכל פרוייקט.

    \curl -sSL https://get.rvm.io | bash -s stable --ruby

נמשיך בלהתקין את גרסת הרובי שלנו. אנחנו נשתמש ברובי 3.0.2 שבזמן הכתיבה הייתה הגרסה היציבה הכי חדשה של רובי.
נתקין בעזרת rvm:

    rvm install 3.0.2

נוודא שאכן הכל קרה בהצלחה בעזרת פקודת list של rvm שכמו שמה, מציגה לנו רשימה של כל גרסאות רובי המותקנות:

    rvm list

נגיד לrvm להשתמש ברובי 3.0.2:

    rvm use 3.0.2

כשהרצתי את הפקודה הזאת הייתה לי שגיאה:
![שגיאה בRVM](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tbsvnv0uciml7qz01zk.png)
 
אם גם לכם השגיאה הזו קרתה, אל דאגה, הפתרון בגוף הבעיה, כמו שהוא מבקש, הרצתי:

    /bin/bash --login

    
וכששוב הרצתי:

    rvm use 3.0.2

הכל עבד וקיבלתי:
![הכל עובד](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y95ltvsfb9kc1yxt2a8v.png)
 
שוב נוודא בעזרת פקודת current:

    rvm current

הדבר הבא הוא ליצור ג'ם סט (gemset). ברובי, ג'ם זה ספרייה, כלומר קוד שמישהו אחר כתב ואנחנו יכולות לייבא לפרוייקט שלנו כדי שלא נצטרך לכתוב אותו בעצמנו.
ניצור ג'ם סט עם שם הפרוייקט שלנו:

    rvm gemset create cats


בכמעט כל cli (command line interface) יש פקודה של עזרה. אם אתן נתקעות, לא זוכרים מה הסדר של הפקודות וכו' תכתבו אותה ותקבלו רשימה של כל הפקודות. בדרך כלל רושמים את שם הcli ואחריו help או -help או -h.
לדוגמה בrvm:

    rvm -h

מילה על cli. cli זאת תוכנה שמאפשרת להריץ פקודות. זה קצת כמו שבתוכנות שאנחנו מכירים מהיום יום אפשר להריץ 'פקודות' בעזרת כפתורים וקישורים, בcli אפשר להריץ פקודות בעזרת כתיבת מילים. ויהי אור!

עכשיו כשיש לנו ג'ם סט נגיד לrvm להשתמש בו:

    rvm gemset use cat

לכל גרסת רובי יש ג'ם סטים משלה. אם בעתיד תתקינו רובי יותר חדשה, לא יהיה לכן את הג'ם סט cats. לכן כשנרצה להגיד לrvm להשתמש ברובי 3.0.2 עם ג'ם סט נוכל לקצר לפקודה אחת:

    rvm use 3.0.2@cats

הצעד הבא הוא להתקין את הג'מים שלנו. בתור התחלה נצטרך להתקין את ריילס, שהיא בעצם ג'ם.
נשתמש בcli שנקרא gem, שהותקן עם רובי:

    gem install rails

אפשר לראות שהתקנת ריילס התקין עוד מלאנטלפים ג'מים אחרים. אלה הן הג'מים שריילס תלוי בהן (dependencies).

עכשיו כשריילס מותקן, אפשר להשתמש בcli שלו.
קודם כל ננווט בטרמינל לתיקייה של הפרוייקטים שלנו, בעזרת cd (change directory) אצלי קוראים לה dev:

    cd dev

הפקודה הבאה שנריץ היא rails new. זו פקודה שתיצור לנו פרוייקט חדש עם השם שנגדיר ועוד הרבה הגדרות אחרות שכרגע נשתמש רק באחת מהן. אתן יכולות להריץ את פקודת העזרה כדי לראות את כל האפשרויות:

    rails new -h

באמת יש מלא אפשרויות!
נקודה לגבי cli של ריילס. אם תחפשו מדריכים, בעיקר יותר ישנים תראו שבמקום לכתוב rails כותבים /bin/rails או rake. זה עושה אותו דבר, זה דרכים יותר ישנות לכתוב אותו דבר, אז נשתמש בrails.
אבל אנחנו נשתמש רק באחת: -d. זאת פונקציה שמגדירה באיזה סוג מסד נתונים (database) האפליקציה תשתמש. אפשר גם לא להגדיר כלום וריילס ישתמש במסד נתונים ברירת מחדל.
המסד נתונים זה דרך שבה המידע נשמר. אפשר להסתכל על זה כמו טבלאות אקסל ענקיות. כל סוג מסד נתונים שומר את המידע בצורה קצת אחרת. אנחנו נשתמש במסד נתונים postgresql, כי זה מה שהשרת שנעלה אליו משתמש. זה לא משנה לנו (כמעט) כלום בפיתוח, אבל יעזור לנו להעלות את האפליקציה לשרת נוח כשהיא תהיה מוכנה. נבין ונתעסק בזה בהמשך.
הפקודה שנריץ היא:

    rails new cats -d postgresql

ריילס תתקין עוד ג'מים, תיצור קבצים ותעשה עוד קסמים שלא ניגע בהם כרגע.
ננווט לתוך התיקייה של הפרוייקט שלנו:

    cd cats
נוכל לקבל רשימה של כל הקבצים בתיקייה:

    ls
   
   נותר לנו רק דבר אחד לעשות כדי שנוכל להריץ את השרת שלנו. ליצור את מסד הנתונים שלנו. מזלנו הוא שלריילס יש פקודה שעושה את זה עבורנו:

    rails db:setup

עכשיו נוכל להריץ את השרת:

    rails server

לפעמים, נשבע שאין לי מושג למה, כשמנווטים בין תיקיות rvm כבר לא משתמש בג'ם סט שקודם השתמשנו בו, ואז תהיה לנו שגיאה. במקרה הזה שוב נריץ rvm use...
יהיה כתוב לנו משהו כמו זה:

![שרת רץ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/gc4ijfx0mmojhuwmhet3.png)
 
אם נדביק בשורת הכתובת:

    http://127.0.0.1:3000

 לדפדפן האהוב עלינו, נגיע לאפליקציה שלנו!
(שימו לב שכדי להעתיק ולהדביק בטרמינל צריך או ללחוץ על מקש ימין בעכבכר ולהעתיק או ללחוץ ctrl + shift + c ולא רק ctrl + c)
אם הכל עבד כמו צריך תראו את הדף החמוד הזה:
![דף הפתיחה של ריילס](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yn41ngo2r6256su6x2tl.png)
 

עד כה רק יצרנו את השלד של האפליקציה. בפוסטים הבאים ניכנס לבניית האפליקציה עצמה, נסתכל על המבנה הקבצים באפליקציה, ונעלה אותה לשרת כדי שכל החברים שלנו יוכלו להשתמש בה!

המדריך פורסם לראשונה [בבלוג השומרי.](https://www.codecircle.co.il/%D7%A8%D7%99%D7%99%D7%9C%D7%A1/2021/08/28/%D7%90%D7%A4%D7%9C%D7%99%D7%A7%D7%A6%D7%99%D7%99%D7%AA-%D7%97%D7%AA%D7%95%D7%9C%D7%99%D7%9D-%D7%91%D7%A8%D7%99%D7%99%D7%9C%D7%A1/)