Γνωριμία με την ruby

Η ruby είναι μια γλώσσα προγραμματισμού με ιδιαίτερα χαρακτηριστικά και δυνατότητες. Στο παρόν άρθρο θα κάνουμε μια εισαγωγή στη φιλοσοφία της και θα δώσουμε πληροφορίες για το πώς θα την κάνετε εγκατάσταση (η αρχή είναι το ήμισυ του παντός). Σε επόμενα άρθρα θα ασχοληθούμε με rails και με πιο προχωρημένα θέματα πάνω σε ruby (όπως metaprogramming κλπ.).

Από που μας ήρθε; Μια μικρή ιστορική αναδρομή

Η ruby δημιουργήθηκε στην Ιαπωνία, από τον Yukishiro Matsumoto γνωστό απλά και ως "Matz" και πρωτοεμφανίστηκε σε δημόσια newsgroups τον Δεκέμβριο του 1995. Αν και πολύ δυνατή και ξεχωριστή γλώσσα, άργησε να γίνει γνωστή καθώς το documentation της μεταφράστηκε στα αγγλικά το 1998 και το community newsgroup της δημιουργήθηκε στα μέσα του 2000. Τον Matz δεν τον ενδιέφερε να την κάνει γνωστή, την έφτιαξε για να ταιριάζει στον τρόπο σκέψης του και για να κάνει πιο εύκολα τη δουλειά του.

Όλα αυτά άλλαξαν το 2004, όταν πρωτοεμφανίστηκε η Ruby on Rails. Η Ruby on Rails αποτελεί το πιο γνωστό web framework αυτή τη στιγμή και απογείωσε τη δημοτικότητα της ruby παγκοσμίως με πολύ μεγάλα sites να έχουν φτιαχτεί με τη βοήθεια της (twitter, github, hulu, yellowpages κλπ.).

Φιλοσοφία της ruby

Η ruby είναι μια εύκολη γλώσσα, από τις πιο εύκολες γλώσσες που υπάρχουν και ιδανική για να ξεκινήσει κάποιος να μαθαίνει προγραμματισμό. Είναι επίσης ιδιαίτερα εκφραστική και βασικός της στόχος είναι να κάνει τον προγραμματισμό μια ευχάριστη δημιουργία και να βοηθήσει στην παραγωγικότητα. Όπως ο Matz λέει χαρακτηριστικά: "Η ruby δημιουργήθηκε για να κάνει τους προγραμματιστές ευτυχισμένους".

Αυτό δε σημαίνει όμως ότι είναι μια γλώσσα - παιχνίδι. Είναι μια πλήρης αντικειμενοστραφής γλώσσα (όλα είναι αντικείμενα στη ruby) και θεωρείται η πιο δυνατή δυναμική metaprogramming γλώσσα και αυτός είναι και ένας από τους λόγους της επιτυχίας της rails. Με την ruby μπορείς να κάνεις ότι και με τις άλλες γλώσσες (από δημιουργία και διαχείριση threads μέχρι ανάπτυξη desktop application). Η διαφορά που έχει η ruby είναι ότι δίνεται έμφαση στο πόσο εύκολο είναι να γράψεις ένα πρόγραμμα και πόσο ευανάγνωστο είναι.

Ετοιμασία λειτουργικού

Η τελευταία έκδοση της ruby είναι η 1.9.2 (βγήκε πριν μια βδομάδα περίπου). Συχνά υπάρχει η ανάγκη να έχουμε εγκατεστημένες περισσότερες από μια εκδόσεις της όπως την ree (ruby enterprise edition), την jruby που είναι η ruby υλοποιημένη σε java και έχουμε τη δυνατότητα να εκμεταλλευτούμε την ήδη υπάρχουσα δημοτικότητα και τα εργαλεία της java με την ruby (όπως του Red5) ή την 1.8.7, η έκδοση της ruby που υποστηρίζει η rails 2.3.8 αυτή τη στιγμή (αν και σε μια βδομάδα περιμένουμε την τελική έκδοση της rails 3 η οποία θα έχει σαν προτεινόμενη έκδοση την 1.9.2). Γι αυτό το λόγο σε αυτό τον οδηγό θα χρησιμοποιήσουμε μια εφαρμογή, το ruby version manager (rvm) που θα μας επιτρέψει να έχουμε πολλές εκδόσεις ruby εγκατεστημένες και να αλλάζουμε - διαλέγουμε έκδοση πολύ εύκολα.

