ActveRecord ActiveRecord::Migrtion ActveRecord::Mraton E|empo smpe E|empo menos smpe Transformacones dsponbes Transformacones rreversbes Creacn ye|ecucn de mratons desde Ras Ms e|empos Soportede base de datos Uso de un modeo despus de cambar su taba Contro de verbosdad Acercade a taba schema_mratons Mracones con marcade tempo Mracones reversbes Mratons con e comando Rake rake db:mrate rake db:mrate:status rake db:roback Referencas Losmratons (mracones) pueden mane|ar aevoucn de esquema utzado por varasbases dedatos. Es unasoucn a probema comn de arear un campo parauna nueva funconadad en su basede datos y de no estar muy seurode cmo empu|ar os cambos y notfcar a sus compaeros ene desarroo y haca aapcacn en produccn. Conas mraconesde ARusted puede descrbr as transformacones enuna case autocontenda quepuede nsertar en su sstemade contro de versonesy e|ecutaras versus abase de datos quepuede ben estar una, doso cnco versonesatrasada. Ejemplo simple 1class AddSsl < Acl1vRcord..M1ral1on 2 di up 3 add_column .cunlas, .ssl_hab1l1lado, .boolan, .diaull => 1 4 nd 5 6 di doWn 7 rmov_column .cunlas, .ssl_hab1l1lado 8 nd 9nd Esta mracnarear unabandera de tpo boo a ataba cuents y remover dcha coumna s est devovendo e cambo de dcha mracn. Muestracomo todas asmracones tenen dosmtodos, up y down, que descrben astransformacones requerdas a mpementar o remover a momentode e|ecutar a mracn. Dchos mtodospueden consstr detanto os mtodos especfcosde mracn comoadd_coumn y remove_coumn perotambn pueden contener cdo Ruby reuar para enerar datos necesaros para astransformacones. Ejemplo menos simple Une|empo unpoco ms compe|oque requere ncazar datos sue a contnuacn: 1class AddSyslmSll1ns < Acl1vRcord..M1ral1on 2 di up 3 cral_labl .ausls_dl_s1slma do ]l] 4 l.slr1n .nombr 5 l.slr1n .l1qula 6 l.lxl .valor 7 l.slr1n .l1po 8 l.1nlr .pos1c1on 9 nd 10 11 SyslmSll1n.cral .nombr => "nol1c", 12 .l1qula => "us nol1c?", 13 .valor => 1 14 nd 15 16 di doWn 17 drop_labl .ausls_dl_s1slma 18 nd 19nd 2 AcIiveRecordMigrIion - Ruby - Comix (reIurbished) 22/02/13 19:26:2S hIIp://gomix.Iedor-ve.org/pro|ecIs/ruby/wiki/AcIiveRecordMigrIion Esta mracnprmero areaa tabaa|ustes_de_sstema, ueo crea a prmerafa endcha taba utzando e modeo Actve Recordque est soportadopor dcha taba. Tambn se haceuso de asntaxs ms avanzada de create_tabe endonde usted puede especfcar e esquema competo de ataba enun amada tpoboque. Trnsformciones disponibles crete_tble(nombre, opciones): Crea unataba amadanombre y dsponbzae ob|eto tabaa boqueque puede areare coumnas suendoe msmo formatoque dd_column. E hashopcones es para framentoscomo "DEFAULT CHARSET=UTF-8" queson areados a a defncnen a creacn de ataba. drop_tble(nombre): Emna ataba amadanombre. renme_tble(old_nombre, new_nombre): Renombra a tabaamadaold_nombre a new_nombre. dd_column(tble_nombre, column_nombre, tipo, opciones): Area una nueva coumna a ataba table_nombreamada colmn_ nombreespecfcada con e tpode datos: :strn, : text, : nteer, : foat, :decma, :datetme, :tmestamp, :tme, :date, :bnary, :booean. Sepuede especfcar un vaor por omsnpasando un hashopciones como { :defaut => 11 }. Otras opcones posbesson :mt y :nu (e.. { :mt => 50, :nu => fase}). renme_column(tble_nombre, column_nombre, new_column_nombre): Renombrauna coumna mantenendo e tpo de dato y e contendo. chnge_column(tble_nombre, column_nombre, tipo, opciones): Camba e tpo de unacoumna a un tpo dferenteutzando os msmosparmetros que dd_column. remove_column(tble_nombre, column_nombres): Remuevea coumnas stadasen colmn_nombresde a tabaamada table_ nombre. dd_index(tble_nombre, column_nombres, opciones): Area un ndcecon e nombrede a coumna. Otras opconesncuyen :name, :unque(e.. { :name => "users_nombre_ndex", :unque=> true }) y :order (e.. { :order => {:name => :desc} }). remove_index(tble_nombre, :column => column_nombre): Remueve e ndce especfcado por colmn_nombre. remove_index(tble_nombre, :nme => index_nombre): Remueve e ndceespecfcado por index_nombre. Trnsformciones irreversibles Aunastransformacones son destructvasde formasque no pueden ser reversadas. Las mraconesde este tpodeben anzar aexcepcn ActveRecord:: IrreversbeMraton ensu mtodo down. Crecion y ejecucion de migrtions desde Rils E paquete Ras tenevaras herramentas paraayudare en acreacn y a apcacn deas mracones. Para aeneracn deun nuevo mraton puede usar: ra1ls nral m1ral1on M1NuvaM1rac1on endonde MNuevaMracon es e nombre desu mraton. E enerador crear un archvo de mraton vaco cone nombre marcadetempo_my_new_ mraton.rb en e drectoro db/mrate/ endonde marcadetempo es a fechay hora con formatoUTC en que fu enerado e archvo. Lueo puede ustededtar os mtodosp y down en MNuevaMracon. Hay un ata|osntctvo para enerar os mratons quepuede arer campos a unataba. ra1ls nral m1ral1on add_i1ldnam_lo_lablnam i1ldnam.slr1n Esto enerare archvo tmestamp_add_fedname_to_tabename, que ucr como: 1class AddI1ldnamToTablnam < Acl1vRcord..M1ral1on 2 di up 3 add_column .lablnams, .i1ldnam, .slr1n 4 nd 5 6 di doWn 7 rmov_column .lablnams, .i1ldnam 8 nd 9nd Paraapcar as mraconesversus a basede datos actuamente confurada, userake db:migrate. Esto actuazara base dedatos e|ecutando todosos mratonspendentes creandoa tabaschema_migrations s no exsta ya. Tambn se nvocara tarea db: schema:dump queactuazar e archvo db/ schema.rb paraque concdacon a estructurade su base dedatos. Paradevover a basede datos a unaversn preva, use rakedb:mrate VERSION=X en donde X es aversn a a que deseadevoverse. S cuaquer deos mratons anza unaexcepcn ActveRecord: :IrreversbeMraton dcho pasofaar y usted tendr que reazar e traba|o manuamente. Ms ejemplos Notodas as mraconescamban e esquema. Aunossmpemente reparanos datos deauna manera. 1class RmuvTasvac1os < Acl1vRcord..M1ral1on 2 di up 3 AcIiveRecordMigrIion - Ruby - Comix (reIurbished) 22/02/13 19:26:2S hIIp://gomix.Iedor-ve.org/pro|ecIs/ruby/wiki/AcIiveRecordMigrIion 3 Ta.all.ach { ]la] la.dslroy 1i la.pa1nas.mply? ) 4 nd 5 6 di doWn 7 # no podmos hacr nada para rslaurar los dalos prd1dos 8 ra1s Acl1vRcord..Trrvrs1blM1ral1on, "No s pudn rcuprar las l1m1nados" 9 nd 10nd Otrasmracones remueven coumnas cuando mranhaca adeante envez de haca atrsen e esquema: 1class RmuvAlr1bulosTlmTnncsar1os < Acl1vRcord..M1ral1on 2 di up 3 rmov_column .1lms, .canl1dad_1lms_1ncompllos 4 rmov_column .1lms, .canl1dad_1lms_compllados 5 nd 6 7 di doWn 8 add_column .1lms, .canl1dad_1lms_1ncompllos 9 add_column .1lms, .canl1dad_1lms_compllados 10 nd 11nd Aunasveces necesta hacer ao con SOL que no est actuamentecuberto por asabstraccones de as mraconesde Actve Record: 1class RacrJo1nun1co < Acl1vRcord..M1ral1on 2 di up 3 xcul "ALTER TABLE `pa1nas_nlazadas_pa1nas` A00 uNTuE `pa1na_1d_pa1na_nlazada_1d` {`pa1na_ 1d`,`pa1na_nlazada_1d`}" 4 nd 5 6 di doWn 7 xcul "ALTER TABLE `pa1nas_nlazadas_pa1nas` 0R0P TN0EX `pa1na_1d_pa1na_nlazada_1d`" 8 nd 9nd Soporte de bse de dtos Lasmracones ARestn actuamente soportadaspara MySOL, PostreSOL, SOLte, SOL Server, Sybase y Orace(todasas bases dedatos soportadas exceptoDB2). Uso de un modelo despues de cmbir su tbl Aunasveces ustedquerr arear unacoumna en una mracny pobara nmedatamentedespus. En dcho caso, usted necestar hacer una amadaa Base#reset_coumn_nformaton cona fnadad de aseurarsede quee modeo teneos datos ms recentesacerca de sus coumnas despus dehaber sdoareada a nueva coumnda. E|empo: 1class ArarSalar1oPrsona < Acl1vRcord..M1ral1on 2 di up 3 add_column .prsona, .salar1o, .1nlr 4 Prsona.rsl_column_1niormal1on 5 Prsona.all.ach do ]p] 6 p.updal_allr1bul .salar1o, CalculadoraSalar1o.compul{p} 7 nd 8 nd 9nd Control de verbosidd Por omsnas mraconesdescrbrn asaccones que se estn e|ecutandoescrbndoas en aconsoa en amedda en que se vane|ecutando |untocon asmedcones de tempodescrbendo qu tanto se tarda cadauna. Ustedpuede sencaras a|ustando ActveRecord: :Mraton.verbose= fase. Tambnpuede nsertar sus propos mensa|es y medcones usando e mtodosay_wth_tme: 1di up 2 ... 3 say_W1lh_l1m "Aclual1zando salar1os..." do 4 Prsona.all.ach do ]p] 5 p.updal_allr1bul .salar1o, CalculadoraSalar1o.compul{p} 4 AcIiveRecordMigrIion - Ruby - Comix (reIurbished) 22/02/13 19:26:2S hIIp://gomix.Iedor-ve.org/pro|ecIs/ruby/wiki/AcIiveRecordMigrIion 6 nd 7 nd 8 ... 9nd Lafrase "Actuazandosaaros..." sera entoncesmpresa |untoa as medcones para e boque cuando e boque se compete. Acerc de l tbl schem_migrtions Rasverson 2.0 y anterores creabanuna tabaamadaschema_nfocuando usaban as mracones. Esta tabacontena aversn de esquema de acuerdoa a tma mracn. Apartr de Ras 2.1 ataba schema_nfo es automtcamenterempazada ataba schema_mratons quecontene os nmerosde versn de todas as mraconesapcadas. Comoresutado ahora es posbearear archvos demracones quesean numeradas menor a aversn actua de esquema: cuando mrehaca adeante, dchas mraconesntercaadasno apcadas sern automtcamente apcadas y cuando mrehaca atrs, as mraconesntercaadasno apcadas prevamentesern evtadas. Migrciones con mrc de tiempo Por omsnRas eneramracones queucen como: 20120717013526_nombr_su_m1rac1on.rb E pref|o a nombrees una marcad de tempoen formatoUTC. S prefere usar pref|os numrcos smpes, puede desactvcar asmracones conmarca de tempo: 1coni1.acl1v_rcord.l1mslampd_m1ral1ons = ials enappcaton.rb. Migrciones reversibles Apartr de Ras 3.1 es posbedefnr mracones reversbes. Lasmracones reversbesson mracones quesaben comor haca atrs (down) por usted. Ustedsmpemente sumnstra aca de r haca adeante(up) y e sstema de mraconessabr cmo e|ecutar haca atrs(down) por usted. Paradefnr una mracn reversbedefna e mtodochane en su mracn, as: 1class M1rac1onElanl < Acl1vRcord..M1ral1on 2 di chan 3 cral_labl{.anda} do ]l] 4 l.column .conln1do, .lxl 5 l.column .rcurdam_l, .dall1m 6 nd 7 nd 8nd Esta mracncrear a tababurros por usted a r haca adeantey automtcamente sabr cmoemnar ataba cuando mrehaca atrs (down). Aunoscomandos como remove_coumn no pueden reversarse. S desea ocuparsede defnr como r adeantey atrs, debe defnr osmtodos up y downcomo ya se ha expcado prevamente. S un comando no puede ser reversado se anzar unaexcepcn ActveRecord:: IrreversbeMraton cuando amracn haca atrssea e|ecutada. Parasaber cues son os comandos reversbesvea ActveRecord: :Mraton: :CommandRecorder. Migrtions con el comndo Rke rak db.aborl_1i_pnd1n_m1ral1ons # Ra1ss an rror 1i lhr ar pnd1n m1ral1ons rak db.cral # Cral lh dalabas di1nd 1n coni11dalabas.yml ior lh currnl RATLS_ENv rak db.cral.all # Cral all lh local dalabass di1nd 1n coni11dalabas.yml rak db.drop # 0rops lh dalabas ior lh currnl RATLS_ENv rak db.drop.all # 0rops all lh local dalabass di1nd 1n coni11dalabas.yml rak db.m1ral # M1ral lh dalabas lhrouh scr1pls 1n db1m1ral and updal db1schma.rb by 1nvok1n db.schm S AcIiveRecordMigrIion - Ruby - Comix (reIurbished) 22/02/13 19:26:2S hIIp://gomix.Iedor-ve.org/pro|ecIs/ruby/wiki/AcIiveRecordMigrIion a.dump. Tarl spc1i1c vrs1on W1lh vERST0N=x. Turn oii oulpul W1lh vERB0SE=ials. rak db.m1ral.doWn # Runs lh "doWn" ior a 1vn m1ral1on vERST0N. rak db.m1ral.rdo # Rollbacks lh dalabas on m1ral1on and r m1ral up. rak db.m1ral.rsl # Rsls your dalabas us1n your m1ral1ons ior lh currnl nv1ronmnl rak db.m1ral.up # Runs lh "up" ior a 1vn m1ral1on vERST0N. rak db.rsl # 0rops and rcrals lh dalabas irom db1schma.rb ior lh currnl nv1ronmnl. rak db.rollback # Rolls lh schma back lo lh prv1ous vrs1on. rak db.schma.dump # Cral a db1schma.rb i1l lhal can b porlably usd aa1nsl any 0B supporld by AR rak db.schma.load # Load a schma.rb i1l 1nlo lh dalabas rak db.slruclur.dump # 0ump lh dalabas slruclur lo a SL i1l rak db.lsl.clon # Rcral lh lsl dalabas irom lh currnl nv1ronmnl`s dalabas schma rak db.lsl.clon_slruclur # Rcral lh lsl dalabass irom lh dvlopmnl slruclur rak db.lsl.load # Rcral lh lsl dalabas irom lh currnl schma.rb rak db.lsl.prpar # Chck ior pnd1n m1ral1ons and load lh lsl schma rak db.lsl.pur # Emply lh lsl dalabas rak db.vrs1on # Rlr1vs lh currnl schma vrs1on numbr rke db:migrte $ rak db.m1ral == CralTaproduclos. m1ral1n ============================================= -- cral_labl{.laproduclos} -> 0.0916s == CralTaproduclos. m1rald {0.0927s} ==================================== == Cral0llms. m1ral1n ================================================ -- cral_labl{.dllms} -> 0.0025s == Cral0llms. m1rald {0.0071s} ======================================= rke db:migrte:sttus $ rak db.m1ral.slalus dalabas. db1dvlopmnl.sql1l3 Slalus M1ral1on T0 M1ral1on Nam -------------------------------------------------- doWn 20120730235624 Cral produclos doWn 20120730235724 Cral laproduclos doWn 20120731003205 Cral dllms $ rak db.m1ral.slalus dalabas. db1dvlopmnl.sql1l3 Slalus M1ral1on T0 M1ral1on Nam -------------------------------------------------- up 20120730235624 Cral produclos doWn 20120730235724 Cral laproduclos doWn 20120731003205 Cral dllms rke db:rollbck $ rak db.rollback 6 AcIiveRecordMigrIion - Ruby - Comix (reIurbished) 22/02/13 19:26:2S hIIp://gomix.Iedor-ve.org/pro|ecIs/ruby/wiki/AcIiveRecordMigrIion $ rak db.rollback == Cral0llms. rvrl1n ================================================ -- drop_labl{"dllms"} -> 0.0011s == Cral0llms. rvrld {0.0071s} ======================================= $ rak db.rollback STEP=2 == Cral0llms. rvrl1n ================================================ -- drop_labl{"dllms"} -> 0.0010s == Cral0llms. rvrld {0.0049s} ======================================= == CralTaproduclos. rvrl1n ============================================= -- drop_labl{"laproduclos"} -> 0.0009s == CralTaproduclos. rvrld {0.0027s} ==================================== Referencis http:/ /ap.rubyonras.or/casses/ ActveRecord/Mraton.htm
Inteligencia artificial: Lo que usted necesita saber sobre el aprendizaje automático, robótica, aprendizaje profundo, Internet de las cosas, redes neuronales, y nuestro futuro