2011-09-02 47 views

Trả lời

58

này sẽ cho phép bạn di chuyển mà không cần tải lại đường ray toàn bộ môi trường:

ActiveRecord::Migrator.migrate "db/migrate" 

và rollback:

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

Lưu ý rằng nếu bạn đang sử dụng Mongoid, nó giống nhau: 'Mongoid :: Migrator.migrate" db/migrate "' –

+0

Điều này là hoàn hảo để thêm vào test_helper.rb của bạn trong ứng dụng Rails –

+0

Lỗi đã nhận, bash: ActiveRecord :: Migrator.migrate: không tìm thấy lệnh ... sử dụng Rails 2.3.18, ruby ​​1.9.3p551, Bây giờ được thực thi sau khi thực thi lệnh bên trong giao diện điều khiển đường ray. –

1

Bạn có thể sử dụng% x [command]

%x[rake db:migrate] 
+1

Điều đó đánh bại mục đích không phải chờ đường ray tải. – rafamvc

+0

@rafamvc đã đồng ý! Đó là lý do tại sao tôi nghĩ câu trả lời của Benoit tốt hơn :) – dexter

0

Tôi đã tạo một phương thức trong tệp .irbrc của tôi để chạy di chuyển rồi tải lại bảng điều khiển:

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 

Xem toàn bộ tập tin ở đây: https://gist.github.com/imme5150/6548368

55

Trong giao diện điều khiển:

ActiveRecord::Migration.remove_column :table_name, :column_name 
+0

Hoàn hảo để chạy các lệnh di chuyển. Cảm ơn bạn. –

+1

Sau khi bạn làm điều này, bạn cần phải cập nhật thủ công lược đồ của mình. –

+0

@WestonGanger như thế nào? – nruth

10

Một cách khác mà tôi tìm thấy gọn gàng để chỉ chạy một số lệnh di cư từ giao diện điều khiển là:

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

Điều này có lợi thế là nội dung bên trong khối tương thích với việc chỉ sao chép và dán nội dung ngẫu nhiên từ tệp di chuyển thực sự/schema.rb.

Các vấn đề liên quan