Rake 101

Acest articol explică elementele de bază ale rakei. Este un instrument de construire foarte popular care este scris în Ruby. Oferă o mulțime de flexibilitate și este folosit pentru a gestiona toate tipurile de sarcini. Dacă utilizați Rails, vă recomand să aruncați o privire sub capota pentru a afla ce sarcini sunt la dispoziția dumneavoastră și cum să vă scrieți.

Subiecte

  • Ce este Rake-ul?
  • Listă de sarcini
  • Noțiuni de bază
  • Spații de nume
  • Cerințe preliminare
  • Trecerea Argumentelor
  • Sarcini de interes

Ce este Rake-ul?

Mulțumită Rails, rake-ul a devenit un standard de facto ca instrument de construcție Ruby. Este foarte popular în comunitatea Ruby. Foarte devreme, echipa din spatele Rails a decis să folosească Rake ca constructor pentru Rails în sine, ceea ce a însemnat că în trecut, când ai descărcat Rails, ai nevoie de o copie a lui Rake. În felul acesta a expus rake la o mulțime de oameni. Puțin mai târziu, a fost inclusă în Ruby (1.9).

Rake a înlocuit de facto utilitatea Unix Make ca un instrument de construcție în terenul Ruby. Un instrument de construcție precum Rake este util pentru automatizarea sarcinilor de diferite tipuri - un software pentru gestionarea sarcinilor practic. Acesta este adesea folosit pentru sarcinile de administrare în Rails - ceea ce este cel mai probabil că ați reușit până acum să-l utilizați, dar cazurile de utilizare sunt o mulțime. Unii oameni scriu ebook-urile lor în Markdown și au creat sarcini Rake care convertesc fișierele relevante la fișiere HTML intermediare, care apoi, la rândul lor, se transformă în formate ebook, de exemplu. Salvează o mulțime de probleme pentru a utiliza Rake pentru asta.

Ceea ce face Rake foarte puternic este că aceste sarcini se pot relaționa una cu cealaltă și pot fi construite una peste alta. De asemenea, deoarece este scrisă în Ruby, puteți scrie orice cod Ruby pentru sarcinile dumneavoastră. Doriți să utilizați bibliotecile Ruby în sarcinile dvs. Rake? Nici o problema! Distractiv: este cel mai descărcat RubyGem, cu peste 100 de milioane de descărcări. Deci, cu siguranță ceva în centura de sculă pe care ar trebui să-i plătești puțină atenție. 

A fost conceput de Jim Weirich, un cunoscut și iubit dezvoltator, vorbitor și contribuitor la ecosistemul Ruby. Este un instrument minunat într-adevăr - mulțumesc, Jim! RIP!

Listă de sarcini

Să aruncăm o privire la unele sarcini pe care Rails le oferă imediat din cutie. Pun pariu că ești puțin surprins de ceea ce este disponibil dacă nu ai verificat înainte. În directorul corespunzător al aplicației sau al Rakefilei, le puteți lista introducând următoarele într-un shell:

rake - tastele # sau rake -T

ieşire:

