2011-11-23 36 views

Trả lời

14

Tùy thuộc vào môi trường của bạn, Rake sẽ đăng nhập truy vấn sql giống như bất kỳ quá trình Rails sẽ & trong logfile cùng. Vì vậy, trên hộp dev của bạn, hãy kiểm tra tệp log/development.log của bạn - nó sẽ chứa các truy vấn của tác vụ Rake của bạn. Nếu bạn muốn truy vấn đăng nhập vào sản xuất, hãy đặt mức nhật ký trong tác vụ Rake của bạn thành DEBUG và đảm bảo tác vụ rake phụ thuộc vào: môi trường.

desc "Task with SQL logging" 
task :test_log => :environment do 
    Rails.logger.level = Logger::DEBUG 
    Your code here... 
end 
+3

ah, tôi thấy chúng ở trong development.log, cảm ơn – mbdev

4
rake db:migrate --trace 

Các --trace sẽ hiển thị chi tiết

+0

không hiển thị câu lệnh SQL – Aleksey

+0

'tail -f log/test.log' phải thực hiện thủ thuật trong một cửa sổ dòng lệnh khác – drhenner

+0

thì đó phải là câu trả lời không phải' --trace' – Aleksey

3
echo '' > log/development.log 
rake db:migrate:redo VERSION=20141017153933 
cat log/development.log 
0

tôi đã cố gắng nêu trên và không thể có được nó để làm việc. Cú pháp là tốt, không có lỗi, nhưng không có sql đến stdout (hoặc log). Tôi đang sử dụng đường ray 3.2. Tôi cũng đang chạy trong một môi trường sản xuất.

Để xem các truy vấn sql tạo ra bởi công việc cào của tôi, tôi đã sử dụng kỹ thuật tìm thấy tại http://eewang.github.io/blog/2013/07/29/how-to-use-rake-tasks-to-generate-migration-sql/

Đặc biệt, tôi chỉ chèn khối này trong nhiệm vụ của mình trước khi find() tuyên bố đã tạo ra các truy vấn SQL tôi intersted in:

ActiveRecord::Base.connection.class.class_eval do 
    # alias the adapter's execute for later use 
    alias :old_execute :execute 

    # define our own execute 
    def execute(sql, name = nil) 
     print "===== #{sql}\n" 
     old_execute sql, name 
    end 
    end 

Sau đó, tôi có thể thấy SQL trên thiết bị xuất chuẩn. Đây không phải là mã của tôi - Eugene Wang đã đưa ra kỹ thuật này.

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