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.
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!
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
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.
rake -T -A # sau rake -T-toate
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.
Un Rakefile poate avea una din următoarele cinci apariții:
Î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.
Rails face acest lucru incredibil de ușor. Are un Rakefile în rădăcina aplicației tale. Acesta conține următoarele:
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:
ș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ă.
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.
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.
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.
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ă.
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:
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.
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.
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:
$ 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.
: 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ă.
Aveți două opțiuni pentru a trece argumentele la sarcinile Rake: fie prin utilizarea variabilelor Bash, fie prin utilizarea sintaxei Rake.
Î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ă.
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..
env
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
.
(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.
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']
.
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.
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ă.
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ă.
rake "create_mi6_agent [James, Bond, 007]"
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.
Mai jos este o scurtă listă de sarcini Rake care vin cu Rails:
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.
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.
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!
rake doc: șine
generează o documentație API sub doc / api
-de asemenea, ca pagini HTML. Disponibil dacă sunteți offline, cred.
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.
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
Puteți lăsa note în codul dvs. Vă puteți prefixa în comentariile dvs. cu A FACE
, FIXME
, OPTIMIZAREA
.
# 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..
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?
rake despre
vă oferă o prezentare generală a numerelor de versiuni pentru:
și multe alte informații utile.
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
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.
rake
ar putea fi cea mai importantă. Vă arată toate rutele din aplicația dvs..
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