Το **Ruby on Rails**, συχνά **Rails** ή **RoR**, είναι ένα πλαίσιο ανάπτυξης λογισμικού Ιστού ανοιχτού κώδικα για τη γλώσσα προγραμματισμού Ruby. Προορίζεται για χρήση σε συνδυασμό με ευέλικτες μεθοδολογίες ανάπτυξης (agile development methodologies), οι οποίες χρησιμοποιούνται από τους προγραμματιστές Ιστού για ταχεία ανάπτυξη λογισμικού (rapid application development).

Ιστορία
-------

Ιστορία εκδόσεων| Έκδοση | Ημερομηνία |
| --- | --- |
| 1.0 | 13-12-2005 |
| 1.2 | 19-01-2007 |
| 2.0 | 07-12-2007 |
| 2.1 | 01-06-2008 |
| 2.2 | 21-11-2008 |
| 2.3 | 16-03-2009 |

Το Ruby on Rails προήλθε από τη δουλειά του David Heinemeier Hansson στο Basecamp, ένα εργαλείο διαχείρισης project από την εταιρεία 37signals (η οποία τώρα είναι εταιρεία ανάπτυξης λογισμικού Ιστού).
Ο David Hansson αρχικά κυκλοφόρησε το Rails σαν ανοιχτό κώδικα τον Ιούλιο του 2004 αλλά δεν επέτρεπε σε άλλους προγραμματιστές να συνεισφέρουν κώδικα στο εγχείρημα μέχρι το Φεβρουάριο του 2005.
Τον Αύγουστο του 2006 υπήρξε κομβικό σημείο για το Rails, όταν η Apple ανακοίνωσε ότι θα κυκλοφορούσε το Ruby on Rails μαζί με το Mac OS X v10.5 "Leopard",

το οποίο κυκλοφόρησε τον Οκτώβριο του 2007.

Η έκδοση 2.3 του Rails κυκλοφόρησε στις 15 Μαρτίου του 2009. Βασικά νέα χαρακτηριστικά του Rails ήταν τα πρότυπα (templates), οι μηχανές (engines), το Rack και οι εμφωλευμένες φόρμες μοντέλων.

* Τα πρότυπα επιτρέπουν στον προγραμματιστή να δημιουργεί το σκελετό μιας εφαρμογής με ειδικά gems και ρυθμίσεις (configurations).
* Οι μηχανές επιτρέπουν τη χρήση τμημάτων εφαρμογών σε άλλες εφαρμογές, συμπεριλαμβανομένων των χαρακτηριστικών "routes", "view paths" και "models".
* Η διαπροσωπεία Rack και το Metal επιτρέπουν στον προγραμματιστή να γράφει βελτιστοποιημένα κομμάτια κώδικα που μπορούν να δρομολογούνται (route) σε σχέση με την ActionController.

Στις 23 Δεκεμβρίου 2008 ξεκίνησε το Merb, ένα άλλο πλαίσιο ανάπτυξης εφαρμογών Ιστού, και το Rails ανακοίνωσε ότι επρόκειτο να συνεργαστούν. Η ομάδα του Rails ανακοίνωσαν ότι θα συνεργάζονταν με το εγχείρημα Merb για να φέρουν "τις καλύτερες ιδέες του Merb" στο Rails 3, δίνοντας τέλος στο φαινόμενο παρόμοιας δουλειάς που γινόταν σε δύο σημεία, στις δύο κοινότητες.

Τεχνική σύνοψη
--------------

Όπως πολλά πλαίσια Ιστού, το Rails χρησιμοποιεί αρχιτεκτονική Model-View-Controller (MVC) για να οργανώσει τον προγραμματισμό των εφαρμογών.

Το Ruby on Rails περιλαμβάνει εργαλεία που διευκολύνουν κοινές προγραμματιστικές εργασίες, όπως η δημιουργία σκελετών προγραμμάτων (scaffolding) που μπορεί να δημιουργήσει αυτόματα κάποια από τα μοντέλα (models) και τις όψεις (views) που χρειάζεται μια βασική σελίδα Ιστού. Επίσης περιέχει τον WEBrick, έναν απλό εξυπηρετητή Ιστού σε Ruby, και το Rake, ένα σύστημα κατασκευής προγραμμάτων. Αυτά τα εργαλεία, σε συνδυασμό με το Rails, προσφέρουν ένα βασικό περιβάλλον ανάπτυξης.

Το Ruby on Rails βασίζεται σε έναν εξυπηρετητή Ιστού για την εκτέλεσή του. Συνήθως προτιμάται ο Mongrel έναντι του WEBrick αλλά μπορεί να χρησιμοποιηθεί και ο Lighttpd, ο Abyss, ο Apache (σαν μονάδα κώδικα - π.χ. Passenger - ή μέσω του CGI, του FastCGI ή του mod\_ruby), και πολλοί άλλοι. Από το 2008 ο εξυπηρετητής Passenger δείχνει να προτιμάται αντί για τον Mongrel. Πρόσφατα, παρατηρήθηκε συχνή χρήση του εξυπηρετητή Unicorn.

