ฉันจะปิดการใช้งานการบันทึกข้อความไปป์ไลน์ (sprockets) ใน Ruby on Rails 3.1 ได้อย่างไร


378

เฟืองจะค่อนข้างละเอียดในบันทึก (dev) โดยค่าเริ่มต้นภายใต้ Ruby on Rails 3.1 (RC1):

Started GET "/assets/application.css" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/application.css.scss  (5ms)  (pid 6303)


Started GET "/assets/application.js" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Compiled app/assets/stylesheets/default.css.scss  (15ms)  (pid 6303)

...
Started GET "/assets/default/header_bg.gif" for 127.0.0.1 at 2011-06-10 17:30:45 -0400
Served asset /default/header_logo.gif - 304 Not Modified  (7ms)  (pid 6303)
Served asset /default/header_bg.gif - 304 Not Modified  (0ms)  (pid 6246)
Served asset /default/footer_bg.gif - 304 Not Modified  (49ms)  (pid 6236)
...

ฉันต้องการลดระดับของการใช้คำฟุ่มเฟือยหรือปิดการใช้งานโดยสิ้นเชิง

ฉันสมมติว่ามีวิธีที่สะอาดในการปิดใช้งานหรือลดความฟุ่มเฟื่อยของการบันทึกโดยการเพิ่มบรรทัดการตั้งค่าในenvironment.rbหรือdevelopment.rbคล้ายกับconfig.active_record.logger = nilที่เงียบงบ ActiveRecord SQL เงียบ


ใครบางคนรายงานข้อผิดพลาดเกี่ยวกับเรื่องนี้: # 2639 ยังคง "เปิด" ตั้งแต่ 9/2
istvanp

14
คำตอบที่ยอมรับสำหรับคำถามนี้ควรมีการเปลี่ยนแปลงหรือปรับปรุง ใน Rails 3.2 คุณสามารถใส่config.assets.debug = falseในการพัฒนาของคุณได้
Stewart Johnson

7
@StartartJohnson - config.assets.debug = falseจะต่อสินทรัพย์เป็นไฟล์เดียว - ไม่ใช่สิ่งที่คนส่วนใหญ่ต้องการในการพัฒนา
Yarin

คำตอบ:


382

วางรหัสต่อไปนี้ใน config/initializers/quiet_assets.rb

if Rails.env.development?
  Rails.application.assets.try(:logger=, Logger.new('/dev/null'))
  Rails::Rack::Logger.class_eval do
    def call_with_quiet_assets(env)
      previous_level = Rails.logger.level
      Rails.logger.level = Logger::ERROR if env['PATH_INFO'] =~ %r{^/assets/}
      call_without_quiet_assets(env)
    ensure
      Rails.logger.level = previous_level
    end
    alias_method_chain :call, :quiet_assets
  end
end

อัปเดต: ตอนนี้ใช้งานได้กับ Ruby on Rails 3.2 ด้วย (แก้ไขความพยายามก่อนหน้านี้before_dispatchและตอนนี้เรากำลังไปหาแร็ครูทcallแทน)

อัปเดต: โซลูชันมิดเดิลแวร์ของ Rack ที่เหมาะสม (แทนที่จะเปราะบางalias_method_chain) จาก @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735


3
ในฐานะที่เป็นของ Rails 3.2.1 การดึงเหล่านั้นเพียงอย่างเดียวไม่ทำให้การบันทึกการเฟืองและไฟล์ choonkeat ยังคงต้องการ
IAmNaN

5
จริง เสียงเหมือนไฟล์นี้จะต้องใช้เสมอเนื่องจากการตั้งค่าconfig.assets.loggerเป็นเท็จจะเงียบเฉพาะสิ่งที่สเตอร์ออก เงียบนี้การดำเนินการแพ็คการร้องขอ / การตอบสนองซึ่งเป็นสิ่งที่ทางรถไฟ dev บอกว่าพวกเขาไม่ได้ตั้งใจที่จะเงียบสำหรับกรณีพิเศษ
Ben Kreeger

