[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