Как мога да деактивирам регистриране на съобщения за тръбопровод на активи (зъбчета) в Ruby on Rails 3.1?

Sprockets има тенденция да бъде доста многословен в (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 операторите.


person istvanp    schedule 10.06.2011    source източник
comment
Някой съобщи за грешка относно това: #2639. Все още отворен към 2 септември.   -  person istvanp    schedule 02.09.2011
comment
Приетият отговор на този въпрос трябва да бъде променен или актуализиран. В Rails 3.2 можете просто да поставите config.assets.debug = false във вашия development.rb.   -  person Stewart Johnson    schedule 16.04.2013
comment
@StewartJohnson - config.assets.debug = false ще свърже активи в един файл - не това, което повечето хора искат в разработката   -  person Yarin    schedule 03.01.2014


Отговори (14)


Поставете следния код в 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, а сега вместо това отиваме към root rack call)

Актуализация: подходящо решение за мидълуер за Rack (вместо чуплив alias_method_chain) от @macournoyer https://github.com/rails/rails/issues/2639#issuecomment-6591735

person choonkeat    schedule 22.09.2011
comment
Чудесно - докато #2639 не бъде коригиран, това е единственото решение, което съм намерил досега и което работи. - person Michael Shimmins; 23.11.2011
comment
Изглежда, че Rails 3.2 ще има по-лесен начин да направите това: github.com/rails/rails/pull /4501 github.com/rails/rails/pull/4512 - person ootoovak; 18.01.2012
comment
От Rails 3.2.1 тези издърпвания сами по себе си не заглушават регистрирането на зъбчатото колело и файлът на choonkeat все още е необходим. - person IAmNaN; 28.01.2012
comment
Наистина. Изглежда, че този файл винаги ще е необходим, тъй като настройката на config.assets.logger на false ще заглуши само това, което извежда Sprockets. Това заглушава заявките/отговорите на Action Pack, което е нещо, което Rails dev са казали, че не възнамерявайте да заглушавате за специални случаи. - person Ben Kreeger; 14.03.2012
comment
страхотно! Определено подобрява яснотата в разработката. - person Bob Walsh; 10.04.2012
comment
хм трябва просто да вкарате това в rails core. направете го опция в config.assets - person jsharpe; 11.04.2012
comment
Би било по-добре да деактивирате регистриране, отколкото да влезете в /dev/null: Rails.application.assets.logger = false - person sj26; 23.04.2012
comment
Също така би било хубаво, ако зъбните колела бяха условно вмъкнати в ActionDispatch::MiddlewareStack вместо монтирани като маршрут, тогава можем просто да го преместим нагоре в стека преди Rails::Rack::Logger. - person sj26; 23.04.2012
comment
Вече не работи на последната версия на rails 3.2.5 как можем да поправим това? Мерси! - person Rubytastic; 08.06.2012
comment
@Rubytastic работи за мен. какви са твоите грешки? моля, поставете на gist.github.com - person choonkeat; 08.06.2012
comment
Работи на 3.2.5. Невероятно. Благодаря! - person c.apolzon; 21.06.2012
comment
очевидно не е безопасен за нишки; alias_method_chain е излишно - обикновено alias би било достатъчно; но много, много благодаря, че посочихте Rails::Rack::Logger! =) - person meandre; 18.03.2013
comment
В Windows заменете '/dev/null' с 'NUL' - person Matt; 29.04.2013
comment
работи за мен на rails4, но съм съгласен с @crankharder. това трябва да влезе в config.assets - person Snowcrash; 28.05.2013
comment
Работи за мен на Rails 4.2.0 - person hsym; 18.02.2015
comment
За нас това не оцеля след надграждане до Rails 4.2.5. Скъпоценният камък, споменат по-долу, обаче все още работи. Подозирам, че това решение все още ще работи, ако заключите зъбчатите колела във вашия Gemfile към някаква конкретна по-стара версия, но предпочитам да не се налага. - person johncip; 01.02.2016
comment
@johncip можете да пропуснете презаписването на Rails.application.assets.logger, актуализирахте кода - person choonkeat; 01.02.2016

Разгледайте https://github.com/evrone/quiet_assets и просто го включете във вашия Gem файл.

За мързеливите: gem 'quiet_assets', group: :development

person route    schedule 22.03.2012
comment
Страхотна работа, но много тъжно, че за това е необходим отделен скъпоценен камък. - person Adam Spiers; 04.03.2013
comment
Мисля, че Хосе Валим взе правилното решение тук github.com/rails/rails/issues/2639 rails трябва да регистрира всички входящи заявки и аз съм съгласен с това, мисля, че можем да се отървем от това натоварване, когато зъбците ще поддържат карта на източника github.com/sstephenson/sprockets/issues/310 - person route; 17.04.2013
comment
за мързеливите: gem 'quiet_assets' (моля, добавете това към поста :)) - person reto; 16.03.2014

За Ruby on Rails 3.2 добавете config.assets.logger = false към конфигурационния файл на вашата среда за разработка, който обикновено се намира на config/environments/development.rb. Вижте #4512.

person ouranos    schedule 14.03.2012
comment
Работи в Raise 4 според очакванията. Необходимо е да рестартирате сървъра, за да работи това. - person Langusten Gustel; 18.09.2013
comment
Rails 4.0.2 config.assets.logger = nil работи за мен - person byterussian; 29.01.2014
comment
Rails 4.0.4 config.assets.logger = nil НЕ ми работи - person hendrikbeck; 26.07.2014

Две неща са достатъчни:

  1. config.assets.debug = false in config/enviroments/development.rb
  2. rake assets:precompile. Вижте коментар от @oma по-долу; това не е необходимо

Това е всичко!

