Rake 101

Dit artikel legt de basisprincipes van Rake uit. Het is een super populaire build-tool die is geschreven in Ruby. Het biedt veel flexibiliteit en wordt gebruikt voor het beheren van allerlei soorten taken. Als u Rails gebruikt, raad ik aan een kijkje onder de motorkap te nemen om te ontdekken welke taken tot uw beschikking staan ​​en hoe u uw eigen taken kunt schrijven.

Onderwerpen

  • Wat is Rake?
  • Takenlijst
  • Ermee beginnen
  • namespaces
  • voorwaarden
  • Argumenten passeren
  • Taken van belang

Wat is Rake?

Dankzij Rails is Rake een de facto standaard geworden als een Ruby-bouwtool. Het is super populair in de Ruby-gemeenschap. Al heel vroeg besloot het team achter Rails om Rake te gebruiken als de bouwer voor Rails zelf, wat betekende dat je in het verleden toen je Rails downloadde, je ook een kopie van Rake nodig had. Op die manier heeft het Rake aan veel mensen blootgesteld. Een beetje later werd het opgenomen in Ruby (1.9) zelf.

Rake de facto vervangen door het hulpprogramma Unix Maak als een bouwtool in Ruby land. Een bouwtool zoals Rake is handig voor het automatiseren van verschillende soorten taken - een software voor het in principe beheren van taken. Het wordt vaak gebruikt voor beheertaken in Rails - dat is waar je het hoogstwaarschijnlijk tot nu toe tegen bent gekomen - maar de gebruiksscenario's zijn volop. Sommige mensen schrijven hun e-boeken in Markdown en hebben Rake-taken opgezet die de relevante bestanden naar gemiddelde HTML-bestanden converteren, die vervolgens op hun beurt worden omgezet in e-boekformaten, bijvoorbeeld. Bespaart veel moeite om Rake daarvoor te gebruiken.

Wat Rake echt krachtig maakt, is dat deze taken zich tot elkaar verhouden en op elkaar kunnen worden gebouwd. Omdat het in Ruby is geschreven, kun je ook elke Ruby-code voor je taken schrijven. Wil je Ruby-bibliotheken gebruiken in je Rake-taken? Geen probleem! Leuk feitje: het is het meest gedownloade RubyGem, met meer dan 100 miljoen downloads. Dus zeker iets in je gereedschapsriem waar je iets meer aandacht aan moet besteden. 

Het werd bedacht door wijlen Jim Weirich, een bekende en geliefde ontwikkelaar, spreker en medewerker aan het Ruby-ecosysteem. Het is echt een mooie tool, bedankt, Jim! RUST IN VREDE!

Takenlijst

Laten we enkele taken bekijken die Rails direct uit de doos aanbiedt. Ik wed dat je een beetje verbaasd bent over wat er beschikbaar is als je het nog niet eerder hebt gecontroleerd. In de relevante map van uw app of uw Rakefile, kunt u ze opsommen door het volgende in een shell te typen:

rake - taken # of rake - T

Output:

rake over # Lijstversies van alle Rails-frameworks en de omgeving rake assets: clean [keep] # Verwijderen van oude gecompileerde assets rake assets: clobber # Verwijder gecompileerde assets rake assets: environment # Load asset compileeromgeving rake assets: precompileer # Stel alle activa samen named in config.assets.precompile rake cache_digests: dependencies # Zoek afhankelijkheden op het eerste niveau op voor TEMPLATE (zoals berichten / show of comm ... rake cache_digests: nested_dependencies # Zoek naar geneste afhankelijkheden voor TEMPLATE (zoals berichten / show of comments / ... rake db: create # Maakt de database van DATABASE_URL of config / database.yml voor de cu ... rake db: drop # Drops de database van DATABASE_URL of config / database.yml voor de curr ... rake db: fixtures: load # Laad fixtures in de database van de huidige omgeving rake db: migrate # Migreer de database (opties: VERSION = x, VERBOSE = false, SCOPE = blog) rake db: migrate: status # Geef de status van migraties weer rake db: rollback # Scrollt het schema terug naar de vorige versi on (geef de stappen op w / STEP = n) rake db: schema: cache: wis # Wis een db / schema_cache.dump bestand rake db: schema: cache: dump # Maak een db / schema_cache.dump bestand rake db: schema: dump # Maak een db / schema.rb bestand dat draagbaar is tegen elke DB die wordt ondersteund door AR rake db: schema: laad # Laad een schema. Rb in de database rake db: seed # Laad de zaadgegevens van db / seeds.rb rake db: setup # Maak de database, laad het schema en initialiseer met de seed-gegevens ... rake db: structure: dump # Dump de databasestructuur naar db / structure.sql rake db: structure: load # Bouw de databases opnieuw in vanuit de structuur. sql file rake db: version # Haalt het huidige versienummer van het schema op rake doc: app # Documenten voor de app genereren - ook beschikbaar document: rails, doc: guides (optio ... rake log: clear # Trunceert alle * .log-bestanden in log / tot nul bytes (specificeer welke logs met ... rake middleware # Print je Rack middleware stack rake notes # Alle annotaties opsommen (notities gebruiken: optimaliseren,: fixme,: todo voor focus) rake niet es: custom # Een aangepaste annotatie opsommen, specificeer met NOTITIES = CUSTOM harkrails: template # Past de door LOCATION = (/ pad / naar / sjabloon) of URL hark rails toe: update # Update configs en enkele andere initieel gegenereerde bestanden ( of gebruik alleen updates ... rake routes # Print alle gedefinieerde routes in matchvolgorde, met namen rake geheim # Genereer een cryptografisch veilige geheime sleutel (dit wordt meestal gebruikt ... rake spec # Voer alle specificaties uit in spec directory (met uitzondering van plug-in specs) rake spec: controllers # Voer de codevoorbeelden uit in spec / controllers rake spec: features # Voer de codevoorbeelden in spec / features rake spec: helpers # Voer de codevoorbeelden in spec / helpers rake spec: models # Voer de codevoorbeelden in spec / models rake spec: views # Voer de codevoorbeelden uit in spec / views rake stats # Rapportcodestatistieken (KLOC's, etc.) uit de applicatie of engine rake time: zones: all # Geeft alle tijdzones weer, ook beschikbaar: tijd: zones: us , tijd: zones: lokaal ... rake tmp: wissen # Wis sessie, cache, en socket-bestanden van tmp / (narrow w / tmp: sessions ... rake tmp: create # Creëert tmp-directory's voor sessies, cache, sockets en pids

De output in een Rails-app is verrassend genoeg, nietwaar? U kunt veel meer handige taken vinden dan de gebruikelijke rake db: migreren of rake routes dat we zo vertrouwd zijn met en meerdere keren per dag werken. 

Aan de linkerkant ziet u de verschillende taken en aan de rechterkant ziet u wat optioneel wordt aangeboden als een beschrijving voor elke harktaak. Als u de volledige lijst wilt zien, die onder andere ook taken bevat waarvoor een beschrijving ontbreekt, moet u een extra markering toevoegen.

Shell:

rake -T -A #of rake -T -all

Output:

rake over # Lijstversies van alle Rails-frameworks en de omgeving rake assets: clean [keep] # Verwijderen van oude gecompileerde assets rake assets: clobber # Verwijder gecompileerde assets rake assets: environment # Load asset compileeromgeving rake assets: precompileer # Stel alle activa samen named in config.assets.precompile rake cache_digests: dependencies # Zoek afhankelijkheden op het eerste niveau op voor TEMPLATE (zoals berichten / show of comments / _comment.html) rake cache_digests: nested_dependencies # Zoek de genestelde afhankelijkheden op voor SJABLOON (zoals berichten / show of reacties / _comment .html) rake db: _dump # rake db: abort_if_pending_migrations # rake db: charset # rake db: collatie # rake db: create # Creëert de database van DATABASE_URL of config / database.yml voor de huidige RAILS_ENV (gebruik db: create: all om alle databases in de config aan te maken) rake db: create: all # rake db: drop # Drops de database van DATABASE_URL of config / database.yml voor de huidige RAILS_ENV (gebruik db: drop: all om alle databases in de config te laten vallen) hark db : drop: all # rake db: fixtures: identify # rake db: fixtures: load # Laad fixtures in de database van de huidige omgeving rake db: forward # rake db: load_config # rake db: migrate # Migreer de database (opties: VERSION = x , VERBOSE = false, SCOPE = blog) rake db: migrate: down # rake db: migrate: redo # rake db: migrate: reset # rake db: migrate: status # Geef de status van migraties weer rake db: migrate: up # rake db : purge # rake db: purge: all # rake db: reset # rake db: rollback # Roept het schema terug naar de vorige versie (geef de stappen op w / STEP = n) rake db: schema: cache: wissen # Een db wissen / schema_cache.dump bestand rake db: schema: cache: dump # Maak een db / schema_cache.dump bestand rake db: schema: dump # Maak een db / schema.rb bestand dat draagbaar is tegen elke willekeurige DB die wordt ondersteund door AR rake db: schema: load # Laad een schema van schema.rb in de database rake db: schema: load_if_ruby # rake db: seed # Laad de seed-gegevens van db / seeds.rb rake db: setup # Maak de database, laad het schema en initialiseer met de zaaidata (gebruik db: reset om de database ook eerst neer te zetten) rake db: structure: dump # Dump de databasestructuur naar db / structure.sql rake db: structure: load # Reconstrueer de databases vanuit het bestand structure.sql rake db: structure: load_if_sql # rake db: test: clone # rake db: test: clone_schema # rake db: test: clone_structure # rake db: test: verouderde # rake db: test: laad # rake db: test: load_schema # rake db: test: load_structure # rake db: test : prepare # rake db: test: purge # rake db: versie # Haalt het huidige versienummer van het schema op rake standaard # rake doc # rake doc / app # rake doc / app / created.rid # rake doc: app # Documenten genereren voor de app - ook beschikbaar document: rails, document: handleidingen (opties: TEMPLATE = / rdoc-template.rb, TITLE = "Aangepaste titel") rake doc: clobber # rake doc: clobber_app # rake doc: clobber_rails # rake doc: handleidingen # rake doc: rails # rake doc: reapp # rake doc: rerails # rake environment # rake html # rake html / created.rid # rake log: clear # Trunceert alle * .log-bestanden in log / tot nul bytes (specificeer welke logs met LOGS = test, ontwikkeling) rake magic # Magic rake task rake middleware # Print je Rack middleware stack rake no_description # rake notes # Alle annotaties opsommen (notities gebruiken: optimaliseren,: fixme,: todo voor focus) rake notes: custom # Enumerate a aangepaste annotatie, specificeer met ANNOTATION = CUSTOM hark notes: fixme # rake notes: optimaliseer # rake notes: todo # rake rails: template # Past de template toe geleverd door LOCATION = (/ pad / naar / sjabloon) of URL hark rails: sjablonen: # rake-rails kopiëren: update # Update configs en enkele andere aanvankelijk gegenereerde bestanden (of gebruik gewoon update: configs of update: bin) rake rails: update: bin # rake rails: update: configs # rake railties: install: migrations # rake routes # Print alle gedefinieerde routes in matchvolgorde, met namen rake geheim # Genereer een cryptografisch veilige geheime sleutel (dit wordt meestal gebruikt om een ​​geheim voor cookionsessies te genereren) rake spec # Voer alle specificaties uit in spec directory (met uitzondering van plug-in specificaties) rake spec : controllers # Voer de codevoorbeelden in spec / con uit trollers rake spec: features # Voer de codevoorbeelden uit in spec / features rake spec: helpers # Voer de codevoorbeelden uit in spec / helpers rake spec: models # Voer de codevoorbeelden uit in spec / models rake spec: prepare # rake spec: statsetup # rake spec: views # Voer de codevoorbeelden uit in spec / views rake stats # Rapportcodestatistieken (KLOC's, enz.) uit de applicatie of engine rake time: zones: all # Geeft alle tijdzones weer, ook beschikbaar: tijd: zones: ons, tijd: zones: lokaal - filter met OFFSET parameter, bijv. OFFSET = -6 harktijd: zones: lokaal # rake tijd: zones: us # hark tmp # hark tmp / cache # hark tmp / cache / assets # hark tmp / cache / assets / ontwikkeling # rake tmp / cache / assets / productie # rake tmp / cache / assets / test # rake tmp / pids # rake tmp / sessies # rake tmp / sockets # rake tmp: cache: clear # rake tmp: wis # Wis sessie-, cache- en socketbestanden van tmp / (narrow w / tmp: sessies: clear, tmp: cache: clear, tmp: sockets: clear) rake tmp: create # Maakt tmp-mappen voor sessies, cache, sockets en pids harken tmp : pids: clear # rake tmp: sessies: clear # rake tmp: sockets: clear # 