rake about # Listați versiunile tuturor cadrelor Rails și a celor de pe rake environment: clean [păstrați] # Eliminați activele vechi compilate activele rake: clobber # Eliminați activele rake active: environment # Încărcați activele compilați activele rake mediului: precompilați # Compilați toate activele numit în config.assets.precompile rake cache_digests: dependencies # Lookup dependente de primul nivel pentru TEMPLATE (cum ar fi mesaje / show sau comm ... rake cache_digests: nested_dependencies # Lookup dependente imbricate pentru TEMPLATE (cum ar fi mesaje / show sau comentarii / ... rake db: create # Crează baza de date de la DATABASE_URL sau config / database.yml pentru cu ... rake db: drop # Creează baza de date din DATABASE_URL sau config / database.yml pentru curr ... rake db: fixtures: load # Încărcați fișierele în baza de date actuală a mediului rake db: migrate # Migrați baza de date (opțiuni: VERSION = x, VERBOSE = false, SCOPE = blog) rake db: migrate: status # Afișare stare de migrare rake db: rollback # Rolls schema pe (specificați pașii w / STEP = n) rake db: schema: cache: clear # Ștergeți db / schema_cache.dump rake fișier db: schema: cache: dump creează db / schema_cache.dump rake db: # Creați un fișier db / schema.rb care este portabil împotriva oricărui DB suportat de AR rake db: schema: load # Încărcați un fișier schema.rb în baza de date rake db: seed # Încărcați datele de semințe din db / seeds.rb rake db: setup # Creați baza de date, încărcați schema și inițializați-o cu datele despre semințe ... rake db: structure: dump # Dump structura bazei de date db / structure.sql rake db: structure: load # Refaceți bazele de date din structură. sql file rake db: versiunea # Returnează numărul curent al versiunii schemei rake doc: app # Generați docs pentru aplicație - de asemenea disponibil doc: rails, doc: guides (optio ... rake log: clear # Trunchiază toate fișierele * / la zero octeți (specificați care log-uri cu ... middleware rake # Tipărește rack-ul tău rack middleware stiva note greblă # Enumerați toate adnotările (utilizați note: optimize,: fixme,: todo pentru focalizare) es: custom # Enumerați o adnotare personalizată, specificați cu ANNOTATION = CUSTOM rake rail: template # Aplică șablonul furnizat de LOCATION = (/ path / to / template) sau rake URL rails: update # sau foloseste doar upd ... rute rake # Imprima toate rutele definite în ordinea de potrivire, cu nume rake secret # Generați o cheie secretă criptografic securizată (aceasta este de obicei folosit ... rake spec # Rulați toate specificațiile în spec director spec: controlorii # Rulați exemplele de cod în spec / controler rake spec: caracteristici # Rulați exemplele de cod în spec / caracteristici rake spec: helpers # Rulați exemple de cod în spec / helpers rake spec: modele # Rulați exemple de cod în spec / modele rake spec: views # Rulați exemplele de cod în spec / views statistici rake # Raportați codul statistic (KLOCs, etc) din timpul aplicației sau rake motor: zone: toate # Afișează toate fusurile orare, de asemenea disponibile: , timp: zone: locale ... rake tmp: clear # Ștergeți sesiunea, cache, și fișiere socket de la tmp / (înguste w / tmp: sesiuni ... rake tmp: create # Creează directoare tmp pentru sesiuni, cache, sockets și pids

Producția într-o aplicație Rails este surprinzător de bogată, nu-i așa? Puteți găsi mai multe sarcini la îndemână decât cele obișnuite rake db: migrați sau rake că suntem atât de familiarizați și executați de mai multe ori pe o bază zilnică. 

În stânga, vedeți diferitele sarcini, iar în partea dreaptă, vedeți ceea ce este opțional furnizat ca o descriere a fiecărei sarcini de rake. Dacă doriți să vedeți lista completă, care include printre altele și sarcini care nu au o descriere, trebuie să adăugați un drapel suplimentar.

Coajă:

rake -T -A # sau rake -T-toate

ieşire:

