[ruby-it] [rails]aiuto su db migrate
David
david.palm a iperbole.bologna.it
Lun 27 Ago 2007 16:26:18 CEST
On Mon, 27 Aug 2007 15:40:18 +0200, Bonzo wrote:
> Bello, così ho tutto lo storico delle modifiche fatte al DB.
> poi lo lancio sempre con rake db:migrate?
>
> Come fa il comando Rake a capire che file cosa cambiare? rilegge tutti i
> file dentro migrate?
Non penso sia necessario. Il tuo "add_column" si traduce in un SQL ALTER TABLE statement (con varianti per accogliere i differenti motori SQL) quindi ogni migrazione è autoconsistente. Legge solo la versione in schema_info e da lì sa quale file eseguire.
Ci vuole un po' di disciplina a usare le migrazioni ed è facile perderci una paio di ore inutilmente se per caso uno si scorda di rimuovere delle robe in un qualche file. Ieri è successo a me e per venirne fuori ho dovuto fare un po' di salti mortali. In altre parole: migrations è ottimo per avere una traccia di quel che è successo al db e funziona davvero bene; potrebbe essere un po' più 'gentile' e dare una mano in più quando qualcosa va storto.
Un consiglio che ti do è di non esitare di farne tante. A volte ti prende la mano e fai tre tabelle con dati di prova nella stessa migrazione. Quelle sono poi i più suscettibili a errori quando arriva il giorno che devi andare avanti e indietro nella "vita" del tuo schema.
:-)
>
> class AddPriceToProducts < ActiveRecord::Migration
> def self.up
> add_column :products, :price, :string #eventuali opzioni
> end
>
> Questo aggiunge una colonna price alla tabella products?
> Grazie
> Bonzo
>
>
> Il 27/08/07, Luca Guidi <guidi.luca a gmail.com> ha scritto:
>>
>> In teoria, se non hai aggiunto altre tabelle, puoi fare la rollback
>> dello schema, portandolo alla versione zero, aggiungendo la colonna
>> interessata e poi rieseguendo il task di migrazione.
>> Ad ogni modo puoi sempre creare migrazioni con l'apposito script
>> (consigliato):
>> $ ruby script/generate migration AddPriceToProducts
>>
>> Questo ti creerà un file (db/migration/002_add_price_to_products.rb),
>> nel quale scrivere:
>>
>> class AddPriceToProducts < ActiveRecord::Migration
>> def self.up
>> add_column :products, :price, :string #eventuali opzioni
>> end
>>
>> def self.down
>> remove_column :products, price
>> end
>> end
>>
>> --
>> blog: www.lucaguidi.com
>>
>> Bringing Rails to Italy
>> First italian Ruby On Rails conference:
>> Oct, 26-27 2007 - Pisa
>> www.railstoitaly.org
>> _______________________________________________
>> Ml mailing list
>> Ml a lists.ruby-it.org
>> http://lists.ruby-it.org/mailman/listinfo/ml
Maggiori informazioni sulla lista
Ml