Як я можу відключити реєстрацію повідомлень конвеєра (зірочки) активів у 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який замовчує оператори SQL ActiveRecord.


Хтось повідомив про помилку з цього приводу: # 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/isissue/2639#issuecomment-6591735


3
За станом на Rails 3.2.1 ці потяги в поодинці не розчавлюють ведучу зорочку, а файл choonkeat все ще потрібен.
IAmNaN

5
Справді. Звучить, як цей файл завжди буде потрібен, оскільки встановлення config.assets.loggerзначення false лише замовчить те, що виводиться зірочками. Це замовчує запити / відповіді Action Pack, що є тим, що розробник Rails заявив, що не має наміру мовчати в особливих випадках .
Бен Крігер

32
хм. ви повинні просто запустити це в основу рейок. зробіть це опцією в config.assets
jsharpe

2
На Windows замініть '/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/isissue/2639 повинні зареєструвати всі вхідні запити, і я погоджуюся з цим, я думаю, ми можемо позбутися цього накладного, коли зірочки підтримуватимуть джерельну карту github.com / sstephenson / зірочки / проблеми / 310
маршрут

5
для ледачих: gem 'quiet_assets' (будь ласка, додайте це до допису :))
reto

52

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


Працює в рейсі 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Це не те, що ми хочемо зробити у розвитку
ома

Хоча це, ймовірно, не спрацьовувало під час публікації оригінального питання, воно працює зараз (і, як заявив @Race, з witl 3.2.3 вже), і чи має бути прийнятим відповідь зараз.
radiospiel

2
Як вказує istvanp нижче, це не робить те, що ви думаєте, що робить. Він збирає лише всі JS та CSS активи в один великий файл - він не вимикає реєстрацію активів.
davidgoli

2
Це все, що потрібно в рейках 4.2.2
цездійснення

Додаючи до сказаного @davidgoli: config.assets.debug керує конкатенацією активів. Якщо вимкнути це означає, що налагодження, наприклад, JS та CSS за допомогою браузера, стане більшою роботою. Щось на кшталт silent_assets призведе до того, що ви будете вести журнал, не змушуючи перемикати активи.debug на, ну, налагоджувати.
johncip

27

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


5
Не працює для мене ні на Rails 3.1.3. @nessur: ти впевнений, що він працює для тебе? Як каже Тім, # 2639 все ще відкритий, і я не бачу в цьому питанні жодних виправлень (обидва посилання на запит на витяг були відхилені).
Адам Шпієр

Це не буде реалізовано на цьому етапі. github.com/rails/rails/isissue/4569
23inhouse

@AdamSpiers за посиланням: github.com/rails/rails/pull/3795#issuecomment-3549669 "Рейки не стосуються особливих випадків, щоб жоден з лісорубів чи посередницьких програм, що стосуються реєстраторів, не записував конкретні маршрути"
23inhouse

3
Бампер. Rails 4 все ще не може легко відключити реєстрацію ресурсів.
Том Россі

1
Я використовую Rails 4.2, помістіть це до свого development.rb, і це відключило реєстрацію активів.
Джек

12

Я знаю, що це потворне і тимчасове рішення, але я використовую це:

хвост -f журнал / development.log | grep -vE 'актив'


9
Ось покращений варіант, який також видаляє порожні рядки:tail -f log/development.log | grep -vE "(^\s*$|asset)"
istvanp

12

Багато людей плутаються з приводу використання config.assets.logger = false. Ось що це робить, а що не робить.

Відповідно до вихідної документації :

Якщо встановити config.assets.loggerзначення false, вимкнути журнал оброблених активів.

Однак, напевно, це не те, що ти думаєш. Він вимикає лише журнали "обслуговуючого" зірочки , а не журнали запитів "Ruby on Rails". Інструмент Ruby on Rails пояснює це чітко тут: https://github.com/rails/rails/isissue/4569#issuecomment-3594500


Беручи приклад із посилання, такі журнали вимкнено:

Обслуговуваний актив /jquery.isotope.js - 304 Не змінено (0ms)

Але таких журналів немає

Почав GET "/assets/jquery.isotope.js?body=1" за 127.0.0.1 о 20.01.2012 23:16:46 -0500


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.


3
Цей параметр дозволяє лише розбивати таблиці стилів та javascript на окремі файли, коли встановлено значення true для легшої налагодження. Якщо встановлено значення false (за замовчуванням), вони об'єднують їх у один великий файл. Таким чином, це дійсно зменшує вихід налагодження, але якщо у вас є зображення, наприклад, на них взагалі не впливає. Офіційна інформація довідника тут .
istvanp

1
Розумію. Дякуємо, що очистили це. Але я не змінив налаштування цієї змінної, тому моїм замовчуванням було true.
ТКАБ

5

У файл config / середовища / development.rb будь ласка, додайте:

config.assets.debug = false

config.assets.logger = false

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 / середовищах додайте config.log_level = :errorдо .rb файлів, які потрібно змінити. Це змінить параметри журналу лише на помилки.


На жаль, ні, тому що я здебільшого використовую журнал для перегляду запиту та SQL-даних, які знаходяться на рівні налагодження. Повідомлення активів мають інформаційний рівень (який нижчий за рівень налагодження), тому не потрібно отримувати те, що я хочу за допомогою цього параметра.
istvanp

2
Це не дуже гарна ідея. Він приховає інші повідомлення рівня інформації, які, можливо, ви хочете все ще вести в журнал.
ifightcrime
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.