person Lisovsky Vlad    schedule 10.12.2011
comment
1. е правилно. Благодаря! Моля, премахнете № 2. rake assets:precompile не е нещо, което искаме да правим в разработката - person oma; 25.01.2012
comment
Въпреки че това вероятно не е работило по времето, когато първоначалният въпрос е бил публикуван, сега работи (и, както каза @Race, вече с 3.2.3) и трябва да бъде приетият отговор сега. - person radiospiel; 25.02.2013
comment
Както istvanp посочва по-долу, това не прави това, което мислите, че прави. Той само компилира всички JS и CSS активи в един голям файл - не изключва регистрирането за активи. - person davidgoli; 25.09.2013
comment
Това е всичко, което е необходимо в rails 4.2.2 - person thisfeller; 19.08.2015
comment
Добавяне към казаното от @davidgoli: config.assets.debug контролира конкатенацията на активи. Изключването на това означава, че отстраняването на грешки, напр. JS и CSS с помощта на браузъра ще станат повече работа. Нещо като quiet_assets ще потисне регистрирането, без да ви налага да превключвате assets.debug на, добре, отстраняване на грешки. - person johncip; 01.02.2016

В крайна сметка ще бъде config.assets.logger = nil, но тази част в момента е поставена на master (все още не е направено).

person colinross    schedule 10.06.2011
comment
И при мен не работи на Rails 3.1.3. @nessur: сигурен ли си, че работи за теб? Както казва Тим, #2639 все още е отворен и не виждам индикация в този проблем на всяка корекция (и двете препратени заявки за изтегляне бяха отхвърлени). - person Adam Spiers; 12.01.2012
comment
Това няма да бъде изпълнено като този етап. github.com/rails/rails/issues/4569 - person 23inhouse; 09.09.2012
comment
@AdamSpiers според връзката: github.com/rails/rails/pull/3795 #issuecomment-3549669 Rails няма да регистрират специални маршрути за някой от регистраторите или свързаните с регистраторите мидълуер - person 23inhouse; 05.03.2013
comment
@23inhouse Вече видях това, но както вече казах е просто изявление за намерение, а не оправдание за това намерение. - person Adam Spiers; 05.03.2013
comment
гадно. Rails 4 все още не може лесно да деактивира регистрирането на активи. - person Tom Rossi; 14.09.2013
comment
Използвам Rails 4.2, сложих това в моя development.rb и то деактивира регистрирането на активи. - person Jack; 11.10.2015

Знам, че е грозно и временно решение, но използвам това:

опашка -f log/development.log | grep -vE 'актив'

person Sucrenoir    schedule 08.09.2011
comment
Ето един подобрен, който премахва и празните редове: tail -f log/development.log | grep -vE "(^\s*$|asset)" - person istvanp; 09.09.2011

Много хора са объркани относно използването на config.assets.logger = false. Ето какво прави и какво не прави.

Според документация на източника:

Задаването на config.assets.logger на false ще изключи регистрирането на обслужваните активи.

Това обаче вероятно не е това, което си мислите, че е. Деактивира само регистрационни файлове за „обслужване“ на зъбно колело, но не регистрационни файлове за заявки на 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

person lulalala    schedule 17.09.2014

config.assets.quiet = true

Това е най-новият начин.

person Adam Waite    schedule 11.08.2016
comment
Работи перфектно в Rails 5. Просто изхвърлете това в development.rb - person Andreykul; 26.08.2016
comment
Съчетано с отстраняване на грешки, не решава всичките ми нужди в Rails 5. - person Pysis; 22.03.2019

Използвайте:

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.

person Celso Dantas    schedule 07.02.2012

Във файла development.rb в config/environments ще намерите реда config.assets.debug = true.

Превключете това на false и по-голямата част от изхода за натоварване на активите ще изчезне. В моята система остават само двете заявки, за application.css и .js.

person TKAB    schedule 07.09.2011
comment
Тази настройка ви позволява само да разделяте таблиците със стилове и javascript в отделни файлове, когато е зададена на true за по-лесно отстраняване на грешки. Когато е зададено на false (по подразбиране), той ги обединява в един голям файл. Така че наистина намалява изхода за отстраняване на грешки, но ако имате изображения например, те изобщо не се засягат. Информация за официалното ръководство тук. - person istvanp; 08.09.2011
comment
Виждам. Благодаря, че изясни това. Но не промених настройката на тази променлива, така че по подразбиране беше true. - person TKAB; 10.09.2011

Във файл config/environments/development.rb, моля, добавете:

config.assets.debug = false

config.assets.logger = false
person Najam Tariq    schedule 28.08.2013

Lograge за победата - той убива досадните настройки по подразбиране на Ruby on Rails на кутията (напр. регистриране на активи, регистриране на частично изобразяване) и може да се персонализира, ако искате да добавите/премахнете конкретни елементи.

person Yarin    schedule 07.01.2014

Споменатото по-горе свързано решение помага:

https://github.com/evrone/quiet_assets

Също както по-долу, работи добре за мен:

3.1 (само) (3.2 се прекъсва преди_dipatch)

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
person Sumit Munot    schedule 11.01.2014

В config/environments добавете config.log_level = :error към .rb файловете, които искате да промените. Това ще промени настройките на регистрационния файл само на грешка.

person Chris O    schedule 01.09.2011
comment
За съжаление не, защото най-вече използвам дневника за разглеждане на заявката и SQL данните, които са на ниво отстраняване на грешки. Съобщенията за активи са на ниво информация (което е по-ниско от нивото на отстраняване на грешки), така че няма смисъл да получавам това, което искам с тази настройка. - person istvanp; 02.09.2011
comment
Това не е добра идея. Той ще скрие други съобщения на ниво информация, които може да искате да все още регистрирате. - person ifightcrime; 05.06.2013