Verrassing, bijna drie keer zoveel! Bekijk ze en speel wat rond als je wilt, maar leg de hoogtepunten vast in het geheugen voor later gebruik in de toekomst. Als u de taken controleert om te zien wat er beschikbaar is, voorkomt u mogelijk dat u het wiel opnieuw uitvindt.

Ermee beginnen

Een Rakefile kan een van de volgende vijf verschijningen hebben:

  • rakefile.rb
  • rakefile 
  • Rakefile
  • Rakefile.rb
  • .rake bestanden

Meestal zul je de vlakte zien Rakefile versie, maar een framework zoals Rails heeft een complexere organisatie nodig. Gebruik wat je bloed laat stromen. U begint met het maken van een Rakefile of bestanden met een .hark extensie als u taken logisch wilt opsplitsen over meerdere bestanden. Definieer vervolgens uw taken binnen een van beide.

Aangepaste Rakefile-organisatie

Rails maakt dit ongelooflijk eenvoudig. Het heeft een Rakefile in de hoofdmap van uw app. Het bevat de volgende:

Rakefile

vereist File.expand_path ('... / config / application', __FILE__) Rails.application.load_tasks

Als u veel aangepaste taken hebt, is het logischer om ze in afzonderlijke op te splitsen .hark bestanden en plaats ze in lib / taken. De Rakefile hierboven laadt ze gewoon, maar de lib map is een beter logisch huis voor de taken. Er is zelfs een Rails-generator om een ​​deel van het proces te automatiseren. Als u typt:

schelp

rails genereren some_task => maak lib / tasks / some_task.rake

Je krijgt een Rakefile automatisch in de juiste map geplaatst. Zelfs de taak is al voor u opgezet. Leuk! In andere projecten, zonder Rails, hoef je alleen maar een rakelib map en plaats je Rakefiles daarin, bij voorkeur met .hark bestandsextensies. Maak vervolgens een bestand met de naam Rakefile en al deze bestanden staan ​​al tot uw beschikking.

Rake Task Anatomy

lib / taken / some_task.rake

desc 'Lijstversies van alle Rails-frameworks en de omgevingstaak': about do puts 'Some magic goes in here ...' end

Voor de complete Ruby-nieuwelingen onder jullie, en voor mensen die afkomstig zijn uit beugel-zware talen, zo zou het eruit zien met haakjes.

desc ('Lijstversies van alle Rails-frameworks en de omgeving') task (: about) do puts ('Some magic goes in here ...') end

Ziet er heel raar uit, trouwens. Verlies gewoon de extra haakjes - niemand schrijft taken op deze manier.

We hebben een benoemde taak verstrekt :wat betreft met een beschrijving die ons niet alleen in de toekomst herinnert aan wat we wilden bereiken met bepaalde taken, maar ook opduikt wanneer we rennen hark -T. Wordt hier niet lui van; het is het waarschijnlijk niet waard.

Rechtsonder is de trefwoordtaak die een nieuwe taak met de naam definieert wat betreft. Dit kan via de opdrachtregel worden opgeroepen rake over wat zijn magie dan doet. rake: ongeveer aan de andere kant zal Rake afbreken, niet wetend "hoe taak te bouwen: over".

Via de do end blok, we hebben een lambda, en zijn lichaam specificeert wat de taak doet. Dit is de basisinstelling die een taak nodig heeft. Het biedt natuurlijk veel meer opties, maar de algemene structuur is hetzelfde. 

vereisen / importeren

Wat Rakefile

vereisen './whatever.rb'

Als u andere Ruby-bestanden of Rakefiles wilt opnemen, kan dit eenvoudig worden bereikt met een standaard vereisen uitspraak.

Wat Rakefile