rake about # Listați versiunile tuturor cadrelor Rails și a celor de pe rake environment: clean [păstrați] # Eliminați activele vechi compilate activele rake: clobber # Eliminați activele rake active: environment # Încărcați activele compilați activele rake mediului: precompilați # Compilați toate activele numit în config.assets.precompile rake cache_digests: dependencies # Căutare în dependență de prim nivel pentru TEMPLATE (cum ar fi mesaje / show sau comments / _comment.html) rake cache_digests: nested_dependencies # .html) rake db: _dump # rake db: abort_if_pending_migrations # rake db: charset # rake db: colaționare # rake db: create # creează: pentru a crea toate bazele de date în config) rake db: create: all # rake db: drop # Creează baza de date din DATABASE_URL sau config / database.yml pentru RAILS_ENV curentă (folosiți db: drop: all to drop all databases în config) rake db : drop #: rake db: fixtures: identifică # rake db: fixtures: load # Încărcați fișierele în baza de date actuală a rake db: forward # rake db: load_config # rake db: migrate # Migrați baza de date (opțiuni: VERSION = , VERBOSE = false, SCOPE = blog) rake db: migrați: în jos # rake db: migrați: redo # rake db: migrate: reset # dump rake db: migrate: status # : curățare # rake db: purge: toate rake db: reset # rake db: rollback # Rolls schema înapoi la versiunea anterioară (specificați pașii w / STEP = n) rake db: schema: cache: dump # Creați un fișier db / schema_cache.dump rake db: schema: dump # Creați un fișier db / schema.rb care este portabil împotriva oricărui DB suportat de AR rake db: schema: load # Încărcați un fișier schema.rb în baza de date rake db: schema: load_if_ruby # rake db: seed # Încărcați datele de semințe din db / seeds.rb rake db: setup # Creați baza de date, încărcați schema și inițializați datele despre semințe (utilizați db: resetare de asemenea, să renunțe la baza de date) rake db: structură: dump # Dump structura bazei de date db / structure.sql rake db: structură: încărcare # Refaceți bazele de date din fișierul struct.sql rake db: structure: load_if_sql # rake db: test: clone_schema # rake db: test: clone_structure # rake db: test: rachete db: test: load_structure # rake db: test: load_structure # rake db: test : pregătiți # rake db: test: purge # rake db: version # Returnează numărul actual al versiunii schemei rake default # rake doc # rake doc / app # rake doc / app / created.rid # rake doc: app - disponibil și doc doc: rails, doc: guides (opțiuni: TEMPLATE = / rdoc-template.rb, TITLE = # rake doc: relay # rake doc: reapp # rake doc: rerails # mediu rake # rake html # rake html / created.rid # rake log: clear # cu LOGS = testarea, dezvoltarea) rake magic # rake task rake middleware # imprimă rack dvs. rack middleware stiva rake no_description # note rake # enumerați toate adnotările (utilizați note: optimize, fixe,: todo pentru focalizare) note rake: Adnotare particularizată, specificați cu ANNOTATION = Note CUSTOM pentru rake: note fixe: note # rake: optimize # note rake: todo # rake rails: template # copy # rails rails: update # Actualizați config-urile și alte fișiere generate inițial (sau utilizați doar update: config sau update: bin) rake rails: update: bin # rake rails: update: # Imprimați toate rutele definite în ordinea de potrivire, cu nume rake secret # Generați o cheie secretă criptografic securizată (aceasta este de obicei folosită pentru a genera un secret pentru sesiunile de cookie) rake spec # Rulați toate specificațiile din directorul spec (cu excepția specificațiilor pluginului) : controale # Rulați exemplele de cod în spec / con trollers rake spec: features # Rulați exemplele de coduri în spec / caracteristici rake spec: helpers # Rulați exemplele de cod în spec / helpers rake spec: modele # Rulați exemplele de cod în spec / rake spec: rake spec: rake spec: views # Rulați exemplele de cod în spec / views Statistici rake # Raportează codul statistic (KLOCs, etc) din timpul aplicației sau rake motor: zones: all # Afișează toate fusurile orare, timp: zone: local - filtru cu parametru OFFSET, de exemplu, OFFSET = -6 timp de rake: zone: local # timp rake: zone: usa rake tmp / rake tmp / cache / assets / development # rake tmp / cache / assets / production # rake tmp / cache / assets / test # rake tmp / pids # rake tmp / sesiuni # rake tmp / racks tmp: cache: clear # rake tmp: clear # Ștergeți sesiunile, cache-ul și fișierele socket de la tmp / (înguste w / tmp: sesiuni: clare, tmp: cache: clare, tmp: socket: clear) rampă tmp: create # Crează directoare tmp pentru sesiuni, cache, pids rake tmp : pids: clar # rake tmp: sesiuni: clar # rake tmp: sockets: clear # 

Surpriză, de aproape trei ori mai mult! Aruncati o privire la ele si jucati-va in jur daca doriti, dar angajati amintirile memoriei pentru o utilizare ulterioara in viitor. Verificarea sarcinilor pentru a vedea ce este disponibil poate împiedica reinventarea roții.

Noțiuni de bază

Un Rakefile poate avea una din următoarele cinci apariții:

  • rakefile.rb
  • rakefile 
  • Rakefile
  • Rakefile.rb
  • .rake fișiere

În cea mai mare parte veți vedea câmpia Rakefile dar un cadru ca Rails necesită o organizare mai complexă. Utilizați tot ce curge sângele. Începeți prin a crea un Rakefile sau fișierele cu .greblă dacă doriți să împărțiți sarcini logic pe mai multe fișiere. Apoi definiți-vă sarcinile în oricare dintre ele.

