Uruchamianie migracji z konsoli rails

Czy istnieje sposób na uruchomienie komend rake dla db: migrate i db: rollback na konsoli?

Do bani czekać aż środowisko rails się załaduje!

Author: rafamvc, 2011-09-02

8 answers

Rails

Pozwoli Ci to na migrację bez przeładowywania całego środowiska rails:

ActiveRecord::Migrator.migrate "db/migrate"

I rollback:

# 3 is the number of migration to rollback, optional, defaults to 1
ActiveRecord::Migrator.rollback "db/migrate", 3

Rails > = 5 (dzięki @gssbzn, jego odpowiedź jest poniżej)

Migrować:

ActiveRecord::MigrationContext.new("db/migrate").migrate

I rollback:

# 3 is the number of migration to rollback, optional, defaults to 1
ActiveRecord::MigrationContext.new("db/migrate").rollback 3
 78
Author: Benoit Garret,
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
2020-06-10 06:55:01

W konsoli:

ActiveRecord::Migration.remove_column :table_name, :column_name

Aby zaktualizować plik schema.rb po uruchomieniu migracji z konsoli, należy uruchomić rails db:migrate

 102
Author: Homan,
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
2019-04-19 16:31:43

Inny sposób, w jaki znajduję neatera, aby uruchomić jakieś polecenie migracji z konsoli, jest taki:

ActiveRecord::Schema.define do
  create_table :foo do |t|
    t.string  :bar
    t.timestamps
  end
end

Ma to tę zaletę, że zawartość wewnątrz bloku jest kompatybilna z kopiowaniem i wklejaniem losowej zawartości z prawdziwego pliku migracji / schema.rb.

 27
Author: kizzx2,
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-03-12 04:50:20

Dla rails 5.2 zaakceptowana odpowiedź została usunięta i zastąpiona przez

ActiveRecord::MigrationContext.new("db/migrate").migrate

Należy pamiętać, że może to również ulec zmianie w przyszłych wersjach rails, ponieważ działają one w celu dodania wielu połączeń z bazą danych

 13
Author: gssbzn,
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
2018-10-10 11:18:41

Możesz użyć polecenia %x []

%x[rake db:migrate]
 5
Author: dexter,
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-09-02 17:50:08

Musiałem udawać, że migracja została uruchomiona, aby odblokować wdrożenie, można to zrobić za pomocą:

class Mig < ActiveRecord::Base; self.table_name = 'schema_migrations';end
Mig.create! version: '20180611172637'
 5
Author: grosser,
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
2018-06-18 21:25:24

Dla szyn 5 i szyn 6:

ActiveRecord::Base.connection.migration_context.migrate

Dla szyn 3 i szyn 4:

ActiveRecord::Migrator.migrate 'db/migrate'
 5
Author: Shai Coleman,
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
2020-01-30 17:34:26

Stworzyłem metodę w moimplik irbrc, który uruchamia migracje, przeładowuje konsolę:

def migrate
  if defined? Rails::Console # turn off info logging for Rails 3
    old_log_level = ActiveRecord::Base.logger.try(:sev_threshold)
    ActiveRecord::Base.logger.sev_threshold = Logger::WARN
  end
  reload! && migations_ran = true if ActiveRecord::Migrator.migrate(Rails.root.join("db/migrate")).any?
  ActiveRecord::Base.logger.sev_threshold = old_log_level if defined? old_log_level
  migations_ran ||= nil # useful exit status
end

Zobacz cały plik tutaj: https://gist.github.com/imme5150/6548368

 0
Author: Josh,
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
2013-09-13 09:17:27