import 'whatever.rb'

Rake zelf biedt ons een andere manier om dit te doen - de importeren methode. Dit kan in elke regel van de Rakefile worden gebruikt. Deze helpt als je problemen tegenkomt, omdat het vereiste bestand is geladen voordat de Rakefile klaar is met laden en daarom is opgeblazen. Het geïmporteerde bestand zal daarentegen altijd na het Rakefile worden geladen.

aanroepen & uitvoeren

Soms wilt u misschien een bepaalde gedefinieerde taak uitvoeren vanuit uw Taak klasse handmatig. Voor dit doel hebt u twee methoden van de Rake :: Task klasse: uitvoeren en beroep doen op.

Rake :: Taak ['some_task']. Rake: taak ['some_task'] uitvoeren.

Met de Rake :: Task [ 'some_task'] code, we hebben de some_task Rake taak uit te voeren. Het retourneert een exemplaar van de Rake :: Task klasse en voert dan elke methode uit die beschikbaar is.

namespaces

Een erg gave functie is de mogelijkheid om je taken een naamruimte te geven. Je hebt dit waarschijnlijk al tientallen keren gebruikt. Wanneer je rent rake db: migreren, je hebt gebruik gemaakt van de db naamruimte, bijvoorbeeld. Je roept de taak op door deze te scheiden met een dubbele punt : van de naamruimte. Namespaces zijn een handige manier om uw taken in een rake-bestand te organiseren - het houdt ze logisch gescheiden. Meerdere naamruimten zoals rake time: zones: alles het gaat prima, trouwens.

Andere voorbeelden zijn:

rake db: drop rake db: seed rake log: clear rake spec: views rake spec: models rake db: rollback rake spec: helpers rake spec: features rake db: schema: load rake assets: precompile rake db: migrate: status

Wat Rakefile

namespace: db do desc 'Migreren van een aantal dingen' taak: migreer do ... end end

Dit is de basisconfiguratie. In werkelijkheid is het veel ingewikkelder en kan het zelfs meerdere keren worden genest. Neem snel een kijkje in de Codebase van Rails en zie zelf hoe rake db: migreren is geïmplementeerd. Voel je niet slecht als het boven je hoofd is. Kijk gewoon rond, probeer te onderscheiden hoe het is gestructureerd en ga voorlopig verder.

voorwaarden

Een andere strategie om uw taken te organiseren en ze DROOG te houden, is het gebruik van de vereisten voor het uitvoeren van een taak. Het is als een afhankelijkheid die eerst moet worden uitgevoerd voordat de eigenlijke taak begint. Op die manier kunt u meer complexe taken opbouwen - zo complex als u nodig heeft. Maar ik raad aan om niet te slim te worden en het zo eenvoudig mogelijk te houden - en ook zo eenvoudig mogelijk te begrijpen.

Wat Rakefile

taak: stop_megalomaniac do puts 'Veel slim praten, auto achtervolgingen en vuurwapens afgevuurd' eindtaak: bond_saves_the_day =>: stop_psychotic_megalomaniac do puts 'Veel Dom Pérignon, oesters en bond girl business' end

Als u op meerdere taken wilt vertrouwen, plakt u ze gewoon in een array. De volgorde waarin je ze plaatst, is natuurlijk belangrijk.

taak: get_mr_wolf do puts "Je hebt geen probleem Jules, ik sta erop! Ga naar binnen en ontspan ze en wacht op de wolf die direct zou moeten komen!" eind taak: figure_out_bonnie_situation do puts "Als ik goed geïnformeerd was, tikt de klok. Is dat juist Jimmy?" eindopdracht: calm_down_jimmy do puts "Jimmy, doe me een lol, wil je? Ik rook wat koffie daar achteraan. Zou je een kopje voor me willen maken?" eindopdracht: get_vince_vega_in_line do puts "Kom op, maak het meteen helder, ik ben hier niet om te zeggen, ik ben hier om je te vertellen wat je moet doen!" eindopdracht: clean_car do puts "Ik heb twee jongens nodig om die schoonmaakproducten te nemen en de binnenkant van de auto schoon te maken, ik praat snel, snel, snel!" eindopdracht: clean_crew do puts "Jim, de soap! O.K. heren, jullie zijn allebei naar de county geweest voor ik het zeker weet." Hier komt het! " eindopdracht: get_rid_of_evidence_at_monster_joes do puts "Dus wat is er met de outfits? Gaan jullie naar een volleybalwedstrijd of zo?" eindopdracht: drive_into_the_sunrise do puts "Noem me Winston!" eind taak: solve_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,: drive_into_the_sunrise] do puts "Weet je, ik zou gaan ontbijten. Ik heb zin om samen met mij te ontbijten. ?" einde