Το Rails είναι επίσης γνωστό για την εκτενή χρήση των βιβλιοθηκών JavaScript Prototype και Script.aculo.us για Ajax. Το Rails αρχικά έκανε χρήση ελαφρών κλήσεων SOAP για web services - αργότερα αυτό αντικαταστάθηκε από RESTful web services.

Από την έκδοση 2.0, το Ruby on Rails προσφέρει σαν μορφές εξόδου HTML και XML, με τη δεύτερη να χρησιμοποιείται και στα RESTful web services.

Το Ruby on Rails βασίζεται στη Ruby 1.8.6. Η έκδοση 3.0 δεν υποστηρίζει την Ruby 1.8.6 και χρειάζεται Ruby 1.8.7 για να λειτουργήσει.

### Δομή

Το Ruby on Rails είναι χωρισμένο σε διάφορα πακέτα, το ActiveRecord (ένα σύστημα αντικειμενοστρεφούς-σχεσιακής αντιστοίχισης (object-relational mapping) για την πρόσβαση σε βάσεις δεδομένων), το ActiveResource (παρέχει web services), το ActionPack, το ActiveSupport και το ActionMailer. Πριν την έκδοση 2.0, το Rails περιλάμβανε και το πακέτο Action Web Service που τώρα αντικαθίσταται από το Active Resource. Εκτός από τα βασικά πακέτα, οι προγραμματιστές μπορούν να δημιουργήσουν plugins για να επεκτείνουν τα υπάρχοντα πακέτα.

### Εγκατάσταση και χρήση τελικών εφαρμογών

Το Ruby on Rails συχνά εγκαθίσταται μέσω του RubyGems, ενός διαχειριστή πακέτων που περιλαμβάνεται στη Ruby. Πολλές διανομές Linux υποστηρίζουν την εγκατάσταση του Rails και των εξαρτήσεών του μέσω του διαχειριστή πακέτων τους.

Το Ruby on Rails συχνά συνδέεται με μια βάση δεδομένων όπως η MySQL και έναν εξυπηρετητή Ιστού όπως ο Apache.

Φιλοσοφία και σχεδίαση
----------------------

