Acest depozit este arhivat si nu mai este intretinut in mod activ de @rtomayko incepand cu 08.11.2017. Problemele si PR-urile care documenteaza problemele actuale au fost lasate in mod intentionat deschise in scop informativ.

Proiectul a inceput la GitHub pentru a simplifica procesul de obtinere a datelor reale de productie in mediile de dezvoltare si etapizare. Il folosim pentru a reproduce date complete ale depozitului (inclusiv problemele asociate, cererea de extragere, comentariile de validare etc.) de la productie la mediile noastre de dezvoltare cu o singura comanda. Este extrem de util pentru depanarea problemelor, cererile de asistenta si rapoartele de exceptie, precum si pentru stabilirea datelor reale pentru evaluarea conceptelor de proiectare.

Rezumat

Se instaleaza

Aruncarea obiectelor

Evaluati o expresie Ruby, aruncand toate obiectele rezultate la iesirea standard:

$ replicate -r ./config/environment -d “User.find (1)”> user.dump ==> a aruncat 4 obiecte in total: Profil 1 Utilizator 1 Utilizator Email 2

Optiunea -r ./config/environment este utilizata pentru a necesita configurarea mediului si modelarea codului de instantiere necesar expresiei ruby.

Renuntarea la multe obiecte cu un script de descarcare

Scripturile Dump sunt fisiere sursa ruby ​​normale evaluate in contextul basculantului. Metoda dump (obiect) este utilizata pentru a pune obiecte in fluxul de dump.

# config / replicate / dump-stuff.rb necesita „config / environment”% w [rtomayko / tilt rtomayko / bcat] .each do | repo_name | repo = Repository.find_by_name_with_owner (repo_name) dump repo dump repo.commit_comments dump repo.issues end

Rulati scriptul de dump:

$ replicate -d config / replicate / dump-stuff.rb> repos.dump ==> a aruncat 1479 obiecte totale: AR :: Habtm 101 CommitComment 95 Numar 101 Numar comentariu 427 IssueEvent 308 Eticheta 5 Limba 19 LimbaNume 1 Etapa 3 Organizatie 4 Profil 82 PullRequest 44 PullRequestReviewComment 8 Repository 20 Echipa 4 TeamMember 6 User 89 UserEmail 162

Incarcarea mai multor obiecte:

$ replicate -r ./config/environment -l <repos.dump ==> incarcat 1479 obiecte totale: AR :: Habtm 101 CommitComment 95 Issue 101 IssueComment 427 IssueEvent 308 Label 5 Language 19 LanguageName 1 Etapa 3 Organizare 4 Profile 82 PullRequest 44 PullRequestReviewComment 8 Repository 20 Team 4 TeamMember 6 User 89 UserEmail 162

Aruncarea si incarcarea peste ssh

$ remote_command = “replicate -r / app / config / environment -d ‘User.find (1234)'” $ ssh example.org “$ remote_command” | replicate -r ./config/environment -l

ActiveRecord

Este inclus suportul de baza pentru incarcarea si incarcarea obiectelor ActiveRecord. Testele trec sub versiunile ActiveRecord 2.2.3, 2.3.5, 2.3.14, 3.0.10, 3.

edurne follando mi vecina desnuda
porno incesto real peliculas porno travestis
tv porno peliculas porno de incesto en español
mamas cachondas maduras impresionantes
viejas tetonas maduras latex
escenas porno en cine convencional porno flash
porno con abuelas mamadas en el cine
videos gays argentinos guarras masturbandose
penes grandes se corre dentro de su prima
se follan a su mujer orgias abuelas
videos de zofilia fotos de poyas
videos travestis española pillada
putas en vic obliga a su hermana a follar
tetudas españolas cerdas com gratis
maduras españolas masturbandose maduras españolas sexo
porno sub viendo como se follan a mi mujer
taboo.com orgasmosxxx
gitanas xxx hombres corriendose
videosdeincesto se deja follar
pelis porno españolas incesto abuela y nieto

1.0 si 3.2.0 sub RMN 1.8.7, precum si sub RMN 1.9.2.

Pentru a utiliza macrocomenzile de personalizare in modelele dvs., solicitati replicarea bibliotecii dupa ActiveRecord (de exemplu, config / initializers / libraries.rb):

necesita „active_record” necesita „replica”

Suportul ActiveRecord functioneaza sensibil fara personalizare, deci acest lucru nu este strict necesar pentru a utiliza comanda de replicare. Urmatoarele sectiuni documenteaza macro-urile de personalizare disponibile.

Asociere Dumping

Suportul copt adauga un comportament implicit mai mult sau mai putin sensibil pentru toate subclasele ActiveRecord :: Base, astfel incat sa arunce un obiect va aduce obiecte legate prin asocierile belong_to si has_one.

Spre deosebire de asociatiile 1: 1, asociatiile has_many si has_and_belongs_to_many nu sunt incluse automat. O astfel de actiune ar duce rapid la absorbtia intregii baze de date. Poate fi util sa marcati asociatii specifice pentru includerea automata utilizand macrocomanda replicate_associations. De exemplu, pentru a include intotdeauna inregistrari EmailAddress apartinand unui utilizator:

clasa Utilizator <ActiveRecord :: Baza apartine_to: profilul are_many: adrese_email replicate_associations: adrese_email end

Puteti face acest lucru, de asemenea, trecand o optiune in scriptul de dump:

dump User.all,: associations => [: email_addresses]

Chei naturale

In mod implicit, incarcatorul incearca sa creeze o noua inregistrare cu un nou cod cheie primara pentru toate obiectele. Acest lucru poate duce la erori de constrangere unice atunci cand exista deja o inregistrare cu atribute potrivite. Pentru a actualiza inregistrarile existente in loc sa le creati, definiti o cheie naturala pentru model folosind macrocomanda replicate_natural_key:

clasa Utilizator <ActiveRecord :: Baza apartine_to: profilul are_many: adrese_e-mail replicate_natural_key: autentificare replicate_associations: adrese_e-mail clasa finala Adresa e-mail <ActiveRecord :: Baza apartine_to: utilizator replicate_natural_key: utilizator_id,: e-mail sfarsit

Mai multe nume de atribute pot fi specificate pentru a defini o cheie compusa. Atributele coloanei cheii straine (user_id) sunt adesea incluse in cheile naturale.

Omiterea atributelor si asocierilor

S-ar putea sa doriti sa excludeti anumite atribute sau asociatii de la eliminarea acestora. Pentru aceasta, utilizati macrocomanda replicate_omit_attributes:

clasa Utilizator <ActiveRecord :: Base has_one: profile replicate_omit_attributes: created_at,: profile end

Puteti omite asocierile apartenente la omiterea coloanei cu cheie straina.

Puteti face acest lucru, de asemenea, trecand o optiune in scriptul de dump:

dump User.all,: omit => [: profil]

Validari si apeluri de apel

IMPORTANT: Toate validarile ActiveRecord si apelurile de apel sunt dezactivate in partea de incarcare. In timp ce replica piggyback-urile pe AR pentru informatii despre relatii si foloseste ActiveRecord :: Base # save pentru a scrie obiecte in baza de date, este conceput pentru a actiona ca un instrument simplu de incarcare / incarcare.

Uneori este util sa rulati anumite tipuri de apeluri de apel pe replica. De exemplu, poate doriti sa creati fisiere pe disc sau sa incarcati informatii intr-un depozit de date separat de fiecare data cand un obiect intra in baza de date. Cea mai buna modalitate de a face acest lucru in prezent este de a inlocui metoda clasei load_replicant a modelului:

clasa Utilizator <ActiveRecord :: Definitie de baza self.load_replicant (type, id, attrs) id, object = super object.register_in_redis object.some_other_callback [id, object] end end

Aceasta interfata va fi imbunatatita in versiunile viitoare.

Obiecte personalizate

Alte tipuri de obiecte pot fi incluse in fluxul de dump, atata timp cat implementeaza metodele dump_replicant si load_replicant.

dump_replicant

Partea dump apeleaza #dump_replicant (dumper, opts = {}) pe fiecare obiect. Metoda trebuie sa apeleze dumper.write () cu numele clasei, id-ul si hash-ul atributelor tastate primitiv pentru obiect:

clasa Utilizator attr_reader: id attr_accessor: name,: email def dump_replicant (dumper, opts = {}) attribute = {‘name’ => name, ’email’ => email} dumper.write self.class, id, atribute, self sfarsit sfarsit

load_replicant

Partea de incarcare apeleaza :: load_replicant (tip, id, atribute) pe clasa pentru a incarca fiecare obiect in mediul curent. Metoda trebuie sa returneze un tuplu [id, obiect]:

clasa User def self.load_replicant (tip, id, atribute) user = User.new user.name = atribute [‘nume’] user.email = atribute [‘e-mail’] user.save! [user.id, user] capat final

Cum functioneaza

Formatul de dump este conceput pentru transmiterea in flux a datelor relationale. Fiecare obiect este codificat sub forma de tuplu [type, id, attributs] si directionat direct pe flux. Tipul (sirul de nume al clasei) si id-ul trebuie sa formeze o cheie distincta atunci cand sunt combinate, atributele trebuie sa fie compuse doar din chei de sir si valori pur si simplu tastate.

Relatiile dintre obiectele din flux sunt gestionate dupa cum urmeaza:

  • Atributele unui obiect pot codifica referinte la obiecte care il preced in flux folosind un format simplu de tuplu: [: id, „Utilizator”, 1234].

  • Partea de descarcare asigura ca obiectele sunt scrise in fluxul de descarcare in „ordine de referinta” astfel incat atunci cand un obiect A include un atribut de referinta pentru un obiect B, B este garantat sa ajunga inainte de A.

  • Partea de incarcare mentine o mapare a ID-urilor de la sistemul de descarcare la obiectele nou-reproduse de pe sistemul de incarcare. Cand incarcatorul intalneste o valoare de referinta [: id, „Utilizator”, 1234] in atributele unui obiect, acesta o converteste in valoarea id-ului de incarcare.

Descarcarea si incarcarea se intampla intr-un mod de streaming. Nu exista nicio limita pentru numarul de obiecte incluse in flux.