Organizație personalizată pentru rachete

Rails face acest lucru incredibil de ușor. Are un Rakefile în rădăcina aplicației tale. Acesta conține următoarele:

Rakefile

cereți File.expand_path ('... / config / application', __FILE__) Rails.application.load_tasks

Când aveți multe sarcini personalizate, este mai logic să le împărțiți în discrete .greblă fișiere și să le plasați lib / sarcini. Rakefile de mai sus le încarcă, dar lib directorul este o casă logică mai bună pentru sarcini. Există chiar și un generator Rails pentru a automatiza o parte din proces. Dacă tastați:

Coajă

șinele generează some_task => crea lib / tasks / some_task.rake

Veți primi un Rakefile plasat automat în directorul drept. Chiar și sarcina este deja configurată pentru tine. Frumos! În alte proiecte, care nu utilizează Rails, trebuie doar să creați o rakelib și plasați Rakefile-urile acolo - de preferință cu .greblă extensii de fișiere. Apoi creați un fișier numit Rakefile și toate aceste fișiere sunt deja la dispoziția dumneavoastră.

Rata Anatomiei Task

lib / sarcini / some_task.rake

desc "Lista versiunilor tuturor cadrelor Rails și a mediului înconjurător": despre a face pune "Unele magie intră aici ..." sfârșitul

Pentru noii începători Ruby printre voi și pentru cei care vin din limbi grele, așa ar arăta parantezele.

desc ("Versiuni listă a tuturor cadrelor Rails și a mediului") ((about)) pune ("Unele magie intră aici ...") end

Pare foarte ciudat, apropo. Doar pierdeți parantezele suplimentare - nimeni nu scrie sarcini în acest fel.

Am oferit o sarcină numită :despre cu o descriere care nu numai că ne amintește în viitor ceea ce am vrut să realizăm cu sarcini specifice, dar, de asemenea, ne apare atunci când alergăm rake -T. Nu te lăsa leneș din această parte; probabil că nu merită.

Mai jos este sarcina de cuvinte cheie care definește o nouă sarcină numită despre. Acest lucru poate fi invocat pe linia de comandă prin rake despre care își face apoi magia. rake: aproximativ pe de altă parte, va face ca Rake să se întrerupă, neștiind "cum să construiești o sarcină: despre".

Prin se termină bloc, avem lambda, iar corpul său specifică ce face misiunea. Aceasta este setarea de bază pe care va avea nevoie o sarcină. Acesta oferă mai multe opțiuni, desigur, dar structura generală este aceeași. 

cere / importa

Unele Rakefile

cer "./whatever.rb"

Dacă trebuie să includeți alte fișiere Ruby sau Rakefiles, puteți obține cu ușurință un standard necesita afirmație.

Unele Rakefile

import 'whatever.rb'

Rake-ul în sine ne oferă o altă modalitate de a face acest lucru - import metodă. Acest lucru poate fi folosit în orice linie a Rakefile. Acest lucru vă va ajuta atunci când întâmpinați probleme, deoarece fișierul necesar a fost încărcat înainte ca Rakefile-ul să termine încărcarea și să explodeze prin urmare. Fișierul importat, pe de altă parte, se va încărca întotdeauna după Rakefile.

invoca și executa

Uneori este posibil să doriți să executați anumite activități definite de dvs. Sarcină clasa manuală. În acest scop, aveți două metode Rake :: Sarcina clasă: a executa și invoca.

Rake :: Task ['some_task']. Invoca Rake :: Task ['some_task'].

Cu Rake-ul :: Sarcina [ 'some_task'] cod, am primit some_task Rake sarcină pentru a executa. Returnează o instanță a Rake :: Sarcina clasa și apoi rulează orice metodă pe care este disponibilă.

Spații de nume

O caracteristică foarte interesantă este abilitatea de a-ți numi sarcinile. Probabil ați folosit de zeci de ori deja. Când alergi rake db: migrați, ați folosit db spațiul de nume, de exemplu. Invocați sarcina separând-o cu un colon : din spațiul de nume. Spațiile de nume sunt o metodă la îndemână pentru a vă organiza sarcinile într-un fișier rake - le păstrează logic separate. Mai multe spații de nume cum ar fi timpul rake: zone: toate sunt bine, apropo.

