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 ?

Author: Michael Durrant, 2011-10-08

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

 134
Author: Mahesh,
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
 109
Author: damienbrz,
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ę):

  1. Przesuń w dół najnowszą migrację:

    rake db:migrate:down # tylko Rails 2.

  2. W Dół liczba (n) z ostatnich migracji:

    rake db:rollback STEP=n

  3. 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)
 60
Author: Michael Durrant,
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.

 12
Author: bender,
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ć.

 9
Author: LukeBickleTWA,
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ę.

 8
Author: keneth,
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

 2
Author: Mihir Kumar Thakur,
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=
 1
Author: Arun JP,
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