32
อืมม์ คุณควรนำสิ่งนี้ไปไว้ในรางหลัก ทำให้เป็นตัวเลือกใน config.assets
jsharpe

2
บน windows แทนที่'/dev/null'ด้วย ' NUL'
แมตต์

4
ใช้งานได้กับ Rails 4.2.0
serial engine

189

ลองดูที่https://github.com/evrone/quiet_assetsและใส่ไว้ในไฟล์ Gem ของคุณ

สำหรับคนขี้เกียจ: gem 'quiet_assets', group: :development


6
เยี่ยมมาก แต่น่าเศร้ามากที่ต้องใช้อัญมณีแยกต่างหากสำหรับเรื่องนี้
Adam Spires

1
ฉันคิดว่า Jose Valim ตัดสินใจถูกแล้วที่นี่github.com/rails/rails/issues/2639รางต้องบันทึกคำขอทั้งหมดที่เข้ามาและฉันเห็นด้วยกับฉันคิดว่าเราสามารถกำจัดค่าใช้จ่ายนี้ได้เมื่อเฟืองจะสนับสนุนแผนที่แหล่งgithub.com / sstephenson / sprockets / issue / 310
เส้นทาง

5
สำหรับคนขี้เกียจ: gem 'quiet_assets'(โปรดเพิ่มสิ่งนี้ลงในโพสต์ :))
reto

52

สำหรับ Ruby on Rails 3.2 เพิ่มการพัฒนาแฟ้มการกำหนดค่าสภาพแวดล้อมของคุณมักจะพบได้ที่config.assets.logger = false config/environments/development.rbดู# 4512


ทำงานได้ใน Raise 4 ตามที่คาดไว้ จำเป็นต้องรีสตาร์ทเซิร์ฟเวอร์เพื่อให้ทำงานได้
Langusten Gustel

2
Rails 4.0.2 ใช้config.assets.logger = nilงานได้สำหรับฉัน
byterussian

4
Rails 4.0.4 config.assets.logger = nilใช้งานไม่ได้สำหรับฉัน
hendrikbeck

28

มีสองสิ่งเพียงพอ:

  1. config.assets.debug = false ใน config/enviroments/development.rb
  2. rake assets:precompile. ดูความคิดเห็นโดย @oma ด้านล่าง; ไม่จำเป็น

นั่นคือทั้งหมด!


19
1. ถูกต้อง ขอบคุณ! โปรดลบหมายเลข 2 rake assets:precompileไม่ใช่สิ่งที่เราต้องการทำเพื่อการพัฒนา
oma

ในขณะที่สิ่งนี้อาจใช้ไม่ได้ในขณะที่มีการโพสต์คำถามดั้งเดิมมันใช้งานได้ในขณะนี้ (และตามที่ @Race ระบุ witl 3.2.3 แล้ว) และควรจะได้รับคำตอบที่ยอมรับแล้ว
radiospiel

2
istvanp ชี้ให้เห็นด้านล่างนั่นไม่ได้ทำในสิ่งที่คุณคิด มันรวบรวมเนื้อหา JS และ CSS ทั้งหมดเป็นไฟล์ขนาดใหญ่เพียงไฟล์เดียวโดยไม่ปิดการบันทึกสำหรับเนื้อหา
davidgoli

2
นี่คือทั้งหมดที่จำเป็นใน rails 4.2.2
thisfeller

การเพิ่มสิ่งที่ @davidgoli กล่าวไว้: config.assets.debug ควบคุมการจัดเรียงเนื้อหา การปิดใช้งานนั้นหมายถึงการดีบักเช่น JS และ CSS โดยใช้เบราว์เซอร์จะทำงานได้มากขึ้น บางอย่างเช่น quiet_assets จะทำให้การบันทึกเป็นไปโดยไม่ทำให้คุณต้องสลับการลงทุน
johncip

27