Alte exemple includ:

rake db: rake drop db: log rake seed: clar rake spec: specs rake spec: modele rake db: rakeback rake spec: helpers rake spec: caracteristici rake db: schema: rake load load: precompile rake db: migrate:

Unele Rakefile

namespace: db do desc 'Migrarea unor lucruri': migrați până ... end end

Aceasta este setarea de bază. În realitate, este mult mai complicat și poate fi chiar împletit de mai multe ori. Aruncați o privire rapidă la codul de bare Rails și vedeți cum rake db: migrați este implementat. Nu te simti rau daca e peste cap. Uitați-vă în jur, încercați să identificați modul în care este structurat și continuați pentru moment.

Cerințe preliminare

O altă strategie de a vă organiza sarcinile și de a le păstra DRY utilizează premisele necesare pentru executarea unei sarcini. Este ca o dependență care trebuie să ruleze mai întâi înainte ca sarcina reală să-și înceapă activitatea. În acest fel, puteți construi sarcini mai complexe - complexe de care aveți nevoie. Dar aș recomanda să nu devii prea inteligent și să-l păstrați cât mai simplu posibil și cât mai ușor de înțeles posibil.

Unele Rakefile

sarcina: stop_megalomaniac pune "O mulțime de discuții inteligente, urmărirea mașinilor și armele trase" sarcina de sfârșit: bond_saves_the_day =>: stop_psychotic_megalomaniac pune "O mulțime de Dom Pérignon,

Dacă doriți să vă bazați pe mai multe sarcini, le lipiți într-o matrice. Ordinea în care le plasați contează, bineînțeles.

sarcina: get_mr_wolf pune "Nu aveți nici o problemă Jules, sunt pe ea! Du-te acolo și să le răciți și să așteptați lupul care ar trebui să vină direct!" "Dacă am fost informat în mod corect, ceasul bate. E drept Jimmy?" "Jimmy, fă-mi o favoare, nu-i așa? Am mirosit niște cafea înapoi acolo, vrei să-mi faci o ceașcă?" end sarcina: get_vince_vega_in_line pune "Veniți din nou? Ia-l drept buster Nu sunt aici să vă spun vă rog, eu sunt aici să vă spun ce să faceți!" Sarcina la sfarsit: clean_car se pune "Am nevoie de doi oameni pentru a lua acele produse de curatat si pentru a curata interiorul masinii. Vorbesc repede, rapid, rapid!" la sfârșitul misiunii: Clean_crew pune "Jim, săpunul domnilor OK, amândoi ați fost în județ înainte de a fi sigur că iată!" la sfârșitul sarcinii: get_rid_of_evidence_at_monster_joes pune "Deci ce-i cu costumele? Voi o să faceți un joc de volei sau ceva de genul ăsta?" end task: drive_into_the_sunrise pune "sunați-mă Winston!" la sfarsitul sarcinii: solve_bonnie_situation => [: get_mr_wolf,: calm_down_jimmy,: get_vince_vege_situation,: get_vince_vega_in_line,: clean_car,: clean_crew,: get_rid_of_evidence_at_monster_joes,: drive_into_the_sunrise] pune "Stii, m-as duce la micul dejun. ?“ Sfârșit

Dacă executați sarcina de rake care depinde de cealaltă, vom obține următoarea ieșire:

Coajă

$ rake solve_bonnie_situation Nu ai nici o problema Jules, sunt pe ea! Du-te acolo și să le răciți și să așteptați lupul care ar trebui să vină direct! Jimmy, fă-mi o favoare, nu-i așa? Am mirosit ceva cafea acolo. Vrei să-mi faci o ceașcă? Dacă am fost informat corect, ceasul bate. E drept Jimmy? Mai vino? Ia-o drept buster. Nu sunt aici să vă rog vă rog! Sunt aici să vă spun ce să fac! Am nevoie de doi oameni pentru a lua acele produse de curățat și pentru a curăța interiorul mașinii. Vorbesc repede, rapid, rapid! Jim, săpunul! O.K. domnilor, amândoi ați fost în județ înainte de a fi sigur. Uite ca vine! Deci, ce e cu costumele? Voi mergeți la un joc de volei sau ceva? Sună-mă Winston! Știi, m-aș duce la micul dejun. Simțiți-vă ca micul dejun cu mine?