Για να καταλάβουμε τι ακριβώς κάνει ο rvm θα κάνουμε μια μικρή εισαγωγή στα gems. Gems λέγονται τα διάφορα πακέτα - βιβλιοθήκες που υπάρχουν για την ruby και προσθέτουν επιπλέον λειτουργικότητα σε μια εφαρμογή μας. Η ruby έχει ένα δικό της σύστημα διαχείρισης των πακέτων - gems, που λέγεται rubygems και βρίσκεται στην έκδοση 1.3.7 αυτή τη στιγμή και επιτρέπει την εύκολη εγκατάσταση νέων gems, αποθήκευση πολλαπλών εκδόσεων ενός gem και γενικότερη διαχείριση τους. Η rails (το web framework) είναι απλά ένα gem.

Στα windows δεν υποστηρίζεται ο rvm, υπάρχει αντίστοιχα το pik, το οποίο δεν το έχω δοκιμάσει, αλλά γενικότερα προτείνεται η χρήση ενός unixοειδούς ή linux OS (mac ή ubuntu) καθώς προσφέρει μεγαλύτερη ευελιξία στη διαχείριση. Για απλή εγκατάσταση και δοκιμή της ruby στα windows υπάρχει o rubyinstaller ο οποίος έχει κλασική και εύκολη εγκατάσταση.

Θέλω εδώ να ανοίξω μια παρένθεση επειδή οι πιο πολλοί που θα ασχοληθούν με ruby έχουν σαν στόχο να ασχοληθούν έπειτα με rails.

Οι δύο βασικότεροι λόγοι που κρατάνε πίσω την δημοτικότητα της rails ειδικά στην Ελλάδα είναι:

1) Ακολουθεί τις εξελίξεις και αλλάζει συχνά (όχι ο βασικός κορμός, αλλά προστίθενται και βελτιώνονται αρκετά σημεία που πολλοί web developers δε θέλουν να μαθαίνουν και να παρακολουθούν).

2) οι πιο πολλοί web developers έχουν windows καθώς ξεκίνησαν από php και δε δοκίμασαν ποτέ το linux. Όμως όλες σχεδόν οι web εφαρμογές (εκτός των .NET), πρόκειται να φιλοξενηθούν σε linux servers καθώς είναι η πλειοψηφία, είναι φθηνότεροι και οι open source γλώσσες είναι πιο γρήγορες και πιο σταθερές στο linux. Επίσης πολλές φορές το deploy (μεταφορά της εφαρμογής από τον υπολογιστή σας στον server) είναι πολύ πιο δύσκολο να γίνει από windows σε linux καθώς υπάρχουν διαφορές (π.χ. το file system του linux είναι case sensitive οπότε εύκολα μπορεί κάποιο path να έχει κεφαλαία και στο linux να χτυπήσει, οπότε να αναγκαστείτε να κάνετε debugging αφού έχετε έτοιμη την εφαρμογή σας, αντί να το δείτε κατά τη διάρκεια του development).

Το ιδανικότερο θα ήταν το development περιβάλλον σας να έχει και ubuntu ή ακόμα καλύτερα το λειτουργικό που πρόκειται να έχει ο server στον οποίο θα κάνετε deploy την εφαρμογή. Μια λύση είναι η εγκατάσταση εικονικού λειτουργικού με τη χρήση virtual machine (virtual box που είναι και open source).

