Ruby on Rails: Jak mogę przywrócić migrację za pomocą rake db: migrate?
Po zainstalowaniu devise MODEL User dostałem to.
class DeviseCreateUsers < ActiveRecord::Migration
def self.up
create_table(:users) do |t|
t.database_authenticatable :null => false
t.recoverable
t.rememberable
t.trackable
# t.encryptable
# t.confirmable
# t.lockable :lock_strategy => :failed_attempts, :unlock_strategy => :both
# t.token_authenticatable
t.timestamps
end
add_index :users, :email, :unique => true
add_index :users, :reset_password_token, :unique => true
# add_index :users, :confirmation_token, :unique => true
# add_index :users, :unlock_token, :unique => true
# add_index :users, :authentication_token, :unique => true
end
def self.down
drop_table :users
end
end
Teraz jeśli zrobię rake db: migrate zostanie utworzona tabela users.
Jak przywrócić tę migrację, czyli jak ponownie usunąć tabelę użytkowników przy użyciu rake ?
8 answers
Run
rake db:migrate:down VERSION=<version>
Gdzie <version>
jest numerem wersji pliku migracji, który chcesz przywrócić.
Np. jeśli chcesz przywrócić migrację z nazwą pliku 3846656238_create_users.rb
Rake db: migrate: down VERSION=3846656238
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-23 07:06:52
Po prostu uruchom to polecenie:
rake db:rollback
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-08 02:57:12
Uważam, że dostępne są trzy opcje powrotu migracji (również pokrywają się):
-
Przesuń w dół najnowszą migrację:
rake db:migrate:down
# tylko Rails 2. -
W Dół liczba (n) z ostatnich migracji:
rake db:rollback STEP=n
-
Przewiń w dół do poprzedniej, konkretnej wersji:
$ rake db:migrate:down VERSION=nnn
# Rails 3 (podaj numer wersji również).
Numer wersji oznacza Sha (Secure Hash Algorithm) dla commita, który jest długą liczbą szesnastkową, która wygląda jak 886af3194768917c78e... Możesz to zobaczyć robiąc git log
Możesz zobaczyć te polecenia (i inne) wraz z ich opisami używając rake -T db:
, które dla rails 3.2 zawiera:
rake db:migrate # Migrate the database (options: VERSION=x, VERBOSE=false)
rake db:migrate:status # Display status of migrations
rake db:rollback # Rolls the schema back to the previous version (specify steps w/ STEP=n)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-07 12:08:39
Możesz wykonać rollback i określić, ile ostatnich migracji będzie rollbacków, np.
rake db:rollback STEP=3
Dla 3 ostatnich migracji.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-08 08:27:09
Jako nowy programista (lub dla innych nowych programistów)
rake db:rollback
działa mniej więcej przez połowę czasu. Zaczynam od tego.
Jeśli nie, rake db:migrate:down VERSION=3846656238
Podłącz wersję do numeru wersji pliku migracji, który chcesz przywrócić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-10 00:26:38
rake db:migrate:redo
Cofnie i ponownie zastosuje ostatnią migrację.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-06 19:38:37
Dla rails 5 możemy użyć rails command instead of rake
rails db:migrate:down VERSION=<version>
Przykład
Rails db:migrate: down VERSION=20170330090327
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-31 05:55:12
Uruchom to polecenie w swoim terminalu:
rake db:migrate:status
Lub
bundle exec rake db:migrate:status
Pokazuje status, ID migracji, nazwę migracji dla wszystkich migracji, które przeprowadziliśmy wcześniej. wybierz swój identyfikator migracji (tj. numer wersji) i umieść go w następującym poleceniu po version=,,, i naciśnij enter
bundle exec rake db:migrate:down VERSION=
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-09 11:25:22