Ordinea în care definiți sarcinile rake nu are niciun efect asupra rezultatului - numai ordinea în care plasați sarcinile prealabile din matrice pentru dependențele de sarcină. De asemenea, vă rugăm să utilizați grupul de discuții => sintaxă pentru acest lucru.

O lungă listă de dependențe ar putea fi un miros de cod. Dacă aveți de-a face cu ceva lung, curățați-l prin încapsularea într-o metodă pe care o vom trece apoi ca o condiție prealabilă.

def mr_wolf_tasks [: get_mr_wolf,: calm_down_jimmy,: get_vince_vege_situation,: get_vince_vega_in_line,: clean_car,: clean_crew,: get_rid_of_evidence_at_monster_joes,: drive_into_the_sunrise] sfarsit ... sarcina: solve_bonnie_situation => mr_wolf_tasks pune "Știți, m-aș duce la micul dejun. Te simți ca și cum ai lua micul dejun cu mine? Sfârșit

În contextul condițiilor prealabile, un lucru pe care trebuie să-l rețineți este că trebuie să menționați doar un spațiu de nume dacă sunteți în afara celui relevant.

Unele Rakefile

: marsellus_wallace face sarcina: call_winston_wolf do ... end task: solve_bonnie_situation => 'marsellus_wallace: call_winston_wolf' nu ... end namespace: marsellus_wallace face sarcina: call_winston_wolf do ... end task: solve_bonnie_situation =>: call_winston_wolf do ... end end

Important este totuși să notați: în cazul în care trebuie să menționați spațiul de nume, trebuie să treci această condiție ca un șir de caractere => 'marsellus_wallace: call_winston_wolf'.

Desigur, exemplele de mai sus sunt exemple nebunești și nu din viața reală, dar intenția a fost să vă arătăm cum funcționează premisele și cum le-ați pus împreună, în timp ce acestea depind una de cealaltă.

Trecerea Argumentelor

Aveți două opțiuni pentru a trece argumentele la sarcinile Rake: fie prin utilizarea variabilelor Bash, fie prin utilizarea sintaxei Rake.

Variabilă ENV

În cazul în care nu ați mai jucat cu Bash înainte - sau Bash suna ca un gobbledegook pentru tine - să luăm cinci și să începem de la început. Bash din coajă oferă două tipuri de variabile: variabilele globale (aka mediu) și cele locale. Ambele sunt scrise cu majuscule. Variabilele de mediu sunt globale, ceea ce înseamnă că ele sunt disponibile în toate cochilii și nu dispăreau atunci când închideți una - spre deosebire de variabilele locale Bash, care sunt disponibile numai în shell-ul curent. 

Variabilele de mediu pot conține date care pot fi utilizate de mai multe aplicații și sunt adesea folosite ca modalitate de a partaja setările de configurare. În contrast cu aceasta, variabilele locale Bash sunt doar cele locale. În contextul nostru de utilizare a Rake-ului, aveți abilitatea de a accesa atât prin Ruby, cât și prin transferul variabilelor din linia de comandă.

FYI

Doar ca un pic deoparte, dacă tastați env sau ENV în coajă, veți avea acces la o grămadă de variabile de mediu. Am redactat lista, dar pentru a înțelege mai bine ce variabile de mediu sunt și ce includ ele, vă încurajez să o faceți pentru dvs..

Coajă

env

producție

TERM_PROGRAM = Apple_Terminal TERM = ecranul-256color SHELL = / bin / bash TMUX = / privat / var / foldere / 4z / 3np9k5ks62b1xpbn_w_lmrgh0000gr / T / tmux-504 / implicit, 4146,0 EDITOR = vim LANG = en_US.UTF-8 TMUX_PANE = % 1 este_vim = echo "# pane_current_command" | grep -iqE "(^ | \ /) g? (vezi | n? vim? x?) (diff)? $" ... 

Dacă doriți să vedeți o listă de variabile locale Bash, puteți rula a stabilit.

Coajă

(set -o posix; set) Mai puțin

a stabilit comanda vă oferă mult mai multă putere, dar cele de mai sus vă arată imediat biții relevanți.