Als u de harktaak uitvoert die van de andere afhankelijk is, krijgen we de volgende uitvoer:

schelp

$ rake solve_bonnie_situation Je hebt geen probleem Jules, ik sta erop! Ga daar binnen en ontspan ze en wacht op de wolf die direct zou moeten komen! Jimmy, doe me een lol, wil je? Ik rook daar wat koffie. Zou je een kopje voor me maken? Als ik correct werd geïnformeerd, tikt de klok. Klopt dat Jimmy? Kom opnieuw? Krijg het rechte buster. Ik ben hier niet om te zeggen alsjeblieft! Ik ben hier om je te vertellen wat je moet doen! Ik heb twee jongens nodig om die schoonmaakproducten te nemen en de binnenkant van de auto schoon te maken. Ik praat snel, snel, snel! Jim, de zeep! OK. Heren, jullie zijn allebei naar de provincie geweest voor ik het zeker weet. Hier komt het! Dus wat is er met de outfits? Gaan jullie naar een volleybalwedstrijd of zo? Noem me Winston! Weet je, ik zou gaan ontbijten. Ik heb zin om met mij te ontbijten?

De volgorde waarin u uw rake-taken definieert, heeft geen effect op de uitvoer, alleen de volgorde waarin u de vereiste taken in de array plaatst voor taakafhankelijkheden. Gebruik ook de hashrocket => syntaxis hiervoor.

Een lange lijst van afhankelijkheden kan een code geur zijn. Als je te maken hebt met iets dat lang duurt, ruim je het op door het in te kapselen in een methode die we dan als voorwaarde doorgeven.

def mr_wolf_tasks [: 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,: drive_into_the_sunrise] end ... task: solve_bonnie_situation => mr_wolf_tasks do puts 'Weet je, ik zou gaan ontbijten. Heb je zin om met me te ontbijten? ' einde

In het kader van de vereisten is één ding om in gedachten te houden dat u alleen een naamruimte moet vermelden als u zich buiten de relevante ruimte bevindt.

Wat Rakefile

naamruimte: marsellus_wallace taak doen: call_winston_wolf do ... taak beëindigen: solve_bonnie_situation => 'marsellus_wallace: call_winston_wolf' do ... einde naamruimte: marsellus_wallace taak: call_winston_wolf do ... taak beëindigen: solve_bonnie_situation =>: call_winston_wolf do ... end end

Belangrijk om op te merken, hoewel: in het geval dat u de naamruimte moet vermelden, moet u de vereiste als een reeks doorgeven => 'marsellus_wallace: call_winston_wolf'.

Natuurlijk zijn de voorbeelden hierboven goofy en geen voorbeelden uit de praktijk, maar het was de bedoeling om je te laten zien hoe de voorwaarden werken en hoe je ze zou samenvoegen terwijl ze van elkaar afhankelijk zijn.

Argumenten passeren

Je hebt twee opties om argumenten door te geven aan Rake-taken: met behulp van Bash-variabelen of door gebruik te maken van de syntaxis van Rake zelf.

ENV-variabele

In het geval dat je nog niet eerder met Bash hebt gespeeld - of Bash klinkt als Gobbledegook voor jou - laten we er vijf nemen en bij het begin beginnen. Bash in je shell biedt twee soorten variabelen: globale (alias omgeving) variabelen en lokale variabelen. Beide zijn geschreven in hoofdletters. De omgevingsvariabelen zijn globaal, wat betekent dat ze beschikbaar zijn in alle shells en niet verdwijnen als je er een sluit - in tegenstelling tot lokale Bash-variabelen, die alleen beschikbaar zijn in de huidige shell. 

