Dieser Artikel erklärt die Grundlagen von Rake. Es ist ein sehr beliebtes Build-Tool, das in Ruby geschrieben wurde. Es bietet viel Flexibilität und wird für die Verwaltung aller Arten von Aufgaben verwendet. Wenn Sie Rails verwenden, empfehle ich einen Blick unter die Haube, um herauszufinden, welche Aufgaben Ihnen zur Verfügung stehen und wie Sie Ihre eigenen Aufgaben erstellen.
Dank Rails hat sich Rake als Ruby-Build-Tool zu einem De-facto-Standard entwickelt. Es ist in der Ruby-Community sehr beliebt. Sehr früh entschied sich das Team hinter Rails dafür, Rake als Builder für Rails selbst zu verwenden, was bedeutete, dass Sie beim Herunterladen von Rails in der Vergangenheit auch eine Kopie von Rake benötigten. Auf diese Weise wurde Rake vielen Leuten ausgesetzt. Wenig später wurde es in Ruby (1.9) selbst aufgenommen.
De facto ersetzte Rake das Unix-Dienstprogramm Make als Build-Tool in Ruby Land. Ein Build-Tool wie Rake ist praktisch für die Automatisierung von Aufgaben verschiedener Art - eine Software für die Verwaltung von Aufgaben. Es wird häufig für Administrationsaufgaben in Rails verwendet - wo Sie wahrscheinlich am ehesten auf ihn gestoßen sind -, aber seine Anwendungsfälle sind zahlreich. Einige Leute schreiben ihre E-Books in Markdown und haben Rake-Tasks eingerichtet, die die relevanten Dateien in HTML-Zwischendateien konvertieren, die dann wiederum in E-Book-Formate konvertiert werden. Spart viel Mühe, Rake dafür zu verwenden.
Was Rake so besonders macht, ist die Tatsache, dass sich diese Aufgaben auf einander beziehen und aufeinander aufbauen können. Da es in Ruby geschrieben ist, können Sie auch beliebigen Ruby-Code für Ihre Aufgaben schreiben. Möchten Sie Ruby-Bibliotheken für Ihre Rake-Aufgaben verwenden? Kein Problem! Interessante Tatsache: Es ist das am häufigsten heruntergeladene RubyGem mit über 100 Millionen Downloads. Also definitiv etwas in Ihrem Werkzeuggürtel, dem Sie etwas mehr Aufmerksamkeit schenken sollten.
Es wurde vom verstorbenen Jim Weirich konzipiert, einem bekannten und beliebten Entwickler, Sprecher und Mitwirkenden des Ökosystems Ruby. Es ist wirklich ein wunderschönes Werkzeug - danke, Jim! RUHE IN FRIEDEN!
Werfen wir einen Blick auf einige Aufgaben, die Rails sofort anbietet. Ich wette, Sie sind ein bisschen überrascht, was verfügbar ist, wenn Sie es noch nicht überprüft haben. Im entsprechenden Verzeichnis Ihrer App oder Ihres Rakefile können Sie sie auflisten, indem Sie Folgendes in eine Shell eingeben:
Rechen - Aufgaben #oder Rechen -
rake about # Liste der Versionen aller Rails-Frameworks und der Umgebung von Rake-Assets: clean [keep] # Alte kompilierte Assets entfernen Rake-Assets: clobber # Kompilierte Assets entfernen Rake-Assets: Umgebung # Lade Asset-Kompilierungsumgebung Rake-Assets: Vorkompilieren # Kompilieren Sie alle Assets benannt in config.assets.precompile rake cache_digests: dependencies # Lookup-Abhängigkeiten der ersten Ebene für TEMPLATE (wie messages / show oder comm… rake cache_digests: verschachtelte Abhängigkeiten # Lookup verschachtelte Abhängigkeiten für TEMPLATE (wie messages / show oder comments /… rake db: create # Erstellt die Datenbank aus DATABASE_URL oder config / database.yml für den cu… rake db: drop # Löscht die Datenbank aus DATABASE_URL oder config / database.yml für die curr… rake db: fixtures: load Fixtures in die Datenbank der aktuellen Umgebung laden rake db: migrate # Migrieren Sie die Datenbank (Optionen: VERSION = x, VERBOSE = false, SCOPE = blog). rake db: migrate: status # Status der Migrationen anzeigen rake db: rollback # Rollt das Schema zurück zur vorherigen Version ein (Geben Sie die Schritte mit STEP = n an). rake db: schema: cache: clear # Lösche eine Db / schema_cache.dump -Datei-Datei: schema: cache: dump # Erstellen Sie eine db / schema_cache.dump -Datei: rake db: schema: dump # Erstellen Sie eine db / schema.rb-Datei, die für jede von AR-Rake unterstützte DB portabel ist. Db: schema: load # Laden Sie eine schema.rb-Datei in den Datenbank-Rake. Db: seed # Laden Sie die Seed-Daten von db / seeds.rb-Rake db: setup # Die Datenbank erstellen, das Schema laden und mit den Seed-Daten initialisieren ... rake db: structure: dump # Dump der Datenbankstruktur auf db / structure.sql rake db: structure: load # Erstellen Sie die Datenbanken aus der Struktur neu. sql file rake db: version # Ruft das aktuelle Schema ab. Versionsnummer rake doc: app # Dokumente für die App generieren - ebenfalls verfügbares doc: tracks, doc: guides (optio… rake log: clear #) Kürzt alle * .log-Dateien im Protokoll / to zero bytes (Geben Sie an, welche Protokolle mit… rake-Middleware verwendet werden sollen. # Gibt Ihre Rake-Notizen für den Rack-Middleware-Stack aus. # Aufzählen Sie alle Anmerkungen (verwenden Sie die Hinweise: optimieren,: fixme,: todo für den Fokus) rake nicht es: custom # Eine benutzerdefinierte Anmerkung auflisten und mit ANNOTATION = CUSTOM Rake rail: template # angeben. Wendet die von LOCATION = (/ path / to / template) oder URL Rake rail gelieferte Vorlage an: update # Update configs und einige andere generierte Dateien ( oder verwende einfach upd… rake routes # Alle definierten Routen in Übereinstimmungsreihenfolge mit den Namen rake secret ausdrucken. # Einen kryptografisch sicheren geheimen Schlüssel generieren (wird normalerweise von… rake spec # verwendet. Alle Rakes im Spec-Verzeichnis (außer Plugin-Specs) ausführen spec: controller # Führen Sie die Codebeispiele in spec / controller rake aus: features # Führen Sie die Codebeispiele in spec aus / features rake spec: helpers # Führen Sie die Codebeispiele in spec aus / helpers rake spec: models # Führen Sie die Codebeispiele in spec / aus Modelle Rake Spec: Views # Führen Sie die Codebeispiele in Spec / Views Rake-Statistiken aus. # Melden Sie Code-Statistiken (KLOCs usw.) von der Anwendung oder von der Engine-Rake-Zeit: zone: all. # Zeigt alle Zeitzonen an, auch verfügbar: time: zone: us , Zeit: Zonen: lokal… rake tmp: clear # Sitzung löschen, Cache, und Socket-Dateien von tmp / (eng mit tmp: sessions… rake tmp: create # Erstellt tmp-Verzeichnisse für Sessions, Cache, Sockets und Pids
Die Ausgabe in einer Rails-App ist überraschend reichlich, nicht wahr? Sie können viel praktischere Aufgaben als die üblichen finden rake db: migrieren
oder Rechenwege
dass wir uns so gut auskennen und täglich mehrmals laufen.
Auf der linken Seite sehen Sie die verschiedenen Aufgaben, und auf der rechten Seite sehen Sie, was optional zu jeder Rechenaufgabe als Beschreibung bereitgestellt wird. Wenn Sie die vollständige Liste anzeigen möchten, zu der unter anderem auch Aufgaben gehören, für die keine Beschreibung vorliegt, müssen Sie ein zusätzliches Flag hinzufügen.
Rechen -T -A #oder Rechen -Alle
rake about # Liste der Versionen aller Rails-Frameworks und der Umgebung von Rake-Assets: clean [keep] # Alte kompilierte Assets entfernen Rake-Assets: clobber # Kompilierte Assets entfernen Rake-Assets: Umgebung # Lade Asset-Kompilierungsumgebung Rake-Assets: Vorkompilieren # Kompilieren Sie alle Assets benannt in config.assets.precompile rake cache_digests: Abhängigkeiten # Lookup-Abhängigkeiten der ersten Ebene für TEMPLATE (wie messages / show oder comments / _comment.html) rake cache_digests: verschachtelte Abhängigkeiten # Lookup verschachtelte Abhängigkeiten für TEMPLATE (wie messages / show oder comments / _comment) .html) rake db: _dump # rake db: abort_if_pending_migrations # rake db: charset # rake db: collation # rake db: create # Erstellt die Datenbank aus DATABASE_URL oder config / database.yml für das aktuelle RAILS_ENV (verwende db: create: all um alle Datenbanken in der config zu erstellen) rake db: create: all # rake db: drop # Löscht die Datenbank von DATABASE_URL oder config / database.yml für das aktuelle RAILS_ENV (verwende db: drop: all, um alle Datenbanken in der config zu löschen) Rechen db : drop: all # rake db: fixtures: id # rake db: fixtures: load # Laden Sie die Scheinwerfer in die Datenbank der aktuellen Umgebung. rake db: forward # rake db: load_config # rake db: migrate # Migrieren Sie die Datenbank (Optionen: VERSION = x , VERBOSE = false, SCOPE = Blog) rake db: migrieren: down # rake db: migrieren: redo # rake db: migrieren: reset # rake db: migrieren: status # Status der Migrationen anzeigen rake db: migrate: up # rake db : purge # rake db: purge: alle # rake db: reset # rake db: rollback # Rollt das Schema auf die vorherige Version zurück (Schritt w / STEP = n angeben). rake db: schema: cache: clear # Db / löschen schema_cache.dump datei rake db: schema: cache: dump # Erstellen Sie eine db / schema_cache.dump datei rake db: schema: dump # Erstellen Sie eine db / schema.rb -Datei, die für jede DB, die von AR rake db: schema unterstützt wird, portierbar ist. load # Eine schema.rb-Datei in die Datenbank rake laden db: schema: load_if_ruby # rake db: seed # Die Seed-Daten von db / seeds.rb rake db: setup laden # Erstellen Sie die Datenbank, laden Sie das Schema und initialisieren Sie es mit Seed-Daten (verwenden Sie db: reset um die Datenbank auch zuerst zu löschen) rake db: structure: dump # Dump der Datenbankstruktur auf db / structure.sql rake db: structure: load # Erstellen Sie die Datenbanken aus der Struktur.sql-Datei rake db: structure: load_if_sql # rake db: test: clone # rake db: test: clone_schema # rake db: test: clone_structure # rake db: test: veraltet # rake db: test: load # rake db: test: load_schema # rake db: test: load_structure # rake db: test : prepare # rake db: test: purge # rake db: version # Ruft das aktuelle Schema ab Versionsnummer rake default # rake doc # rake doc / app # rake doc / app / created.rid # rake doc: app # Generiert Dokumente für das App - auch verfügbares Dokument: Schienen, Dokument: Führungen (Optionen: TEMPLATE = / rdoc-template.rb, TITLE = "Benutzerdefinierter Titel") rake doc: clobber # rake doc: clobber_app # rake doc: clobber_rails # rake doc: guides # rake doc: Schienen # rake doc: reapp # rake doc: rerails # rake Umgebung # rake html # rake html / created.rid # rake log: clear # Schneidet alle * .log-Dateien im Protokoll / auf null Byte ab (geben Sie an, welche Protokolle verwendet werden sollen) mit LOGS = Test, Entwicklung) Rake Magic # Magische Rake-Task Rake-Middleware # Druckt den Rack-Middleware-Stack-Rake aus. no_description # Rake-Notizen # Alle Anmerkungen auflisten (Anmerkungen verwenden: Optimieren:: Fixme;: ToDo für Fokus). Rake-Notizen: Benutzerdefinierte # Enumerate a Benutzerdefinierte Annotation, mit ANNOTATION = CUSTOM Rake-Notizen angeben: Fixme # Rake-Notizen: Optimieren # Rake-Notizen: Todo # Rake-Schienen: Vorlage # Wendet die von LOCATION = (/ path / to / template) oder URL-Rake-Schienen gelieferte Vorlage an: Vorlagen: copy # rake schienen: update # Update configs und einige andere ursprünglich erzeugte Dateien (oder verwenden Sie einfach update: configs oder update: bin) rake schienen: update: bin # rake schienen: update: configs # rake railties: install: migrations # rake routen # Alle definierten Routen in Übereinstimmungsreihenfolge mit den Namen "rake secret" ausdrucken. # Einen kryptographisch sicheren geheimen Schlüssel generieren (wird normalerweise verwendet, um ein Geheimnis für Cookie-Sitzungen zu generieren). Rake spec # Alle Spezifikationen im Spezifikationsverzeichnis (außer Plugin-Spezifikationen) ausführen : controller # Führen Sie die Codebeispiele in spec / con aus Trollers rake spec: features # Führen Sie die Codebeispiele in spec / features rake spec: helpers aus # Führen Sie die Codebeispiele in spec / helpers rake spec aus: models # Führen Sie die Codebeispiele in spec / models rake spec aus: vorbereiten # rake spec: statsetup # rake spec: views # Führen Sie die Codebeispiele in spec / views aus. Rake-Statistiken. # Melden Sie Code-Statistiken (KLOCs usw.) von der Anwendung oder von der Engine-Rake-Zeit: zone: all. # Zeigt alle Zeitzonen an, auch verfügbar: time: zone: us, Zeit: Zonen: Lokal - Filter mit Parameter OFFSET, z. B. OFFSET = -6 Rake-Zeit: Zonen: Lokal # Rake-Zeit: Zonen: us # rake tmp # rake tmp / cache # rake tmp / cache / assets # rake tmp / cache / assets / entwicklung # rake tmp / cache / assets / produktion # rake tmp / cache / assets / test # rake tmp / pids # rake tmp / sessions # rake tmp / sockets # rake tmp: cache: löschen # rake tmp: clear # Löschen Sie Session-, Cache- und Socket-Dateien von tmp / (eng mit tmp: session: clear, tmp: cache: clear, tmp: sockets: clear) rake tmp: create # Erstellt tmp-Verzeichnisse für Sitzungen, Cache, Sockets und pids Rechen tmp : pids: clear # rake tmp: sitzungen: clear # rake tmp: sockets: clear #
Überraschung, fast dreimal so viel! Sehen Sie sich diese an und spielen Sie herum, wenn Sie möchten, aber speichern Sie die Highlights für den späteren Gebrauch. Wenn Sie die Aufgaben prüfen, um herauszufinden, was verfügbar ist, können Sie möglicherweise das Rad nicht neu erfinden.
Ein Rakefile kann eine der folgenden fünf Erscheinungsformen haben:
Meistens wirst du die Ebene sehen Rakefile
Version, aber ein Framework wie Rails erfordert eine komplexere Organisation. Verwenden Sie was auch immer Ihr Blut zum Fließen bringt. Sie beginnen mit der Erstellung einer Rakefile
oder Dateien mit einem .Rechen
Erweiterung, wenn Sie Aufgaben logisch auf mehrere Dateien aufteilen möchten. Definieren Sie dann Ihre Aufgaben in einem von ihnen.
Rails macht das unglaublich einfach. Es hat ein Rakefile im Stammverzeichnis Ihrer App. Es enthält folgendes:
erfordern File.expand_path ('… / config / application', __FILE__) Rails.application.load_tasks
Wenn Sie viele benutzerdefinierte Aufgaben haben, ist es sinnvoller, diese in einzelne Bereiche aufzuteilen .Rechen
Dateien und legen Sie sie in lib / Aufgaben
. Das Rakefile oben lädt sie einfach, aber das lib
Verzeichnis ist ein besseres logisches Zuhause für die Aufgaben. Es gibt sogar einen Rails-Generator, um einen Teil des Prozesses zu automatisieren. Wenn Sie Folgendes eingeben:
Schienen erzeugen some_task => erstellt lib / task / some_task.rake
Sie erhalten ein Rakefile automatisch im richtigen Verzeichnis. Sogar die Aufgabe ist bereits für Sie eingerichtet. Nett! In anderen Projekten, die nicht mit Rails arbeiten, müssen Sie nur eine erstellen Rakelib
Verzeichnis und platzieren Sie Ihre Rakefiles dort - vorzugsweise mit .Rechen
Dateierweiterungen. Dann erstellen Sie eine Datei namens Rakefile
und all diese Dateien stehen Ihnen bereits zur Verfügung.
desc 'Auflisten der Versionen aller Rails-Frameworks und der Umgebung' Aufgabe: Über do put 'Etwas Magie geht hier rein ...' Ende
Für die kompletten Ruby-Neulinge unter Ihnen und für Leute, die aus eckigen Sprachen kommen, würde dies mit Klammern aussehen.
desc ('Versionen der Rails-Frameworks und der Umgebung auflisten') Aufgabe (: about) do put ('Etwas Magie geht hier rein ...') endet
Sieht übrigens sehr seltsam aus. Verliere einfach die zusätzlichen Klammern - niemand schreibt Aufgaben auf diese Weise.
Wir haben eine benannte Aufgabe bereitgestellt :Über
mit einer Beschreibung, die uns nicht nur zukünftig daran erinnert, was wir mit bestimmten Aufgaben erreichen wollten, sondern auch beim Laufen auftaucht Rechen -T
. Sei nicht faul an diesem Teil; es lohnt sich wahrscheinlich nicht.
Rechts darunter befindet sich die Schlüsselwortaufgabe, die eine neue Aufgabe mit dem Namen definiert Über
. Dies kann in der Kommandozeile über aufgerufen werden Rechen über
Was macht dann seine Magie. Rechen: etwa
auf der anderen Seite wird Rake abbrechen, ohne zu wissen, "wie man eine Aufgabe aufbaut: ungefähr".
Über die Ende
Block, wir haben eine Lambda
, und sein Körper gibt an, was die Aufgabe macht. Dies ist das grundlegende Setup, das eine Aufgabe benötigt. Es bietet natürlich viel mehr Optionen, aber die Gesamtstruktur ist die gleiche.
erfordern './whatever.rb'
Wenn Sie andere Ruby-Dateien oder Rakefiles einbinden müssen, kann dies problemlos durch einen Standard erreicht werden benötigen
Aussage.
importiere "what.rb"
Rake selbst bietet uns eine andere Möglichkeit, dies zu tun - die einführen
Methode. Dies kann in jeder Zeile des Rakefile verwendet werden. Dies ist hilfreich, wenn Sie Probleme haben, weil die erforderliche Datei geladen wurde, bevor das Laden der Rakefile abgeschlossen war, und deshalb explodierte. Die importierte Datei wird dagegen immer nach dem Rakefile geladen.
Manchmal möchten Sie möglicherweise eine definierte Aufgabe von Ihrem ausführen Aufgabe
Klasse manuell. Zu diesem Zweck stehen Ihnen zwei Methoden zur Verfügung Rechen :: Aufgabe
Klasse: ausführen
und aufrufen
.
Rake :: Task ['some_task']. Rake :: Task ['some_task']. Ausführen
Mit dem Rechen :: Aufgabe ['some_task']
Code haben wir die some_task
Rake-Task zum Ausführen. Es gibt eine Instanz von zurück Rechen :: Aufgabe
Klasse und führt dann jede verfügbare Methode darauf aus.
Eine sehr coole Funktion ist die Möglichkeit, Ihren Aufgaben einen Namensraum zu geben. Sie haben das wahrscheinlich schon dutzende Male benutzt. Wenn du rennst rake db: migrieren
, Sie haben von dem Gebrauch gemacht db
Namespace zum Beispiel. Sie rufen die Aufgabe auf, indem Sie sie durch einen Doppelpunkt trennen :
aus dem Namespace. Namespaces sind eine praktische Methode, um Ihre Aufgaben in einer Rake-Datei zu organisieren, da sie logisch voneinander getrennt sind. Mehrere Namespaces wie Rechenzeit: Zonen: alle
sind übrigens in Ordnung.
Andere Beispiele sind:
Rake Db: Drop Rake Db: Seed Rake Log: Löschen Rake Spec: Ansichten Rake Spec: Modelle Rake Db: Rollback Rake Spec: Helfer Rake Spec: Features Rake Db: Schema: Lade Rake-Elemente: Vorkompilieren Rake Db: Migrieren: Status
Namespace: db do desc Aufgabe 'Migrieren einiger Dinge': migriere do ... end end
Dies ist die Grundeinstellung. In Wirklichkeit ist es viel komplizierter und kann sogar mehrfach geschachtelt werden. Werfen Sie einen Blick auf die Rails-Codebasis und überzeugen Sie sich selbst wie rake db: migrieren
ist implementiert. Fühle mich nicht schlecht, wenn es über deinem Kopf ist. Schauen Sie sich einfach um, versuchen Sie herauszufinden, wie es aufgebaut ist, und machen Sie jetzt weiter.
Eine andere Strategie, um Ihre Aufgaben zu organisieren und DRY zu halten, ist die Verwendung von Voraussetzungen für die Ausführung einer Aufgabe. Es ist wie eine Abhängigkeit, die zuerst ausgeführt werden muss, bevor die eigentliche Aufgabe ihren Job startet. Auf diese Weise können Sie komplexere Aufgaben aufbauen - so komplex, wie Sie es benötigen. Ich würde jedoch empfehlen, nicht zu schlau zu werden und es so einfach wie möglich zu halten - und so leicht wie möglich zu verstehen.
Aufgabe: stop_megalomaniac do 'Viele intelligente Gespräche, Autoverfolgungsjagden und abgefeuerte Waffen' Ende Aufgabe: bond_saves_the_day =>: stop_psychotic_megalomaniac do 'Viele Dom Pérignon, Austern und Bond-Girl-Unternehmen enden
Wenn Sie sich auf mehrere Aufgaben verlassen möchten, fügen Sie sie einfach in ein Array ein. Die Reihenfolge, in der Sie sie platzieren, ist natürlich von Belang.
Aufgabe: get_mr_wolf do put "Du hast kein Problem, Jules, ich bin dabei! Geh da rein und lass sie raus und warte auf den Wolf, der direkt kommen sollte!" Aufgabe beenden: figure_out_bonnie_situation do put "Wenn ich richtig informiert wurde, tickt die Uhr. Ist das richtig, Jimmy?" end task: calm_down_jimmy do "Jimmy, tu mir einen Gefallen, oder? Ich habe dort hinten Kaffee gerochen. Würdest du mir eine Tasse machen?" end task: get_vince_vega_in_line do put "Kommen Sie wieder? Machen Sie es gerade, Buster. Ich bin nicht hier, um zu sagen, bitte! Ich bin hier, um Ihnen zu sagen, was zu tun ist!" Aufgabe beenden: clean_car do put "Ich brauche zwei Typen, um diese Reinigungsmittel zu nehmen und das Innere des Autos zu reinigen. Ich spreche schnell, schnell, schnell!" Aufgabe beenden: clean_crew mache "Jim, die Seife! Oh Herr, du warst beide in der Grafschaft, bevor ich sicher bin. Hier kommt es!" end task: get_rid_of_evidence_at_monster_joes do put "Also, was ist mit den Outfits? Ihr Jungs geht zu einem Volleyballspiel oder so?" Aufgabe beenden: drive_into_the_sunrise do "Call me Winston!" Aufgabe beenden: answer_bonnie_situation => [: get_mr_wolf,: calm_down_jimmy,: figure_out_bonnie_situation,: get_vince_vega_in_line,: clean_car,: clean_crew,: get_rid_of_evidence_at_monster_joes,: ? Ende
Wenn Sie die Rake-Task ausführen, die von der anderen abhängig ist, erhalten Sie die folgende Ausgabe:
$ rake browse_bonnie_situation Du hast kein Problem, Jules, ich bin dabei! Gehen Sie dort hinein und entspannen Sie sich und warten Sie auf den Wolf, der direkt kommen sollte! Jimmy, tu mir einen Gefallen, oder? Ich habe dort hinten Kaffee gerochen. Würdest du mir eine Tasse machen? Wenn ich richtig informiert wurde, tickt die Uhr. Ist das richtig, Jimmy? Komm wieder? Holen Sie sich gerade Buster. Ich bin nicht hier, um zu sagen, bitte! Ich bin hier, um dir zu sagen, was zu tun ist! Ich brauche Sie zwei Leute, um diese Reinigungsmittel zu nehmen und das Innere des Autos zu reinigen. Ich spreche schnell, schnell, schnell! Jim, die Seife! OK. Meine Herren, Sie waren beide schon in der Grafschaft, bevor ich sicher bin. Hier kommt es! Also, was ist mit den Outfits? Ihr geht zu einem Volleyballspiel oder so? Ruf mich Winston an! Weißt du, ich würde zum Frühstück gehen. Lust auf ein Frühstück mit mir??
Die Reihenfolge, in der Sie Ihre Rake-Aufgaben definieren, hat keine Auswirkungen auf die Ausgabe, nur in der Reihenfolge, in der Sie die erforderlichen Aufgaben im Array für Aufgabenabhängigkeiten platzieren. Bitte benutzen Sie auch das Hashing =>
Syntax dafür.
Eine lange Liste von Abhängigkeiten kann ein Codegeruch sein. Wenn Sie lange mit etwas umgehen müssen, bereinigen Sie es, indem Sie es in einer Methode einkapseln, die wir als Voraussetzung erfüllen.
def mr_wolf_in_tax_tasks [: get_mr_wolf,: calm_down_jimmy, :_t_out_bonnie_situation, :_t_vince_vega_in_line,: clean_crew,: clean_crew,: get_rid_of_evidence_at_monster_joes,: Lust auf ein Frühstück mit mir? ' Ende
Beachten Sie im Zusammenhang mit den Voraussetzungen, dass Sie nur einen Namespace angeben müssen, wenn Sie sich außerhalb des relevanten Namespaces befinden.
Namespace: marsellus_wallace Aufgabe erledigen: call_winston_wolf do… Ende Aufgabe beenden: lösen_bonnie_situation => 'marsellus_wallace: call_winston_wolf' do… Ende Namespace: marsellus_wallace Aufgabe erledigen: call_winston_wolf do… Ende Aufgabe: lösen_bonnie_situation =>
Wichtig zu beachten: Falls Sie den Namespace erwähnen müssen, müssen Sie die Voraussetzung als Zeichenfolge übergeben => 'marsellus_wallace: call_winston_wolf'
.
Die obigen Beispiele sind natürlich doof und keine echten Beispiele, aber Sie wollten Ihnen zeigen, wie die Voraussetzungen funktionieren und wie Sie sie zusammenbauen, während sie voneinander abhängig sind.
Sie haben zwei Möglichkeiten, Argumente an Rake-Tasks zu übergeben: entweder durch Verwendung von Bash-Variablen oder durch Verwendung der Rake-Syntax.
Falls Sie noch nicht mit Bash gespielt haben - oder Bash klingt für Sie wie Gobbledeg -, nehmen wir fünf und beginnen Sie von vorne. Bash in Ihrer Shell bietet zwei Arten von Variablen: globale Variablen (auch Umgebungsvariablen genannt) und lokale. Beide sind in Großbuchstaben geschrieben. Die Umgebungsvariablen sind globale, das heißt, sie sind in allen Shells verfügbar und verschwinden nicht, wenn Sie eine Variable schließen, im Gegensatz zu lokalen Bash-Variablen, die nur in der aktuellen Shell verfügbar sind.
Umgebungsvariablen können Daten enthalten, die von mehreren Anwendungen verwendet werden können. Sie werden häufig als praktische Methode zur gemeinsamen Nutzung von Konfigurationseinstellungen verwendet. Im Gegensatz dazu sind lokale Bash-Variablen nur lokal. Im Rahmen der Verwendung von Rake haben Sie die Möglichkeit, sowohl über Ruby als auch tatsächlich über die Befehlszeile Variablen zu übergeben.
Nur ein bisschen beiseite, wenn Sie tippen env
oder ENV
In Ihrer Shell erhalten Sie Zugriff auf eine Reihe von Umgebungsvariablen. Ich habe die Liste überarbeitet, aber für ein besseres Verständnis der Umgebungsvariablen und ihrer Bestandteile ermutige ich Sie, sie für sich selbst auszuführen.
env
TERM_PROGRAM = Apple_Terminal TERM = screen-256color SHELL = / bin / bash TMUX = / private / var / Ordner / 4z / 3np9k5ks62b1xpbn_w_lmrgh0000gr / T / tmux-504 / default, 4146,0 EDITOR = v_L. % 1 is_vim = echo "# pane_current_command" | grep -iqE "(^ | \ /) g? (view | n? vim? x?) (diff)? $"…
Wenn Sie eine Liste der lokalen Bash-Variablen anzeigen möchten, können Sie sie ausführen einstellen
.
(set -o posix; set) | Weniger
Das einstellen
Befehl gibt Ihnen viel mehr Ausgabe, aber das Obige zeigt Ihnen sofort die relevanten Bits.
Ruby bietet die Möglichkeit, Umgebungen und lokale Bash-Variablen über einen Hash-ähnlichen Accessor gleichermaßen zu verwenden. Wenn wir eine Variable an eine Rake-Task übergeben, wird dies für unsere Bedürfnisse eine lokale Bash-Variable sein, die Sie in der Liste der ausgeführten Variablen finden einstellen
oder eine Variation davon. Ruby kann es mit auslesen ENV ['VARIABLE']
.
rake prepar_book BOOKTITLE = "Geständnisse eines Einhorns"
Was ich jedoch klarstellen möchte, ist, dass diese Variable nicht zur ENV-Liste hinzugefügt wird, die Ihr System verwendet env
aus der Schale. Um es zu dieser Liste hinzuzufügen, müssten Sie dies tun Export
es. Dies ist eine andere Geschichte, aber ich dachte, ich sollte das klarstellen.
Aufgabe: prepar_book do book_title = ENV ['BOOKTITLE'] || "Arbeitstitel" setzt "Ende mit dem # book_title"
In dieser Aufgabendefinition können Sie sehen, wie wir bereit waren, die an den Aufgabenaufruf übergebene Variable zu akzeptieren oder zu integrieren. Ruby ENV [BASHVARIABLE]
macht all das schwere anheben. Ob BUCHTITEL
Obwohl dies eine globale Umgebungsvariable gewesen wäre, hätten wir auch mit dieser Syntax auf diese Taskdefinition zugreifen können.
Der zweite Ansatz verwendet die reine Rake-Syntax. Sie übergeben Variablen einfach in eckige Klammern. Dieser Ansatz ist besser und Sie können die Dinge isolierter halten. Warum sollte Bash mit einbezogen werden, wenn Rake dies perfekt beherrscht? Außerdem gibt es keine Bash-Variablen, die auf diesem Weg schweben. Wenn Sie mehrere Argumente in eine Aufgabe übergeben möchten, ist dies ebenfalls viel eleganter.
Rechen "create_mi6_agent [James, Bond, 007]"
Aufgabe: create_mi6_agent, [: Vorname,: Nachname,: Nummer] do | t, args | setzt "Nummer # args.number ist Kommandant # args.first_name # args.last_name." Ende
Wenn Sie mehr Argumente übergeben, als Sie in Ihrer Aufgabe definiert haben, können Sie einfach über diese auf sie zugreifen args
. args.extras
Zeigt ein Array aller zusätzlich übergebenen Parameter an. args.to_a
zeigt Ihnen natürlich auch alle Parameter in einem Array.
Nachfolgend finden Sie eine kurze Liste der Rake-Aufgaben, die mit Rails geliefert werden:
Nachfolgend finden Sie einige nützliche Aufgaben unter db
Namespace zum Ausführen von Active Record-Migrationen:
Rake DB: Version
gibt die aktuelle Version des Schemas aus. Die Ausgabe sieht ungefähr so aus:
Aktuelle Version: 20160129135912
rake db: migrieren
führt die letzten Migrationen aus, die noch nicht ausgeführt wurden. Sie können auch eine bestimmte Migration zur Ausführung übergeben.
rake db: migriere VERSION = 20080906120000
rake db: erstellen
erstellt Ihre Datenbank Wenn standardmäßig die Entwicklungs- und Testdatenbanken verwendet werden.
db / development.sqlite3 db / test.sqlite3
Rechen db: test: vorbereiten
stellt sicher, dass Migrationen, die bereits in Ihrer Entwicklungsdatenbank ausgeführt werden, auch für Ihre Testdatenbank ausgeführt werden. Wenn das Schema der Testdatenbank nicht mit Ihrer Entwicklungsdatenbank synchronisiert wäre, wäre es natürlich nicht sehr nützlich.
rake db: drop: all
löscht standardmäßig sowohl Test- als auch Entwicklungsdatenbanken.
rake db: migrate: up
, rake db: migrate: down
läuft die oben
und Nieder
Methoden für die betreffende Migration.
Rechen db: Wiederholen
stellt sicher, dass die Migration nach einer Migration reversibel ist. Es läuft Rechen db: runter
zuerst und dann Rechen db: auf
.
rake db: rollback
macht die letzte Migration rückgängig.
Rechen db: drop
wird standardmäßig von den Entwicklungs- und Testdatenbanken entfernt.
rake db: reset
löscht zuerst die Datenbanken und richtet sie erneut ein, indem das Schema geladen und die Datenbank geladen wird.
Rechen doc: App
erzeugt Dokumentation unter doc / app
. Es erstellt HTML-Seiten zu Ihrem Quellcode, um die Navigation zu erleichtern. Ziemlich cool!
Rechen doc: Schienen
erzeugt eine API-Dokumentation unter doc / api
-auch als HTML-Seiten. Praktisch, wenn Sie offline sind, schätze ich.
Das tmp
Das Verzeichnis im Stammverzeichnis Ihrer Rails-App ist der Ort für temporäre Dateien, vor allem Dateien für Sitzungen und den Cache. rake tmp: create
bietet Ihnen alles, was Sie für den Umgang mit temporären Dateien benötigen. rake tmp: cache: clear
löscht die tmp / cache
Verzeichnis. rake tmp: sitzungen: klar
löscht die tmp / Sitzungen
Verzeichnis.
Rechenwerte
gibt Ihnen einen schönen Überblick über Ihre App.
+----------------------+-------+-------+---------+---------+-----+-------+ | Name | Linien | LOC | Klassen | Methoden | M / C | LOC / M | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Controller | 89 | 69 | 6 | 18 | 3 | 1 | | Helfer | 13 | 13 | 0 | 1 | 0 | 11 | | Modelle | 89 | 54 | 6 | 7 | 1 | 5 | | Mailers | 0 | 0 | 0 | 0 | 0 | 0 | | Javascripts | 25 | 0 | 0 | 0 | 0 | 0 | | Bibliotheken | 0 | 0 | 0 | 0 | 0 | 0 | | Controller-Spezif