Rubrica din clasa ENV

Ruby oferă o modalitate de a utiliza variabilele de mediu și locale Bash, deopotrivă, printr-un accesoriu de tip hash. Pentru nevoile noastre, atunci când trecem o variabilă la o sarcină Rake, va fi o variabilă locală Bash, pe care o puteți găsi în lista de variabile care rulează a stabilit sau o variantă a acesteia. Ruby îl poate citi ENV [ 'VARIABLE'].

Coajă

rake prepare_book BOOKTITLE = "Confesiunile unui unicorn"

Ceea ce vreau să clarific, totuși, este că această variabilă nu se va adăuga la lista ENV folosită de sistem - lucrurile pe care le-ați văzut apelând env din coajă. Pentru ao adăuga la lista respectivă, ar trebui să o faceți export aceasta. Aceasta este o altă poveste, dar am crezut că ar trebui să fac acest lucru clar.

Unele Rakefile

sarcină: prepare_book do book_title = ENV ['BOOKTITLE'] || "Titlu de lucru" pune "Faceți ceva cu capătul # book_title"

În această definiție a sarcinii, puteți vedea modul în care am pregătit să acceptăm sau să încorporăm variabila transmisă invocării sarcinii. Ruby ENV [BASHVARIABLE] face toate ridicările grele. Dacă TITLUL CARTII a fost o variabilă de mediu globală, deși am fi putut să-l accesăm și în această definiție a sarcinii cu această sintaxă.

Rata de sintaxă a parametrilor

A doua abordare este folosirea sintaxei pure Rake. Pur și simplu treceți variabilele în bretele pătrate. Această abordare este mai bună și puteți menține lucrurile mai izolate. De ce implică Bash dacă Rake este perfect capabil să se ocupe de asta? În plus, nu aveți variabile Bash care plutesc în acest fel. Dacă doriți să treceți mai multe argumente într-o sarcină, este și mai elegantă.

Coajă

rake "create_mi6_agent [James, Bond, 007]"

Unele Rakefile

sarcină: create_mi6_agent, [: first_name,: last_name,: number] do | t, args | pune "Numărul # args.number este comandantul # args.first_name # args.last_name." Sfârșit

Când treceți mai multe argumente decât le-ați definit în sarcina dvs., le puteți accesa pur și simplu prin intermediul acestora args. args.extras afișează o matrice a tuturor parametrilor adițional transmiși. args.to_a vă arată toți parametrii - și într-o matrice, bineînțeles.

Sarcini de interes

Mai jos este o scurtă listă de sarcini Rake care vin cu Rails:

  • db
  • medic
  • tmp
  • statistici
  • notițe
  • despre
  • secret
  • bunuri
  • rute

db

Mai jos sunt câteva sarcini utile în cadrul db spațiu de nume pentru rularea migrărilor Active Record:

rake db: versiune imprimă versiunea curentă a schemei. Rezultatul arată astfel:

Versiunea actuală: 20160129135912

rake db: migrați execută ultima migrare (ulterioare) - cele care nu au rulat încă. De asemenea, puteți să-i transmiteți o migrare specifică pentru a rula.

Coajă

rake db: migrați VERSION = 20080906120000

rake db: creați creează baza de date. În cazul în care este implicit la dezvoltarea și testarea bazelor de date.

db / development.sqlite3 db / test.sqlite3

rake db: test: pregătiți asigurați-vă că migrațiile care sunt deja difuzate în baza de date de dezvoltare se execută, de asemenea, pentru baza de date de testare. Dacă schema bazei de date de testare nu se sincronizează cu baza de date de dezvoltare, nu ar fi foarte util, bineînțeles.

rake db: drop: toate creează în mod implicit baze de date de testare și de dezvoltare.

rake db: migrație: în sus, rake db: migrați: în jos rulează sus și jos metode pentru migrația în cauză.

rake db: redo vă asigură că, după ce ați efectuat o migrare, migrarea este reversibilă. Fuge rake db: în jos mai întâi și apoi rake db: sus.

rake db: rollback anulează ultima migrare.

rake db: picătură picături de baze de date de dezvoltare și testare în mod implicit.

rake db: resetare aruncă mai întâi bazele de date și le va instala din nou încărcând schema și însămânțând baza de date.