Omgevingsvariabelen kunnen gegevens bevatten die door meerdere applicaties kunnen worden gebruikt en worden vaak gebruikt als een handige manier om configuratie-instellingen te delen. In tegenstelling daarmee zijn lokale Bash-variabelen alleen dat, lokaal. In onze context van het gebruik van Rake hebt u de mogelijkheid om zowel via Ruby als in feite passvariabelen via de opdrachtregel te benaderen.

ter info

Even een beetje terzijde, als je typt env of ENV in je shell krijg je toegang tot een hele reeks omgevingsvariabelen. Ik heb de lijst geredigeerd, maar voor een beter begrip van wat omgevingsvariabelen zijn en wat ze bevatten, moedig ik je aan om het voor jezelf uit te voeren.

schelp

env

uitgang

TERM_PROGRAM = Apple_Terminal TERM = scherm-256kleur SHELL = / bin / bash TMUX = / privé / var / mappen / 4z / 3np9k5ks62b1xpbn_w_lmrgh0000gr / T / tmux-504 / standaard, 4146,0 EDITOR = vim LANG = en_US.UTF-8 TMUX_PANE = % 1 is_vim = echo "# pane_current_command" | grep -iqE "(^ | \ /) g? (weergave | n? vim? x?) (diff)? $" ... 

Als u een lijst met lokale Bash-variabelen wilt zien, kunt u uitvoeren reeks.

schelp

(set -o posix; instellen) | minder

De reeks commando geeft je veel meer output, maar het bovenstaande toont je meteen de relevante bits.

Ruby's ENV Class-methode

Ruby biedt een manier om zowel omgeving- als lokale Bash-variabelen via een hash-achtige accessor te gebruiken. Voor onze behoeften, wanneer we een variabele doorgeven aan een Rake-taak, wordt dit een lokale Bash-variabele, die u kunt vinden in de lijst met variabelen die wordt uitgevoerd reeks of een variant ervan. Ruby kan het voorlezen met behulp van ENV [ 'Variable'].

schelp

rake prepare_book BOOKTITLE = "Bekentenissen van een eenhoorn"

Wat ik echter wil verduidelijken, is dat deze variabele niet wordt toegevoegd aan de ENV-lijst die uw systeem gebruikt-de dingen die u zag aanroepen env van de schaal. Om het aan die lijst toe te voegen, zou u dat moeten doen exporteren het. Dit is een ander verhaal, maar ik dacht dat ik dit duidelijk moest maken.

Wat Rakefile

task: prepare_book do book_title = ENV ['BOOKTITLE'] || 'Working Title' zet "Doe iets met de # book_title" einde

In deze taakdefinitie kunt u zien hoe we ons hebben voorbereid om de variabele die is doorgegeven aan de taakaanroep te accepteren of op te nemen. Ruby's ENV [BASHVARIABLE] doet al het zware werk. Als BOEK TITEL was een globale omgevingsvariabele, maar we hadden er ook binnen deze taakdefinitie toegang toe kunnen krijgen met deze syntaxis.

Hepparametersyntaxis

De tweede benadering is pure Rake-syntaxis gebruiken. Je geeft variabelen gewoon door in vierkante haakjes. Die aanpak is beter en je kunt de dingen meer geïsoleerd houden. Waarom Bash betrekken als Rake hier perfect mee om kan gaan? Bovendien heb je geen Bash-variabelen die op die manier rondzweven. Als je meerdere argumenten wilt doorgeven aan een taak, is het ook een stuk eleganter.

schelp

rake "create_mi6_agent [James, Bond, 007]"

Wat Rakefile

taak: create_mi6_agent, [: first_name,: last_name,: number] do | t, args | zet "Number # args.number is commandant # args.first_name # args.last_name." einde

Wanneer u meer argumenten doorgeeft dan u in uw taak hebt gedefinieerd, kunt u eenvoudig toegang krijgen via args. args.extras toont een array van alle extra ingevoerde parameters. args.to_a toont u alle parameters - natuurlijk ook in een array.

Taken van belang

Hieronder staat een korte lijst met Rake-taken die met Rails worden meegeleverd:

  • db
  • dokter
  • tmp
  • stats
  • aantekeningen
  • wat betreft
  • geheim
  • middelen
  • routes

