Как отключить ведение журнала сообщений конвейера активов (звездочек) в 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.

istvanp
источник
Кто-то сообщил об ошибке по этому поводу: # 2639 . По-прежнему "открыт" по состоянию на 9/2.
istvanp
14
Принятый ответ на этот вопрос должен быть изменен или обновлен. В Rails 3.2 вы можете просто поместить config.assets.debug = falseв ваш файл development.rb.
Стюарт Джонсон
7
@StewartJohnson - объединит config.assets.debug = falseактивы в один файл, а не то, что большинство людей хотят при разработке,
Ярин

Ответы:

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

choonkeat
источник
3
Начиная с Rails 3.2.1, одни эти тяги не подавляют регистрацию звездочек, и файл choonkeat все еще необходим.
ИАМНАН
5
Верно. Звучит так, как будто этот файл всегда будет нужен, так как установка config.assets.loggerв false будет только заглушать то, что выводит Sprockets. Это заставляет замолчать запросы / ответы Action Pack, и разработчики Rails заявили, что не намерены молчать в особых случаях .
Бен Кригер
32
ммм. Вы должны просто вставить это в ядро ​​рельсов. сделать это опцией в config.assets
jsharpe
2
На окнах заменить '/dev/null'на ' NUL'
Мэтт
4
У меня работает на Rails 4.2.0
серийный движок
189

Посмотрите на https://github.com/evrone/quiet_assets и просто включите его в свой файл Gem.

Для ленивых gem 'quiet_assets', group: :development

маршрут
источник
6
Отличная работа, но очень печально, что для этого требуется отдельный драгоценный камень.
Адам Спайерс
1
Я думаю, что Хосе Валим принял правильное решение здесь github.com/rails/rails/issues/2639 rails должен регистрировать все входящие запросы, и я согласен с этим, я думаю, что мы сможем избавиться от этих издержек, когда звездочки будут поддерживать исходную карту github.com / sstephenson / звездочки / выпуски / 310
маршрут
5
для ленивых: gem 'quiet_assets'(пожалуйста, добавьте это в пост :))
reto
52

Для Ruby on Rails 3.2 добавьте config.assets.logger = falseфайл конфигурации среды разработки, который обычно находится по адресу config/environments/development.rb. Смотрите # 4512 .

Ouranos
источник
Работает в 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, уже с 3.2.3), и теперь должно быть принято решение.
радиоспил
2
Как указывает истванп ниже, это не делает то, что вы думаете. Он только компилирует все активы JS и CSS в один большой файл - он не отключает ведение журнала для ресурсов.
Давидголи
2
Это все, что нужно в рельсах 4.2.2
thisfeller
В дополнение к сказанному @davidgoli: config.assets.debug контролирует объединение ресурсов. Отключение означает, что отладка, например, JS и CSS с использованием браузера, станет более трудоемкой. Что-то вроде quiet_assets уничтожит запись в журнал, не заставляя вас переключать assets.debug для отладки.
Джоннип
27

В конце концов, так и будет config.assets.logger = nil, но эта часть в настоящее время заглушена на мастере (еще не сделано).

colinross
источник
5
У меня тоже не работает на Rails 3.1.3. @nessur: ты уверен, что это работает для тебя? Как говорит Тим, # 2639 все еще открыт, и я не вижу никаких признаков в этом вопросе какого-либо исправления (оба ссылочных запроса на получение ответа были отклонены).
Адам Спайерс
Это не будет реализовано на данном этапе. github.com/rails/rails/issues/4569
23
@AdamSpiers по ссылке: github.com/rails/rails/pull/3795#issuecomment-3549669 «В Rails не будет особого случая, когда какой-либо из регистраторов или связующее программное обеспечение, связанное с регистратором, не будет регистрировать определенные маршруты»
23
3
Облом. Rails 4 все еще не может легко отключить регистрацию ресурсов.
Том Росси
1
Я использую Rails 4.2, поместите это в мой development.rb, и он отключил ведение журнала активов.
Джек
12

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

tail -f log / development.log | grep -vE 'актив'

Sucrenoir
источник
9
Вот улучшенный, который также удаляет пустые строки:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp
12

Многие люди путаются в использовании config.assets.logger = false. Вот что он делает, а что нет.

Согласно исходной документации :

Значение config.assets.loggerfalse отключит ведение журнала обслуживаемых ресурсов.

Однако это, вероятно, не то, что вы думаете. Он отключает только журналы обслуживания звездочек , а не журналы запросов Ruby on Rails actionpack. Сопровождающий 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

lulalala
источник
10
config.assets.quiet = true

Это последний путь.

Адам Уэйт
источник
Прекрасно работает в Rails 5. Просто development.rb
свалите
В сочетании с отладкой, не решает всех моих потребностей в 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.

TKAB
источник
3
Этот параметр позволяет вам разбивать таблицы стилей и javascript на отдельные файлы, если для них установлено значение true для упрощения отладки. При значении false (по умолчанию) они объединяются в один большой файл. Так что это действительно уменьшает выход отладки, но если у вас есть изображения, например, на них не влияет вообще. Официальный путеводитель здесь .
istvanp
1
Понимаю. Спасибо за разъяснение этого. Но я не изменил настройки этой переменной, поэтому по умолчанию true.
TKAB
5

В файле config / environment / development.rb добавьте:

config.assets.debug = false

config.assets.logger = false
Наджам Тарик
источник
2

Lograge for the win - он убивает надоедливые настройки по умолчанию в Ruby on Rails (например, регистрация ресурсов, регистрация частичного рендеринга) и настраивается, если вы хотите добавить / удалить определенные элементы.

Ярина
источник
0

Ранее упомянутое связанное решение помогает:

https://github.com/evrone/quiet_assets

Кроме того, как показано ниже, это работает нормально для меня:

3.1 (только) (3.2 breaks 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
Сумит Мунот
источник
-1

В config / environment добавьте config.log_level = :error.rb файлы, которые вы хотите изменить. Это изменит настройки журнала только на ошибку.

Крис О
источник
К сожалению, нет, потому что я в основном использую журнал для просмотра запросов и данных SQL, которые находятся на уровне отладки. Сообщения активов имеют информационный уровень (который ниже уровня отладки), поэтому бесполезно получать то, что я хочу с этим параметром.
istvanp
2
Это не очень хорошая идея. Он будет скрывать другие сообщения информационного уровня, которые вы, возможно, захотите продолжать регистрировать.
ifightcrime