medic

rake doc: app generează documentația în conformitate cu doc / app. Creează pagini HTML despre codul sursă pentru navigarea ușoară. Destul de la moda!

screenshot

rake doc: șine generează o documentație API sub doc / api-de asemenea, ca pagini HTML. Disponibil dacă sunteți offline, cred.

tmp

tmp directorul din directorul rădăcină al aplicației dvs. Rails este locul pentru fișierele temporare - fișierele cele mai vizibile pentru sesiuni și memoria cache. rake tmp: creați vă stabilește tot ce aveți nevoie pentru a vă ocupa de fișierele temporare. rake tmp: cache: clar șterge tmp / cache director. rake tmp: sesiuni: clar șterge tmp / sesiuni director.

statistici

rake stats vă oferă o imagine de ansamblu frumoasă a aplicației dvs..

+----------------------+-------+-------+---------+---------+-----+-------+ | Nume | Linii | LOC | Clase | Metode | M / C | LOC / M | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Controlere | 89 | 69 | 6 | 18 | 3 | 1 | | Ajutor | 13 | 13 | 0 | 1 | 0 | 11 | | Modele | 89 | 54 | 6 | 7 | 1 | 5 | | Mailers | 0 | 0 | 0 | 0 | 0 | 0 | | Javascripts | 25 | 0 | 0 | 0 | 0 | 0 | | Biblioteci | 0 | 0 | 0 | 0 | 0 | 0 | | Specificațiile controlerului 99 | 81 | 0 | 0 | 0 | 0 | | Caracteristici tehnice 14 | 11 | 0 | 0 | 0 | 0 | | Caracteristici helper | 45 | 12 | 0 | 0 | 0 | 0 | | Model spec 10 | 8 | 0 | 0 | 0 | 0 | | Vizualizați specificațiile 60 | 48 | 0 | 0 | 0 | 0 | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + | Total | 444 | 296 | 12 | 26 | 2 | 9 | + ---------------------- + ------- + ------- + --------- + --------- + ----- + ------- + Cod LOC: 136 Test LOC: 160 Cod de raport de testare: 1: 1,2

notițe

Puteți lăsa note în codul dvs. Vă puteți prefixa în comentariile dvs. cu A FACE, FIXME, OPTIMIZAREA.

Unele fișiere Ruby

# FIXME Ceva pentru a stabili agentul de clasă aici < ActiveRecord::Base belongs_to :operation belongs_to :mission… 

Când alergi rake note, Rake analizează aceste prefixe și vă oferă o listă a tuturor acestor note din codul dvs.. 

Coajă

app / models / agent.rb: * [1] [FIXME] Ceva de rezolvat aici

Obțineți chiar și o listă detaliată unde le găsiți - directorul, numele fișierului, numărul liniei [Numărul liniei], totul este inclus. Minunat, corect?

despre

rake despre vă oferă o prezentare generală a numerelor de versiuni pentru:

  • Șine
  • Rubin
  • RubyGems
  • Adaptor de date
  • Versiune de schemă
  • middleware
  • Rădăcină de aplicații

și multe alte informații utile.

secret

Dacă sunteți paranoic cu privire la cheia sesiunii și doriți să o înlocuiți, rake secret va genera o nouă cheie pseudo-aleatoare pentru dvs. Nu înlocui cheia pentru tine, totuși. Ieșirea din coajă arată astfel:

b40a74b94cd93fed370fd4f8f9333633c03990b7d9128383511de5240acf3fa6b6b07127e875814fdadb32f1aa44d69c4e82592b0ce97f763ea216a21e61881d

bunuri

rake assets: precompilați vă permite să vă precomprimați activele sub publice / active. Dacă vrei să scapi de active mai vechi, fugi rake assets: curat. În cele din urmă, alergând rake assets: clobber șterge întregul publice / active director.

rute

rake ar putea fi cea mai importantă. Vă arată toate rutele din aplicația dvs..

Gândurile finale

Scrierea sarcinilor Rake fara sa stie ce se intampla sub capota devine plictisitor destul de repede. Acest articol a fost un pic de warm-up și introducere pentru cei care au vrut să privească în Rake pentru prima dată. 

Sper că a acoperit toate elemente

Cod