2011-06-28 37 views
6

Tôi đã thêm dự án Resque to my Rails 3. Tôi đã tạo ra một công việc mà đọc/viết một số công cụ từ/đến DB.Sự cố đăng nhập với Resque

Vấn đề là tôi không thấy nhật ký truy vấn SQL như "Bài đăng tải (0.5ms) SELECT" bài đăng ". * TỪ" bài đăng "" trong thiết bị đầu cuối nữa. Tôi cũng không thấy bất kỳ tin nhắn Rails.logger nào mà tôi đã thiết lập.

Khi tôi thực hiện một yêu cầu khác (làm mới đơn giản) các thông báo nhật ký và nhật ký truy vấn SQL đột nhiên xuất hiện.

Bất kỳ ý tưởng nào có thể xảy ra? Cảm ơn

Trả lời

4

Đường ray sẽ không ghi ra tệp nhật ký ngay lập tức, nó chờ một số dòng nhất định đi trước khi xóa tệp. Bạn có thể nói Rails luôn tuôn nhật ký bằng cách thêm này để development.rb hoặc application.rb của bạn tập tin ...

config.logger.auto_flushing = true 

Chỉ bao giờ làm điều này trong phát triển, và không bao giờ thiết lập này trong sản xuất vì nó sẽ chỉ giết I/O .

Bạn cũng có thể làm điều đó theo yêu cầu với ...

Rails.logger.flush 

tài liệu API ở đây ...

http://api.rubyonrails.org/classes/ActiveSupport/BufferedLogger.html#method-i-auto_flushing-3D

+1

ActiveSupport :: BufferedLogger # auto_flushing không được dùng nữa trên Rails 3.2 ngay bây giờ. Hướng dẫn là đặt mức đồng bộ hóa trên trình xử lý tệp cơ bản hoặc điều chỉnh hệ thống tệp của bạn. Bộ nhớ cache FS hiện là điều khiển điều khiển xả. file = File.open ('foo.log', 'w') file.sync = true ActiveSupport :: BufferedLogger.new tập tin – plainjimbo

+0

định dạng là khá hơi say lên trên đó, bạn có thể thấy điều này tốt hơn trong các tài liệu theo Phần "Ngừng sử dụng" - https://github.com/lifo/docrails/blob/master/railties/guides/source/3_2_release_notes.textile – plainjimbo

+0

@Jimbo - Vấn đề với thông báo không dùng nữa đó là tôi không biết "đặt mức độ đồng bộ trên xử lý tệp cơ bản "có nghĩa là. –

0

Resque sẽ không tuôn nhật ký trong phương thức sản xuất (trừ khi bạn công việc đang tạo ra hơn 1000 dòng nhật ký).

Bạn sẽ phải tuôn ra cho mỗi dòng nhật ký được tạo. Tôi sẽ chỉ định cấu hình lại bằng tệp lib/tasks/resque.rake:

task "resque:setup" => :environment do 
    Resque.before_first_fork = Proc.new { Rails.logger.auto_flushing = 1 } 
end 
2

Chúng tôi gặp vấn đề tương tự trong một trong các dự án của chúng tôi. Ngoài ra, chúng tôi cũng muốn ghi lại tất cả thư Resque vào một tệp nhật ký riêng biệt.

Trong bài đăng blog Enable immediate log messages of resque workers một mẫu mã có thể được tìm thấy để cho phép ghi nhật ký ngay lập tức vào một tệp riêng biệt.

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