Warum Rails?

Ihre Wahl beim Lernen eines neuen Rahmens ist unglaublich wichtig. Es dauert unzählige Stunden und Mühe, um kompetent zu werden und alle Best Practices zu erlernen - selbst für erfahrene Entwickler.

Deshalb ist es notwendig, die Besonderheiten eines Frameworks so früh wie möglich zu verstehen, um festzustellen, ob es die richtige Lösung für das Problem ist, das Sie lösen möchten. In diesem Artikel werde ich auf viele der wichtigsten Bereiche des Ruby on Rails-Frameworks eingehen und warum es meiner Meinung nach eine ausgezeichnete Wahl für Webentwickler ist.


Einige Geschichten

Ruby on Rails wurde aus der Projektverwaltungsanwendung Basecamp extrahiert.

Ruby on Rails wurde im Jahr 2004 von David Heinemeier Hannson als Open-Sourcing angeboten, nachdem er aus der Projektmanagementanwendung Basecamp extrahiert wurde.

Es basiert auf der Programmiersprache Ruby und die aktuelle stabile Version ist 3.2 - mit 4.0 gleich um die Ecke!

RoR ist ein vollständiger Webanwendungs-Stack. Ab Version 3.1 enthält es auch Funktionen und Bibliotheken zum Verwalten von Frontend-Code. Sass und CoffeeScript werden standardmäßig unterstützt, ohne dass ein externes Tool zur Verwaltung des Kompilierungsvorgangs erforderlich ist. Opinionated Workflow ist der Name des Spiels mit Rails.

Für die Entwicklung ist ein eigener Webserver integriert, sodass Sie außer einer funktionierenden Ruby-Installation keine zusätzliche Software installieren müssen.


Warum es lernen??

Es gibt unzählige Gründe, Rails zu lernen, von technisch über geschäftlich bis hin zu Produktivität. Wir werden jeden nach dem anderen angehen.

Technologie

Ruby wurde entworfen, um eine "Freude zu verwenden".

Wie der Name schon sagt, basiert Rails auf der Ruby-Sprache. Ruby ist eine objektorientierte, interpretierte Sprache, die 1993 von Yukihiro Matsumoto (weithin bekannt als "Matz") veröffentlicht und erstmals im Jahr 1995 veröffentlicht wurde. Sie verfügt über eine von Perl und Lisp stark inspirierte Syntax. Ruby wurde von Anfang an als "Freude am Gebrauch" konzipiert, was einen starken Fokus auf Lesbarkeit und Eleganz bedeutet.

Ruby ist eine übergeordnete Sprache und ist äußerst leistungsfähig und vielseitig, wobei die Ausgewogenheit von Klarheit und Leistung beibehalten wird (wobei zu berücksichtigen ist, dass es sich immer noch um eine interpretierte, dynamische Sprache handelt)..

