2015-11-25 13 views
5

Uno dei nostri campi deve essere case sensitive. Possiamo scrivere una migrazione per modificare le regole di confronto che funziona bene ma questa modifica non si riflette in schema.rb. Creerà problemi ad esempio durante l'esecuzione di test e il database di test clonato non avrà le regole di confronto che vogliamo per quel campo.Come si fa rake db: schema: dump ha il set di caratteri e le regole di confronto dei campi in schema.rb?

Utilizziamo mysql.

ho cercato un modo per rendere questo accada senza risultati ..

sono riuscito a trovare questo su GitHub, ma non sono sicuro di come questo è stato compiuto https://github.com/cantino/huginn/blob/db792cdd82eb782e98d934995964809d9e8cb77d/db/schema.rb

+0

Hai provato a utilizzare structure.sql invece di schema.rb? http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you cambia: 'config.active_record.schema_format =: sql' in application.rb e quindi devi usare' rake db: structure: load 'invece di' db: schema: load' - non sono sicuro se manterrà le tue regole di confronto o meno – house9

risposta

3

penso che ci sia alcun "ufficiale" modo (fornito da Rails o gemme ActiveRecord) per realizzare questo tipo di discarica. Seguendo la cronologia git, sul repository Huginn stesso, è possibile trovare il codice necessario per ottenere questo dump. Date un'occhiata a questo impegno: https://github.com/cantino/huginn/commit/db792cdd82eb782e98d934995964809d9e8cb77d

Il codice più rilevante è attualmente qui: https://github.com/cantino/huginn/blob/master/lib/ar_mysql_column_charset/main.rb

Quindi, se avete bisogno di questa funzione, è probabilmente necessario copiare/incollare questa estensione nel progetto.

UPDATE

Ho fatto una revisione profonda di Huginn pronti contro termine (storia git e problemi), e come potete leggere in questo comment, questa funzionalità viene estratto in una gemma: https://github.com/kamipo/activerecord-mysql-awesome.

1

Come menzionato nel commento di @ house9, è possibile utilizzare invece structure.sql. Aggiungi questo al application.rb del progetto:

config.active_record.schema_format = :sql 

Poi gestita bundle exec rake db:structure:dump per generare la struttura SQL reale. Ciò conserva i set di caratteri e le regole di confronto (che dovrebbero idealmente essere presenti in schema.rb, ma purtroppo).

"struttura" è per sua natura meno portabile di "schema", ma di solito è una buona cosa che tutti i membri del team e gli ambienti utilizzino comunque lo stesso database e la stessa versione.