Θα υπάρξει σειρά άρθρων για το πώς μπορείτε να εγκαταστήσετε virtual box με ubuntu server 10.04 και εγκατάσταση και χρήση διαφόρων services όπως ssh, samba, ftp κλπ. έτσι ώστε να μπορείτε να το ελέγχετε εύκολα και άνετα μέσα από windows. Προς το παρόν όμως αρκεστείτε σε κάποιο youtube video που δείχνει πώς να το κάνετε ή βρείτε κάποια έτοιμη έκδοση virtual box με εγκατεστημένη ήδη τη διανομή linux που θέλετε όπως την έκδοση της virtual rails.

Για rails development δεν προτείνονται τα windows σκέτα. Το έχω δοκιμάσει με πολύ κόπο και με πολλούς διαφορετικούς τρόπους (instant rails, εγκατάσταση from scratch οτιδήποτε χρειαζόμουν) αλλά πάντα υπήρχαν προβλήματα και επιπλοκές που δε θα έπρεπε να υπάρχουν. Η καλύτερη λύση είναι εγκατάσταση from scratch ενός virtual machine και θα μάθετε και πολλά για τον server σας. Για ruby development τα windows είναι μια χαρά και εγκαθιστώντας απλά τον ruby installer θα είστε εντάξει για να γράψετε προγράμματα.

Κλείσιμο παρένθεσης

H ιστοσελίδα του RVM έχει πολλές πληροφορίες και διάφορους τρόπους εγκατάστασης της ruby. Εμείς θα ακολουθήσουμε τον πρώτο, όπου θα εγκαταστήσουμε το rvm για έναν χρήστη που δε θα είναι ο root. Υπάρχει η δυνατότητα να εγκατασταθεί και στον root καθώς και σε όλο το σύστημα, όμως υπάρχουν μικρές διαφοροποιήσεις στις οδηγίες για κάθε περίπτωση. Αν καταλάβετε αυτόν τον τρόπο, θα μπορείτε να εγκαταστήσετε και με τους άλλους τρόπους ακολουθώντας τις οδηγίες στο site του rvm.

Για εγκατάσταση του RVM αρκεί η πρώτη εντολή όπως την βλέπουμε στο site:
bash < <( curl http://rvm.beginrescueend.com/releases/rvm-install-head )
Έπειτα μας δίνεται μια λίστα με οδηγίες εγκατάστασης ανάλογα το λειτουργικό μας σύστημα. Σε εμένα (ubuntu 10.04) είναι η εξής:

1) Place the folowing line at the end of your shell's loading files(.bashrc or .bash_profile for bash and .zshrc for zsh), after all path/variable settings:
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
Please note that this must only occur once - so, you only need to add it the first time you install rvm.

2) Ensure that there is no 'return' from inside the .bashrc file. (otherwise rvm will be prevented from working properly).
This means that if you see '[ -z "$PS1" ] && return' then you must change this line to:
if [[ -n "$PS1" ]] ; then
... original content that was below the && return line ...
fi # < = be sure to close the if.
#EOF .bashrc
Be absolutely *sure* to REMOVE the '&& return'.
If you wish to DRY up your config you can 'source ~/.bashrc' at the bottom of your .bash_profile.
placing all non-interactive items in the .bashrc, including the 'source' line above

3) Then CLOSE THIS SHELL and open a new one in order to use rvm.