Το Ruby on Rails δίνει έμφαση στις αρχές *Σύμβαση έναντι Ρύθμισης* (*Convention over Configuration*, CoC), και *Μην επαναλαμβάνεσαι* (*Don't Repeat Yourself*, DRY).

"Σύμβαση έναντι Ρύθμισης" σημαίνει ότι ο προγραμματιστής χρειάζεται μόνο να ορίζει τα μη συμβατικά χαρακτηριστικά της εφαρμογής του. Για παράδειγμα, αν στο μοντέλο υπάρχει μια κλάση *Sale*, ο αντίστοιχος πίνακας στη βάση θα ονομαστεί *sales*. Μόνο αν κάποιος αποκλίνει από αυτήν τη σύμβαση, για παράδειγμα αποκαλώντας τον "products sold", θα πρέπει να γράψει κώδικα για αυτά τα ονόματα. Συνήθως αυτό οδηγεί σε λιγότερη επανάληψη κώδικα.

"Μην επαναλαμβάνεσαι" σημαίνει ότι η πληροφορία υπάρχει πάντα σε ένα μέρος, χωρίς αμφιβολίες. Για παράδειγμα, ο προγραμματιστής που χρησιμοποιεί το ActiveRecord, δε χρειάζεται να ορίσει τα ονόματα των στηλών των πινάκων στη βάση όταν ορίζει κλάσεις. Το Ruby on Rails βρίσκει μόνο του την πληροφορία αυτή από τη βάση δεδομένων με βάση το όνομα της κλάσης.

Εμπορικά σήματα
---------------

Το Μάρτιο του 2007 ο David Heinemeier Hansson έκανε τρεις αιτήσεις για εμπορικά σήματα σχετικά με το Rails στο USPTO. Αυτές οι αιτήσεις αφορούσαν τη φράση "RUBY ON RAILS", τη λέξη "RAILS" και το επίσημο λογότυπο του Rails. Αποτέλεσμα αυτών ήταν το καλοκαίρι του 2007 ο Hanssonνα αρνηθεί στον εκδοτικό οίκο Apress την άδεια να χρησιμοποιήσει το λογότυπο του Rails στο εξώφυλλο ενός νέου βιβλίου για το Rails που είχε γραφτεί από σημαντικά μέλη της κοινότητας. Αυτό το επεισόδιο δημιούργησε μια ήπια αντίδραση στην κοινότητα του Rails. Σε απάντηση σε αυτήν την αντίδραση ο Hansson δήλωσε το εξής:

> *I only grant promotional use (of the Rails logo) for products I'm directly involved with. Such as books that I've been part of the development process for or conferences where I have a say in the execution. I would most definitely seek to enforce all the trademarks of Rails.*
> 
>

Υποδοχή
-------

Έχουν υπάρξει αρνητικά σχόλια για την απόδοση του Rails σε βαριές εφαρμογές. Αναφέρονται διάφορες διακοπές της λειτουργίας του Twitter το 2007 και το 2008, που το ώθησαν να μεταφέρει τμήμα της υποδομής του σε κώδικα Scala (που εκτελείται στην αφηρημένη μηχανή της Java) για το σύστημα μηνυμάτων τους (message queuing system) και άλλο ενδιάμεσο κώδικα. Ο κώδικας της εμφάνισης της σελίδας εξακολουθεί να βασίζεται στο Ruby on Rails.

Παραπομπές
----------

1. ↑  Rønn Jensen, Jesper (12 Απριλίου 2006). «Ruby on Rails as rapid prototyping tool». *justaddwater.dk*. Denmark. Ανακτήθηκε στις 2 Φεβρουαρίου 2010.
2. ↑  "Rails 1.0: Party like it's one oh oh!". Riding Rails. Retrieved June 9, 2010.
3. ↑  "Rails 1.2: REST admiration, HTTP lovefest, and UTF-8 celebrations". Riding Rails. Retrieved June 9, 2010.
4. ↑  "Rails 2.0: It's done!". Riding Rails. Retrieved June 9, 2010.
5. ↑  Rails 2.1: Time zones, dirty, caching, gem dependencies, caching, etc. Riding Rails. Retrieved June 9, 2010.
6. ↑  "Rails 2.2: i18n, HTTP validators, thread safety, JRuby/1.9 compatibility, docs". Riding Rails. Retrieved June 9, 2010.
7. ↑  "Rails 2.3: Templates, Engines, Rack, Metal, much more!". Riding Rails. Retrieved June 9, 2010.
8. ↑  Grimmer, Lenz (Φεβρουαρίου 2006). «Interview with David Heinemeier Hansson from Ruby on Rails». MySQL AB. Αρχειοθετήθηκε από το πρωτότυπο στις 25 Φεβρουαρίου 2013. Ανακτήθηκε στις 8 Ιουνίου 2008.
9. ↑  «37 Signals, Rails core team profiles». Αρχειοθετήθηκε από το πρωτότυπο στις 5 Δεκεμβρίου 2012. Ανακτήθηκε στις 15 Ιουλίου 2008.
10. ↑  Hansson, David (7 Αυγούστου 2006). «Ruby on Rails will ship with OS X 10.5 (Leopard)». Ανακτήθηκε στις 8 Ιουνίου 2008.
11. ↑  Hansson, David (16 Μαρτίου 2009). «Rails 2.3: Templates, Engines, Rack, Metal, much more!».
12. ↑  «The day Merb joined Rails». 27 Δεκεμβρίου 2008. [*νεκρός σύνδεσμος*]
13. ↑  There were quite a few changes in the 2.0 release, including the way that Rails generates scaffolding code.
14. ↑  Rails includes the Prototype JavaScript framework and the Scriptaculous JavaScript controls and visual effects library.
15. ↑  «Rails 3.0: Release Notes». rubyonrails.org. Ανακτήθηκε στις 6 Μαρτίου 2010. *Rails 3.0 requires Ruby 1.8.7 or higher. Support for all of the previous Ruby versions has been dropped officially and you should upgrade as early as possible*
16. ↑  «Ruby on Rails: Download». RubyonRails.org. Αρχειοθετήθηκε από το πρωτότυπο στις 12 Δεκεμβρίου 2009. Ανακτήθηκε στις 18 Ιουλίου 2010.
17. ↑  «"Ruby on Rails" Trademark Status». USPTO. Ανακτήθηκε στις 1 Αυγούστου 2007.
18. ↑  «"Rails" Trademark Status». USPTO. Ανακτήθηκε στις 1 Αυγούστου 2007.
19. ↑  «Rails Logo Trademark Status». USPTO. Ανακτήθηκε στις 1 Αυγούστου 2007.
20. ↑  Forde, Pete (23 Ιουλίου 2007). «Beginning Rails: From Novice to Professional». Αρχειοθετήθηκε από το πρωτότυπο στις 5 Αυγούστου 2007. Ανακτήθηκε στις 1 Αυγούστου 2007.
21. ↑  Cooper, Peter (24 Ιουλίου 2007). «David Heinemeier Hansson says No to Use of Rails Logo». Αρχειοθετήθηκε από το πρωτότυπο στις 25 Αυγούστου 2017. Ανακτήθηκε στις 1 Αυγούστου 2007.
22. ↑  «5 Question Interview with Twitter Developer Alex Payne». radicalbehavior.com. 29 Μαρτίου 2007. Αρχειοθετήθηκε από το πρωτότυπο στις 27 Μαρτίου 2012. Ανακτήθηκε στις 18 Ιουλίου 2009.
23. ↑  Steve Jenson, Alex Payne, and Robey Pointer interview (3 Απριλίου 2009). «Twitter on Scala». artima.com. Ανακτήθηκε στις 18 Ιουλίου 2009. *We had a Ruby-based queuing system that we used for communicating between the Rails front ends and the daemons, and we ended up replacing that with one written in Scala. The Ruby one actually worked pretty decently in a normal steady state, but the startup time and the crash behavior were undesirable.* CS1 maint: Πολλαπλές ονομασίες: authors list (link)
24. ↑  «Twitter jilts Ruby for Scala». theregister.co.uk. 1 Απριλίου 2009. Ανακτήθηκε στις 18 Ιουλίου 2009. *By the end of this year, Payne said, Twitter hopes to have its entire middleware infrastructure and its APIs ported to the new language. Ruby will remain, but only on the front end. "We're still happy with Rails for building user facing features... performance-wise, it's fine for people clicking around web pages. It's the heavy lifting, asynchronous processing type of stuff that we've moved away from."*
25. ↑  ryan king (25 Σεπτεμβρίου 2009). «Twitter on Ruby». evan weaver. Ανακτήθηκε στις 29 Σεπτεμβρίου 2009. *We use Scala for a few things at Twitter, but the majority of the site is Ruby.*

Βιβλιογραφία
------------

* Ruby, Sam; Thomas, Dave; Hansson, David (March 28, 2009), *Agile Web Development with Rails* (Third έκδοση), Pragmatic Bookshelf, σελ. 850, ISBN 1934356166,
* Laurent, Simon St.; Dumbill, Edd (November 28, 2008), *Learning Rails* (First έκδοση), O'Reilly Media, σελ. 442, ISBN 0596518773,
* Lenz, Patrick (May 1, 2008), *Simply Rails 2* (Second έκδοση), SitePoint, σελ. 450, ISBN 0980455200,
* Tate, Bruce; Hibbs, Curt (August 22, 2006), *Ruby on Rails: Up and Running* (First έκδοση), O'Reilly Media, σελ. 182, ISBN 0596101325,
* Holzner Ph.D. Steve (November 29, 2006), *Beginning Ruby on Rails* (First έκδοση), Wrox, σελ. 380, ISBN 0470069155, ανακτήθηκε στις 2010-07-18
* Allan Hardy, Jeffrey; Carneiro Jr, Cloves; Catlin, Hampton (July 20, 2007), *Beginning Ruby on Rails E-Commerce: From Novice to Professional* (First έκδοση), Wrox, σελ. 361, ISBN 1590596862, ανακτήθηκε στις 2010-07-18
* Clark, Mike (May 15, 2008), *Advanced Rails Recipes* (First έκδοση), Pragmatic Bookshelf, σελ. 464, ISBN 0978739221, ανακτήθηκε στις 2010-07-18

Εξωτερικοί σύνδεσμοι
--------------------

* Ελληνικό Ruby on Rails Βίκι
* Επίσημη σελίδα του Ruby on Rails, rubyonrails.com (Αγγλικά)
* RubyForge.org (Αγγλικά)
* Εισαγωγή στο Ruby on Rails (Ελληνικά)

|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| π • σ • ε
Γλώσσα προγραμματισμού Ruby |
| --- |
|  |
| Ολοκληρωμένα περιβάλλοντα ανάπτυξης | 
* NetBeans
* RubyForge
* RadRails
* RubyMine
* ActiveState\_Komodo
 |
|  |
| Υλοποιήσεις | 
* Ruby MRI
* YARV
* JRuby
* IronRuby
* Rubinius
* XRuby
* MacRuby
* RubyJS
* HotRuby
 |
|  |
| Εφαρμογές | 
* RubyGems
* Rake
* Interactive Ruby Shell
* Capistrano
 |
|  |
| Βιβλιοθήκες / Πλαίσια ανάπτυξης | 
* Adhearsion
* Camping
* eRuby (RHTML)
* Hobo
* Merb
* Nitro
* RubyCocoa
* Ruby on Rails
* Ramaze
* Sinatra
* Padrino
* QtRuby
 |
|  |
| Λογισμικό εξυπηρετητή | 
* Mongrel
* Phusion Passenger (mod\_rails/mod\_rack)
* WEBrick
* mod\_ruby
 |
|  |
| Άλλα | 
* Application Archives
* Document format
* Book Guides
* Ruby Central
* Hackety Hack
* RubyKaigi
 |
|  |
| 
Κατηγορία Κατηγορία |

 |