Как отключить ведение журнала сообщений конвейера ресурсов (звездочек) в Ruby on Rails 3.1?

По умолчанию в Ruby on Rails 3.1 (RC1) звездочки обычно довольно подробны в журнале (dev):

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, которая заглушает SQL-запросы ActiveRecord.


person istvanp    schedule 10.06.2011    source источник
comment
Кто-то сообщил об этой ошибке: # 2639. Все еще открыт с 9/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, и теперь вместо этого мы собираемся использовать корневую стойку call)

Обновление: подходящее промежуточное программное обеспечение для стойки (вместо хрупкого 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, не намерены заглушать особые случаи. - person Ben Kreeger; 14.03.2012
comment
классно! Определенно улучшает ясность в разработке. - person Bob Walsh; 10.04.2012
comment
ммм. вы должны просто вставить это в ядро ​​рельсов. сделайте это опцией в 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
Больше не работает с последней версией рельсов 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
Как указывает истванп ниже, это не делает того, что вы думаете. Он только компилирует все ресурсы JS и CSS в один большой файл - он не отключает ведение журнала для ресурсов. - person davidgoli; 25.09.2013
comment
Это все что нужно в рельсах 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, но эта часть в настоящее время заглушена на мастере (еще не сделано).

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

Я знаю, что это уродливое и временное решение, но я использую это:

tail -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. Разработчик Ruby on Rails четко объясняет это здесь: https://github.com/rails/rails/issues/4569#issuecomment-3594500


Если взять пример из ссылки, такие журналы отключены:

Обслуживаемый актив /jquery.isotope.js - 304 не изменен (0 мс)

Но таких журналов нет

Начат 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 / environment вы найдете строку 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 / environment / 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 паузы before_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 / environment добавьте 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