Με απλά λόγια μας ζητάει να βάλουμε μια γραμμή μέσα στο αρχείο .bashrc (βρίσκεται μέσα στο φάκελο home του χρήστη μας, για να μεταφερθούμε αρκεί η εντολή cd ~ και έπειτα για να δούμε τα κρυφά αρχεία γράφουμε ls -a) έτσι ώστε να φορτώνει και τον rvm κάθε φορά. Πατώντας nano .bashrc (ή με οποιονδήποτε άλλο editor, όπως vim, emacs ή pico) ανοίγουμε το αρχείο και γράφουμε την εντολή [[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm. Η εντολή ελέγχει αν υπάρχει ο φάκελος rvm και εφόσον υπάρχει φορτώνει το αρχείο με την εντολή source. Σε περίπτωση που αντιμετωπίσετε κάποιο πρόβλημα, δοκιμάστε να αφήσετε μόνο την εντολή source $HOME/.rvm/scripts/rvm. Έπειτα μας λέει να δούμε το bashrc μας και να αφαιρέσουμε οποιοδήποτε return έχουμε αφήσει (σε μένα υπήρχε μόνο ένα στο σημείο που αναφέρεται και στο 2ο βήμα) και στη συνέχεια να κάνουμε reload το bash (αν και αρκεί η εντολή source $HOME/.rvm/scripts/rvm).

Εγκατάσταση της ruby

Για να εγκαταστήσουμε τώρα την ruby 1.9.2 (MRI ή αλλιώς Matz ruby interpreter) αρκεί η εντολή rvm install 1.9.2. Αντίστοιχα εύκολα εγκαθιστούμε άλλες εκδόσεις ruby, όπως rvm install ree , rvm install jruby κλπ.

Για να δούμε ποιες εκδόσεις ruby έχουμε εγκατεστημένες γράφουμε rvm list. Για να διαλέξουμε και να χρησιμοποιήσουμε μια έκδοση ruby από τις εγκατεστημένες που είναι στη λίστα μας, γράφουμε rvm 1.9.2 ή rvm use 1.9.2 και ελέγχουμε με την εντολή ruby -v την έκδοση. Για να την χρησιμοποιούμε σαν default αρκεί να γράψουμε rvm 1.9.2 --default.

Κάποιες επιπλέον εντολές που θα φανούν χρήσιμες είναι:
gem -v : Μας δείχνει την έκδοση του rubygems, του πακέτου διαχείρισης των gems
gem list : Εμφανίζει τη λίστα με τα εγκατεστημένα μας gems
gem install rails : Εγκατάσταση της τελευταίας stable έκδοσης rails
gem install rails --pre : Εγκατάσταση της τελευταίας rails, αυτή τη στιγμή έκδοση 3 - release candidate 2
gem install whenever : Eγκατάσταση του gem με όνομα whenever
gem env : Διάφορες χρήσιμες πληροφορίες για τα gems
gem list --remote : Εμφάνιση όλων των gems που υπάρχουν (προσοχή αργεί)
rails -v : Εμφάνιση της έκδοσης rails

Για να δοκιμάσουμε ότι όλα δουλεύουν γράφουμε irb στη κονσόλα, μας ανοίγει η κονσόλα της ruby και πληκτρολογούμε 5+5 (μια τυχαία αριθμητική πράξη η οποία θα επιστρέψει 10). Ένα πολύ καλό screencast είναι το railscasts - επεισόδιο 200 που δείχνει την εγκατάσταση και τις διάφορες εντολές.

Παρατηρήσεις

Αν γράψουμε sudo και κάποια από τις παραπάνω εντολές, τότε την εκτελούμε σαν root και θα κάνει override τις ρυθμίσεις οπότε θα εκτελεστεί με την ruby του root αν έχει εγκατασταθεί. Επίσης σε κάθε έκδοση ruby έχουμε διαφορετικά gems εγκατεστημένα οπότε θα χρειάζεται να τα εγκαταστήσουμε ξανά.

Ένα τελευταίο θέμα που θέλω να καλύψω είναι τι γίνεται σε περίπτωση που βγει νέα έκδοση ruby 1.9.2 π.χ.; Πώς την αναβαθμίζουμε χωρίς να χάσουμε τα gems; To rvm σώζει τα gems σε ξεχωριστά gemsets, οπότε αρκεί η εντολή rvm gemset export για να γίνουν export στον φάκελο που είμαστε και έπειτα αφού εγκαταστήσουμε την νέα έκδοση και την αλλάξουμε με την εντολή rvm use ruby-version στη συνέχεια γράφουμε rvm gemset import.

comments powered by Disqus