db

Hieronder staan ​​een aantal nuttige taken onder de db naamruimte voor het uitvoeren van Active Record-migraties:

rake db: versie print de huidige versie van het schema. De uitvoer ziet er ongeveer zo uit:

Huidige versie: 20160129135912

rake db: migreren voert de laatste migratie (s) uit, die nog niet zijn uitgevoerd. U kunt ook een specifieke migratie doorgeven om uit te voeren.

schelp

hark db: migreren VERSION = 20080906120000

rake db: create maakt uw database aan. Als standaard de ontwikkelings- en testdatabases.

db / development.sqlite3 db / test.sqlite3

hark db: test: voorbereiden zorgt ervoor dat migraties die al in uw ontwikkelingsdatabase worden uitgevoerd, ook worden uitgevoerd voor uw testdatabase. Als het schema van de testdatabase niet synchroon liep met je ontwikkelingsdatabase, zou het natuurlijk niet erg nuttig zijn.

rake db: drop: all Hiermee worden standaard zowel test- als ontwikkelingsdatabases gedropt.

rake db: migrate: up, rake db: migrate: down loopt het omhoog en naar beneden methoden voor de migratie in kwestie.

hark db: opnieuw uitvoeren zorgt ervoor dat, nadat u een migratie hebt uitgevoerd, de migratie omkeerbaar is. Het rent rake db: down eerst en dan rake db: up.

rake db: terugdraaien maakt de laatste migratie ongedaan.

rake db: drop wordt standaard verwijderd door de ontwikkelings- en testdatabases.

hark db: reset laat de databases eerst vallen en stelt ze opnieuw in door het schema te laden en de database te seeden.

dokter

rake doc: app genereert documentatie onder doc / app. Het maakt HTML-pagina's over uw broncode voor gemakkelijk browsen. Best wel gaaf!

screenshot

rake doc: rails genereert een API-documentatie onder doc / api-ook als HTML-pagina's. Handig als je offline bent, denk ik.

tmp

De tmp map in de hoofdmap van uw Rails-app is de plaats voor tijdelijke bestanden - meest opvallende bestanden voor sessies en cache. hark tmp: maken maakt je klaar met alles wat je nodig hebt voor het omgaan met tijdelijke bestanden. rake tmp: cache: wissen wist de tmp / cache directory. hark tmp: sessies: vrij wist de tmp / sessies directory.

stats

rake stats geeft u een mooi overzicht van uw app.

+----------------------+-------+-------+---------+---------+-----+-------+ | Naam | Lijnen | LOC | Lessen | Methoden | M / C | LOC / M | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Controllers | 89 | 69 | 6 | 18 | 3 | 1 | | Helpers | 13 | 13 | 0 | 1 | 0 | 11 | | Modellen | 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 specificaties | 99 | 81 | 0 | 0 | 0 | 0 | | Functiespecificaties | 14 | 11 | 0 | 0 | 0 | 0 | | Helper specificaties | 45 | 12 | 0 | 0 | 0 | 0 | | Model specificaties | 10 | 8 | 0 | 0 | 0 | 0 | | Bekijk specificaties | 60 | 48 | 0 | 0 | 0 | 0 | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Totaal | 444 | 296 | 12 | 26 | 2 | 9 | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + Code LOC: 136 Test LOC: 160 Code om te testen Ratio: 1: 1,2

aantekeningen

U kunt opmerkingen achterlaten in uw code. Je kunt ze in je opmerkingen bijvoegen met TE DOEN, REPAREER MIJ, OPTIMALISEREN.

Sommige Ruby-bestanden

# FIXME Iets om hier class Agent op te lossen < ActiveRecord::Base belongs_to :operation belongs_to :mission… 

Wanneer je rent rake notities, Rake parseert deze voorvoegsels en krijgt u een lijst met al deze notities uit uw code. 

schelp

app / models / agent.rb: * [1] [FIXME] Er is hier iets dat u kunt oplossen

Je krijgt zelfs een gedetailleerde lijst waar je ze vindt - map, bestandsnaam, regelnummer [Line Number], alles is inbegrepen. Geweldig, toch?

wat betreft

rake over geeft u een o