2009-10-13 12 views
18

C'è una development_structure.sql nella mia cartella/db della mia applicazione di rails (rails 2.3.4, ruby ​​1.8.7) e non sono sicuro di cosa faccia esattamente.Che cos'è db/development_structure.sql in un progetto di rotaie?

  1. È necessario per un determinato ambiente? (Penso di aver letto da qualche parte che è usato per i test)
  2. Devo aggiungerlo al mio repository git?
+1

è la stessa cosa di structure.sql in rails 3? In tal caso, questa domanda deve essere modificata –

+0

@boulder_ruby yes –

risposta

20

Non dovresti aggiungerlo al tuo repository git.

Si tratta di un file creato automaticamente da binari quando si eseguono le migrazioni con il database.yml configurato per connettersi a un database mysql. Puoi vederlo come alternativa al schema.rb

io credo che si possa costringere le rotaie per creare con l'aggiunta nel vostro environment.rb:

config.active_record.schema_format = :sql 

Quando è presente viene usato questo file ad esempio:

rake db:test:clone_structure 

Modifica

relativa sezione in Ruby on Rails Guide. http://guides.rubyonrails.org/migrations.html#schema-dumping-and-you

Si consiglia di controllarlo nel controllo sorgente sul wiki.

Personalmente mi piace tenerlo fuori. Mi piace essere in grado di eseguire tutte le migrazioni molto rapidamente. È per me un buon segno. Se le migrazioni si rallentano, mi sento come se non avessi più il controllo totale del mio ambiente. La lentezza delle migrazioni in genere significa che ho un sacco di dati nel mio database di sviluppo che mi sento sbagliato.

Tuttavia, al giorno d'oggi sembra essere una questione di gusto personale. Segui il tuo istinto su questo.

+17

... eccetto che tu * dovresti * aggiungerlo al tuo repository, proprio come dovresti aggiungere schema.rb al tuo repository. Il punto di avere il file nel repository è che non è necessario eseguire tutte le migrazioni durante l'impostazione di un nuovo DB. –

+1

@ MarnenLaibow-Koser L'ho preso nel mio repository e cambia sempre il valore auto_increment degli id, che è abbastanza fastidioso – ecoologic

+1

@ecoologic Sì, può essere un po 'fastidioso. Questo è uno dei motivi per cui dovresti usare schema.rb invece di structure.sql se possibile. Ma assolutamente dovrebbe essere nel repository. –

1

Viene creato quando si esegue un'attività rake per clonare il database di sviluppo nel database di test. Il database di sviluppo viene emesso in SQL e viene quindi letto nel DB di test. Puoi tranquillamente cancellarlo.

29

Questo post è stato utilizzato come riferimento da un mio collega, ma le due risposte non sono esatte o sufficientemente informative.

development_structure.sql è un dump di livello basso dello schema, necessario quando si iniziano a utilizzare le funzionalità del database proprietario: se lo si desidera o meno, le si utilizzerà a un certo punto.

Riguardo alla questione di archiviarlo o meno, c'è un po 'di dibattito. Ecco un post informativo: http://www.saturnflyer.com/blog/jim/2010/09/14/always-check-in-schema-rb/. E la mia opinione su questo segue.

L'obiettivo di development_structure.sql è di sincronizzare, per ogni dato commit, la struttura del database con il codice, senza avere una precedente conoscenza della struttura dello schema, cioè senza dover fare affidamento su uno stato preesistente di lo schema per ottenere quello nuovo.

In breve, avendo una struttura dello schema disponibile, ogni volta che si modifica branch/commit, lo si carica direttamente e lo si dimentica. Questo è principalmente valido per progetti dinamici e "affollati", in cui diversi rami presentano differenze nella struttura dello schema sottostante.

Senza avere memorizzata la struttura dello schema, è necessario utilizzare sempre uno schema di riferimento esistente nel database e migrarlo avanti o indietro ogni volta che si cambia ramo/commit; diversi casi reali possono rendere questo processo inefficiente (ad esempio quando un altro ramo non ha alcune migrazioni attualmente disponibili o non è possibile eseguire il rollback di alcune migrazioni).

Un altro problema sono le build automatizzate, che soffrono degli stessi problemi e, peggio ancora, non possono applicare le modifiche manuali.

L'unico svantaggio è che richiede una certa abitudine, vale a dire memorizzarla ogni volta che si esegue una migrazione. Facile da dire, ma anche facile da dimenticare.

Non dico che non puoi vivere senza development_structure.sql - certo che puoi. Ma se ce l'hai, quando cambi ramo/impegni ti basta caricare e dimenticare; se non lo fai, potresti [dover] passare attraverso una serie di passaggi manuali.

0

in Rails 3, non hanno nemmeno bisogno di scrivere questa linea,

config.active_record.schema_format =: sql

È possibile generare questo file structure.sql semplicemente eseguendo il comando rake sopra menzionato sopra

Problemi correlati