2012-03-20 30 views
5

Tôi không thể thấy điều này trong tài liệu, nhưng tôi cho rằng đó là một vấn đề được giải quyết.Làm cách nào để làm cho ActiveRecord :: Schema.define không đăng nhập vào stdout?

Tôi đang sử dụng ActiveRecord bên ngoài Rails và tập lệnh của tôi tải một schema.rb được bán phá giá từ một ứng dụng khác. Tôi muốn tải lược đồ này mà không đổ kết quả đầu ra di chuyển sang stdout, nhưng thay thế ActiveRecord :: Base.logger không đóng nó. Tôi nên làm gì để ngăn chặn tiếng ồn?

Trả lời

8

Bí quyết là rõ ràng trong ActiveRecord :: Migration:

ActiveRecord::Migration.verbose = false 

Điều này làm cho sự di cư không thông tin đầu ra đến $ stdout. Có một phương pháp wrapper tiện gọi .suppress_messages, mà bạn có thể sử dụng như thế này:

ActiveRecord::Migration.suppress_messages do 
    load("path/to/schema.rb") 
end 

Và vâng, đây là tài liệu dưới Migration (nhưng không dưới Schema, nơi tôi đang tìm kiếm).

0

lẽ

ActiveRecord::Base.logger = begin 
    l = Logger.new('/dev/null') 
    l.level = Logger::FATAL 
    l 
end 
+0

No. Tôi đã thử cách này. Thay thế ActiveRecord :: Base.logger không tắt nó. – regularfry

+0

Hm. Tôi đã chỉnh sửa nó một chút. – fl00r

+0

Bạn đã thử cái này chưa? – regularfry

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