Der ursprüngliche Ruby-Interpreter (Matz's Ruby Interpreter, kurz MRI) ist in C verfasst, ist jedoch nicht der einzige, der heutzutage verfügbar ist (einige bemerkenswerte Alternativen sind JRuby, die auf der JVM und Rubinius laufen)..

Ruby verfügt über mehrere mit seinem Kern ausgelieferte Bibliotheken, darunter eine sehr leistungsfähige Unit-Testversion namens Minitest (vor Ruby 1.9, Ruby verwendete TestUnit)..

Rails ist ein beliebter Weg, um sich mit Ruby zu beschäftigen. Daher ist es heutzutage nicht selten, Menschen (einschließlich mir) zu finden, deren erste Einführung in Ruby durch Rails stattfand.

Lernen Sie die Grundlagen von Ruby mit Tuts + Premium.

Struktur

Bei den architektonischen Entscheidungen ist Rails ein starkes Urteil

Rails ist ein Datenbank-agnostisches MVC-Framework, das Konvention über Konfiguration wählt. Dies bedeutet, dass es hinsichtlich Architekturentscheidungen, Namenskonventionen, Pfaden und Mustern eine starke Meinungsbildung aufweist.

Genauer:

  • MVC bedeutet, dass es dem Model-View-Controller-Paradigma folgt, sodass Sie Bedenken bei der Entwicklung einer Anwendung klar voneinander trennen können. Dadurch kann sich Ihre Kerngeschäftslogik an einem einzigen Ort befinden, wodurch Duplizierungen vermieden werden und die Wartung erleichtert wird.

  • Es folgt einem REST-konformen, ressourcenorientierten Ansatz, was bedeutet, dass Sie dazu angehalten werden, Ihre Geschäftslogik vom Standpunkt der Daten aus zu betrachten und Ressourcen für Endpunkte zur Verfügung zu stellen, die CRUD-Aktionen ausführen. Das Anmelden an einer Site kann beispielsweise als "Erstellen einer Sitzung" angesehen werden. Abmelden als 'Sitzung zerstören'. Dieser Ansatz ist gewöhnungsbedürftig. Wenn Sie sich jedoch einmal dafür entschieden haben, können Sie Ihre Schnittstellen für andere Entwickler konsistent und vorhersehbar halten. Rails-Anwendungen neigen dazu, sich um Modelle zu drehen, wodurch die Datenpersistenz verwaltet wird.

  • Es verwendet Bundler als Werkzeug zur Verwaltung von Abhängigkeiten und nutzt die Möglichkeiten der Rubygems-Community. Dies gewährleistet einen konsistenten Ansatz für das Hinzufügen von Drittanbieterfunktionalität zu einer Anwendung mit einem expliziten Format, das angibt, welche Bibliotheken wir benötigen und welche Versionen, einschließlich der Auflösung verschachtelter Abhängigkeiten.

  • Es kann eine breite Palette von Datenbanken unterstützen, wobei SQLite als Standard (gut für die Entwicklung) und MysQL und PostgreSQL als erste Wahl für die Produktion geeignet ist. MongoDB kann auch mit minimalem Aufwand integriert werden.

  • Konvention bedeutet, dass Namen, Pfade und Muster normalerweise vorhersehbar sind und von anderen Rails-Entwicklern gemeinsam genutzt werden. Dies sorgt für eine einfachere Lernkurve, die sich auf die Geschäftslogik der App konzentriert, die Wartung vereinfacht und weniger Dokumentation erfordert.

  • Mit Tools, die in das Framework für Unit-Tests und -Integration (mit JavaScript-Unterstützung) integriert werden, ist es einfach zu testen. Darüber hinaus befürwortet die Ruby-Community selbst eine testgetriebene Entwicklung, so dass ein guter Rails-Entwickler wahrscheinlich sehr viel Erfahrung im Testen hat.

  • Eine Rails-Anwendung kann problemlos in Cloud-Infrastrukturen wie Heroku oder direkt auf privaten Servern bereitgestellt werden (z. B. unter Ubuntu Linux)..

Kernfunktionen

Hier ist ein Überblick über die Funktionen von Rails sowie einige Codebeispiele. Bitte beachten Sie, dass, auch wenn Sie noch nie mit Rails gearbeitet haben oder Ruby nicht kennen, dies Sie nicht daran hindern sollte, sie zu verstehen, da sie durchaus lesbar sind.

  • Unterstützung für die Definition von Datenmodellen durch Migrationen, d. H. Wiederholbare und reversible Datenbank-unabhängige Anweisungen, die die Datenbankstruktur beeinflussen. Betrachten Sie die folgende Migration:

    Klasse CreateEvents < ActiveRecord::Migration def change create_table :events do |t| t.string :title t.date :start_date t.date :end_date t.boolean :live, :default => false t.timestamps end end end

    Diese Migration erstellt eine Veranstaltungen Tabelle, mit einigen grundlegenden Daten, wie z Titel, und verwendet bestimmte Datentypen, die bestimmten Spaltentypen in der zugrunde liegenden Datenbank zugeordnet sind. Zum Beispiel standardmäßig, Schnur verwendet a VARCHAR (255) Spalte, wenn MySQL verwendet wird. Diese Migration kann manuell neu geschrieben oder über die Befehlszeile generiert und vor der Ausführung bearbeitet werden.

  • Datenbankunabhängiges Modell-Interface für CRUD-Aktionen. Hier sind ein paar Beispiele, gegeben a Nachrichten Modell:

    news = news.new (title: 'Sample news') # => gibt eine Nachrichteninstanz zurück, die nicht in der Datenbank gespeichert ist. news.save # => führt eine Einfüge-Abfrage aus und aktualisiert die Instanz mit der zurückgegebenen ID aus der Datenbank news.title = 'Aktualisierte Beispielnachrichten' # => setzt den Titel auf den neuen Wert, ohne dass er in der Datenbank gespeichert wird. News.save # => führt eine Aktualisierungsabfrage für diesen Artikel aus news.destroy # => führt eine Löschabfrage für diesen Artikel aus

    Darüber hinaus bietet Rails eine einfache Schnittstelle, um Auswahlabfragen durchzuführen, einschließlich Verknüpfungen zwischen Modellen.

    News.where (Published: true) .order ('created_at DESC'). Limit (5) # => erzeugt 'SELECT *' aus News, bei denen = 1 Reihenfolge von created_at DESC limit 5 angegeben ist.
  • Unterstützung für Validierungen; ein Veranstaltung Für das Modell ist möglicherweise immer ein eindeutiger Titel erforderlich. In diesem Fall ist es möglich, diese Anforderungen in der Veranstaltung Klasse:

    Klasse Ereignis < ActiveRecord::Base validates :title, :presence => true: Eindeutigkeit => true end

    Durch diese Funktionalität wird sichergestellt, dass kein ungültiger Datensatz in der Datenbank gespeichert wird. Außerdem werden alle erforderlichen Bindungen bereitgestellt, um dem Benutzer Validierungsfehler anzuzeigen (z. B. in einem Formular)..

  • Sitzung und Cookies mit einfachen Helfern, um Werte festzulegen, abzurufen und zu löschen, mit transparenter Signatur.

  • Schutz vor Formularfälschungen, sodass jedes Formular, das Sie über Rails generieren, automatisch mit einem Token signiert wird, der die Echtheit dieses Formulars garantiert.

  • Aggressive XSS-Schutzrichtlinie ist standardmäßig aktiviert, sodass jedes von Ihnen verwendete Formularelement standardmäßig geschützt ist, sofern Sie es nicht explizit auf die Positivliste setzen (Vorsicht!).

  • Einfaches Management für ERHALTEN und POST Daten, die über einen einfachen Hash verfügbar sind, der in jeder Controller-Aktion verfügbar ist.

  • Einfache Bindungen zum Verbinden von Controllern, Modellen und Ansichten mit klaren und konventionellen Regeln, die die Dateiverwaltung und den Code vereinfachen. Betrachten Sie beispielsweise den folgenden Controller, der für das Rendern einer Newslistenseite unter zuständig ist http://example.com/news:

    Klasse NewsController < ApplicationController def index end end

    Auch ohne Code zu schreiben, um was zu definieren Index In diesem Fall bietet Rails ein Standardverhalten, nämlich das Rendern von app / views / news / index.html.erb Aussicht. Dies reduziert den Bedarf an Boilerplate-Code, da in den meisten Fällen nur das Verhalten außer Kraft gesetzt werden muss, wenn es unkonventionell ist.

  • Integration mit externen Diensten; Rails bietet ein umfangreiches Ökosystem an Anwendungen, mit dem Sie Ihre Anwendung überwachen, verwalten und verbessern können (einige davon arbeiten auch mit anderen Frameworks zusammen). New Relic hilft bei der Überwachung der Leistung, Airbrake Bug Tracker sammelt Ausnahmen, um das Entwicklungsteam zu benachrichtigen. Code Climate analysiert Ihre Codebasis auf Qualität, Komplexität und Duplizierung. Tddium und TravisCI können Ihre Testsuite remote gegen verschiedene Ruby-Versionen ausführen.

  • Wie bereits erwähnt, bietet Rails auch eine integrierte Umgebung für die Zusammenarbeit mit Coffeescript und Sass mit transparenter Kompilierung in Entwicklung und Vorverarbeitung sowie Cache-Busting für die Bereitstellung, sodass Ihre Produktions-App einzelne, minimierte Dateien mit einer Signatur im Dateinamen bereitstellt. Auf diese Weise können Sie absolut sicher sein, dass jeder Browser immer die neueste Version der Datei lädt und zwischenspeichert.


Geschäftswert

Haben Sie sich jemals gefragt, warum Rails die erste Wahl vieler Web-Startups ist? Es gibt zwei Hauptgründe:

  • Sie können mit wenig Aufwand an Funktionen arbeiten und so viele nicht geschäftsbezogene Arbeiten aus dem Entwicklungsprozess entfernen. Dies führt zu einer erhöhten Geschwindigkeit bei der Entwicklung und Bereitstellung neuer Funktionen. Dies ist der Schlüssel zum Verständnis, ob das Produkt solide ist.

  • Die Struktur von Rails macht es leicht, Änderungen unterzubringen. Dies gilt sicherlich für viele MVC-Frameworks. Rails eignet sich jedoch besonders gut für die Umstrukturierung Ihres Anwendungsflusses und die Wiederverwendung von Komponenten auf einfache Weise.

Es ist wichtig zu wissen, dass Entwicklungszeiten häufig teurer sind als ein zusätzlicher Server.

Es gibt immer ein ständiges Gespräch über die Leistung von Rails und wie dies zu einem Engpass werden kann, wenn Sie Tausende Treffer pro Minute erhalten. Das Problem ist, dass das Erreichen dieses Verkehrsniveaus einen enormen Aufwand erfordert. Die Wahrheit ist: In neun von zehn Fällen ist Skalierbarkeit ein Problem, dem sich viele Unternehmen nie stellen müssen. Für sie sind die Fähigkeit, Änderungen vorzunehmen, einfache Wartbarkeit und Vorhersagbarkeit, viel wertvoller.

Darüber hinaus ist es wichtig zu wissen, dass Entwicklungszeiten häufig teurer sind als ein zusätzlicher Server. Ein Framework wie Rails wird häufig bevorzugt, denn selbst wenn es leistungsstärkerer Hardware bedarf, ist es in anderen Bereichen immer noch kostengünstig.

Dies bedeutet nicht, dass Sie sich nicht um die Leistung Ihres Codes kümmern oder sich um Themen wie Caching und Abfrageoptimierung kümmern müssen. Stattdessen müssen Sie das gesamte Spektrum an Hardware- und Softwareänderungen berücksichtigen, die Sie vornehmen können. Manchmal ist es sinnvoll, ein leistungsorientiertes Stück Arbeit zu posponieren und temporär über leistungsfähigere Hardware zu verfügen, um weiter an wichtigen Funktionen arbeiten zu können.


Erweiterung des Frameworks

Rails können problemlos mit einer Vielzahl externer Bibliotheken erweitert werden, die über Rubygems verteilt werden. In den meisten Fällen wird jedes Feature, das Sie erstellen müssen, bereits über einen Edelstein angeboten. Das bedeutet nicht, dass das Hinzufügen von Edelsteinen die perfekte Lösung ist. Jede Abhängigkeit einer Drittpartei, die Sie einer Anwendung hinzufügen, wird zu einem Risikofaktor.

Manchmal ist es besser, Ihre eigene Version mit benutzerdefiniertem Code zu rollen.

Sie sollten das Rad jedoch nicht neu erfinden. Viele Rails-Anwendungen verwenden dieselben Edelsteine, um bestimmte Funktionen bereitzustellen. Dies kann als Vorteil angesehen werden. Denken Sie daran: breite Verwendung bedeutet umfassende Tests. Daher ist es eine sichere Methode, bestimmte bekannte Edelsteine ​​zur Erledigung wichtiger Aufgaben zu verwenden. Hier einige Beispiele:

  • Entwickeln Sie für die Anmeldung, Anmeldung und Verwaltung der Benutzer
  • Einfaches Formular zur einfachen und anpassbaren Generierung von Formularmarkierungen
  • Kaminari, zur Paginierung
  • ActiveAdmin für schnelle Administrationsseiten

Diese Liste könnte sich leicht fortsetzen, aber der Punkt ist, dass Rails die Modularität eines auf Rubygems basierenden Ansatzes nutzt und die Entwicklung erheblich beschleunigen kann, indem der Fokus auf das Erstellen von Features gelegt wird, die für das von Ihnen bearbeitete Produkt wichtig sind.


Warum ich gerne mit Rails arbeite

Ich kann mich auf das konzentrieren, was für die Kunden wichtig ist, ohne dabei auf gute Codequalität zu verzichten.

Vor ungefähr zwei Jahren war ich in einer Marketing- / Produktmanagement-Funktion tätig (Webentwicklung als Hobby). Das bedeutete, sich auf die Produktmerkmale, ihren Geschäftswert und die mit ihrer Entwicklung verbundenen Kosten zu konzentrieren. Als ich mich entschied, die Karriere zu wechseln, wurde Rails 3.0 gerade veröffentlicht. Ich verbrachte einen Nachmittag damit, Videos zu schauen und Tutorials zu lesen. Ich entschied schnell, dass Rails mein Hauptanliegen war.

Der Grund - und das überschneidet sich mit dem, was wir bereits besprochen haben - besteht darin, dass ich im Rahmen der Arbeit einen praktischen Ansatz sehen könnte, ein klares Ziel, produktiv zu sein und mich auf das Produkt und seine Entwicklung zu konzentrieren. Ich könnte Dinge in kurzer Zeit erledigen. Nach einigen Monaten intensiven Selbsttrainings durch verschiedene Web-Tutorials und einige Beispielanwendungen bewarb ich mich für meinen aktuellen Job als Rails-Entwickler bei New Bamboo.

Ich arbeite jeden Tag gerne mit Rails, weil ich mich auf das konzentrieren kann, was für die Kunden wichtig ist, ohne dabei die gute Codequalität zu beeinträchtigen. Für mich ist dies der perfekte Ausgangspunkt für die meisten webbasierten Anwendungen.

Es löst nicht alle Probleme, die beim Erstellen großer Webanwendungen auftreten. Es gibt Zeiten, in denen Sie eindeutig erkennen, dass Rails nicht für eine bestimmte Art von Service geeignet ist. Es ist jedoch an der Zeit, die Architektur in kleinere Anwendungen aufzuteilen.


Fazit

Rails ist ein leistungsfähiges Framework, mit dem Sie produktiver und selbstbewusster werden können, wenn Sie an komplexen Projekten arbeiten. Dies ist dank seiner starken Konventionen und seiner soliden Struktur möglich. Große Unternehmen wie 37 Signale, Pivotal Labs, Groupon (oder früher Twitter) haben Rails als Basisarchitektur für ihre Kernanwendungen gewählt. Dafür gibt es einen Grund!

Bereiten Sie vor, um Ruby on Rails zu reiten?