ในที่สุดมันก็จะถูกconfig.assets.logger = nilแต่ส่วนนั้นถูก stubbed บนต้นแบบ (ยังไม่เสร็จ)


5
ใช้งานไม่ได้กับ Rails 3.1.3 @ อายุ: คุณแน่ใจหรือว่ามันเหมาะกับคุณ? อย่างที่ Tim พูด# 2639ยังคงเปิดอยู่และฉันไม่เห็นข้อบ่งชี้ในปัญหาของการแก้ไขใด ๆ (ทั้งคำขอดึงที่อ้างอิงถูกปฏิเสธ)
Adam Spires

สิ่งนี้จะไม่ถูกนำมาใช้ในขั้นตอนนี้ github.com/rails/rails/issues/4569
23inhouse

@ AdamSpiers ตามลิงค์: github.com/rails/rails/pull/3795#issuecomment-3549669 "Rails จะไม่เป็นกรณีพิเศษใด ๆ ของคนตัดไม้หรือคนตัดไม้ที่เกี่ยวข้องกับมิดเดิลแวร์ที่จะไม่บันทึกเส้นทางที่เฉพาะเจาะจง"
23inhouse

3
คนเกียจคร้าน Rails 4 ยังไม่สามารถปิดการใช้งานการบันทึกสินทรัพย์ได้อย่างง่ายดาย
Tom Rossi

1
ฉันใช้ Rails 4.2 แล้วใส่development.rbมันเข้าไปและปิดใช้งานการบันทึกเนื้อหา
แจ็ค

12

ฉันรู้ว่ามันเป็นวิธีแก้ปัญหาที่น่าเกลียดและชั่วคราว แต่ฉันใช้สิ่งนี้:

tail -f log / development.log | grep -vE 'asset'


9
นี่คือการปรับปรุงที่จะลบบรรทัดว่างออกเช่นกัน:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

config.assets.logger = falseหลายคนจะสับสนเกี่ยวกับการใช้งานของ นี่คือสิ่งที่มันทำและสิ่งที่ไม่ทำ

ตามเอกสารต้นฉบับ :

การตั้งค่าconfig.assets.loggerเป็นเท็จจะปิดการบันทึกเนื้อหาที่ให้บริการ

อย่างไรก็ตามนี่อาจไม่ใช่สิ่งที่คุณคิด มันปิดการใช้งานบันทึกการแสดง 'เฟือง' เท่านั้นไม่ใช่ Ruby on Rails actionpack บันทึกการร้องขอ ผู้ดูแลระบบ Ruby on Rails อธิบายสิ่งนี้อย่างชัดเจนที่นี่: https://github.com/rails/rails/issues/4569#issuecomment-3594500


รับตัวอย่างจากลิงค์บันทึกเช่นนี้ถูกปิดใช้งาน:

สินทรัพย์ที่ให้บริการ /jquery.isotope.js - 304 ไม่ได้แก้ไข (0ms)

แต่บันทึกเช่นนี้ไม่ใช่

เริ่มใช้ GET "/assets/jquery.isotope.js?body=1" สำหรับ 127.0.0.1 เวลา 2012-01-20 23:16:46 -0500


10
config.assets.quiet = true

นี่เป็นวิธีล่าสุดในการไป


ทำงานได้อย่างสมบูรณ์แบบใน Rails 5 เพียงทิ้งสิ่งนี้ลงในdevelopment.rb
Andreykul

ควบคู่ไปกับการแก้ไขข้อบกพร่องไม่สามารถตอบสนองความต้องการทั้งหมดของฉันใน Rails 5 ได้
Pysis

7

ใช้:

Rails.application.assets.logger = Logger.new(RUBY_PLATFORM =~ /(win|w)32$/ ? "NUL" : "/dev/null")
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end

มันเป็นรหัสเดียวกันchoonkeat เพิ่ม ฉันเพิ่งรวมมันเพื่อทำงานภายใต้ Windows เช่นกัน


7

ในแฟ้มdevelopment.rbในconfig / สภาพแวดล้อมconfig.assets.debug = trueที่คุณจะพบเส้น

