programing

Rails 콘솔에서 마이그레이션 실행

nasanasas 2021. 1. 9. 10:08
반응형

Rails 콘솔에서 마이그레이션 실행


콘솔에서 db : migrate 및 db : rollback에 대한 rake 명령을 실행하는 방법이 있습니까?

레일 환경이로드 될 때까지 기다리는 것은 짜증납니다!


이렇게하면 전체 레일 환경을 다시로드하지 않고도 마이그레이션 할 수 있습니다.

ActiveRecord::Migrator.migrate "db/migrate"

및 롤백 :

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

콘솔에서 :

ActiveRecord::Migration.remove_column :table_name, :column_name

schema.rb콘솔에서 마이그레이션을 실행 한 후 파일 을 업데이트하려면 다음을 실행해야합니다.rails db:migrate


콘솔에서 마이그레이션 명령을 실행하는 것이 더 깔끔하다는 또 다른 방법은 다음과 같습니다.

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

이것은 블록 내부의 내용이 실제 마이그레이션 파일 /에서 임의의 내용을 복사하여 붙여 넣는 것과 호환된다는 장점이 있습니다 schema.rb.


레일 5.2의 경우 허용되는 답변이 제거되고 다음으로 대체되었습니다.

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

여러 데이터베이스 연결을 추가하기 위해 작동하므로 향후 버전의 레일에서도 변경 될 수 있습니다.


배포 차단을 해제하기 위해 마이그레이션을 실행 한 척해야했는데 다음과 같이 수행 할 수 있습니다.

class Mig < ActiveRecord::Base; self.table_name = 'schema_migrations';end
Mig.create! version: '20180611172637'

% x [명령]을 사용할 수 있습니다.

%x[rake db:migrate]

마이그레이션을 실행 한 다음 콘솔을 다시로드하는 .irbrc 파일에 메서드를 만들었습니다.

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

여기에서 전체 파일을 확인하세요 : https://gist.github.com/imme5150/6548368

참조 URL : https://stackoverflow.com/questions/7287250/run-migrations-from-rails-console

반응형