สลับไปที่falseและผลลัพธ์ของโหลดสินทรัพย์ส่วนใหญ่จะหายไป ในระบบของฉันมีเพียงสองคำขอสำหรับ application.css และ. js เท่านั้นที่ยังคงอยู่


3
การตั้งค่านั้นอนุญาตให้คุณแบ่งสไตล์ชีทและจาวาสคริปต์ออกเป็นไฟล์แยกต่างหากเมื่อตั้งค่าเป็นจริงเพื่อให้การดีบักง่ายขึ้น เมื่อตั้งค่าเป็นเท็จ (ค่าเริ่มต้น) มันรวมทั้งหมดเป็นไฟล์ขนาดใหญ่ ดังนั้นมันจะลดการตรวจแก้จุดบกพร่องแน่นอน แต่ถ้าคุณมีภาพเช่นนั้นจะไม่ได้รับผลกระทบเลย ข้อมูลคู่มืออย่างเป็นทางการที่นี่
istvanp

1
ฉันเห็น. ขอบคุณที่ล้างข้อมูล แต่ฉันไม่ได้เปลี่ยนการตั้งค่าของตัวแปรนี้ดังนั้นค่าเริ่มต้นของฉันคือtrueแต่ผมไม่ได้เปลี่ยนการตั้งค่าของตัวแปรนี้เพื่อเริ่มต้นของฉันคือ
TKAB


2

Logrageสำหรับผู้ชนะ - มันฆ่า Ruby on Rails ของคนตัดไม้ที่น่ารำคาญค่าเริ่มต้นออกจากกล่อง (เช่นสินทรัพย์การบันทึกการบันทึกการแสดงผลบางส่วน) และสามารถปรับแต่งได้หากคุณต้องการเพิ่ม / ลบรายการเฉพาะ


0

โซลูชันที่เชื่อมโยงไว้ก่อนหน้านี้ช่วย:

https://github.com/evrone/quiet_assets

ด้วยเช่นกันมันทำงานได้ดีสำหรับฉัน:

3.1 (เท่านั้น) (3.2 ช่วงก่อนหน้าชุดคำสั่ง)

app\config\initializers\quiet_assets.rb

Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def before_dispatch_with_quiet_assets(env)
    before_dispatch_without_quiet_assets(env) unless env['PATH_INFO'].index("/assets/") == 0
  end
  alias_method_chain :before_dispatch, :quiet_assets
end
3.2 Rails - Rack root tap approach
app\config\initializers\quiet_assets.rb

Rails.application.assets.logger = Logger.new('/dev/null')
Rails::Rack::Logger.class_eval do
  def call_with_quiet_assets(env)
    previous_level = Rails.logger.level
    Rails.logger.level = Logger::ERROR if env['PATH_INFO'].index("/assets/") == 0
    call_without_quiet_assets(env).tap do
      Rails.logger.level = previous_level
    end
  end
  alias_method_chain :call, :quiet_assets
end

-1

ใน config / environment config.log_level = :errorให้เพิ่มไฟล์. rb ที่คุณต้องการเปลี่ยน นี่จะเปลี่ยนการตั้งค่าบันทึกเป็นข้อผิดพลาดเท่านั้น


น่าเสียดายที่ไม่มีเพราะส่วนใหญ่ฉันใช้บันทึกการดูคำขอและข้อมูล SQL ซึ่งอยู่ในระดับการแก้ปัญหา ข้อความเนื้อหามีระดับข้อมูล (ซึ่งต่ำกว่าระดับการดีบัก) ดังนั้นจึงไม่มีประโยชน์ที่จะได้รับสิ่งที่ฉันต้องการด้วยการตั้งค่านั้น
istvanp

2
นี่ไม่ใช่ความคิดที่ดี มันจะซ่อนข้อความระดับข้อมูลอื่น ๆ ที่คุณอาจต้องการที่จะยังคงเข้าสู่ระบบ
ifightcrime
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.