Загрузка схемы Silencing Rails - PullRequest
       0

Загрузка схемы Silencing Rails

2 голосов
/ 09 сентября 2011

Я написал мультитенантный гем для Rails.

Когда я создаю нового арендатора, я загружаю в файл schema.rb.Это прекрасно работает, за исключением того, что каждый раз, когда я делаю это, я получаю поток сообщений журнала:

-- create_table("users", {:force=>true})
NOTICE:  CREATE TABLE will create implicit sequence "users_id_seq" for serial column "users.id"
NOTICE:  CREATE TABLE / PRIMARY KEY will create implicit index "users_pkey" for table "users"
   -> 0.0102s
-- add_index("users", ["email"], {:name=>"index_users_on_email", :unique=>true})
   -> 0.0035s
-- add_index("users", ["reset_password_token"], {:name=>"index_users_on_reset_password_token", :unique=>true})
   -> 0.0040s

и т. Д. И т. Д. - все это типично для загрузки файла schema.rb.Моя проблема в том, что довольно неприятно видеть это во время тестов.Я действительно не хочу видеть это, и это портит мой тестовый вывод, делая его более трудным для отладки и проверки тестов и т. Д. *

Кто-нибудь знает, как я могу заставить этот вывод замолчать?Я попробовал в своем драгоценном камне следующее:

Rails.logger.silence{ load("#{Rails.root}/db/seeds.rb") }

, но это ничего не меняет.Кто-нибудь знает о параметре конфигурации или каким-либо другим способом, которым я могу отключить вывод при загрузке схемы?

Ответы [ 5 ]

4 голосов
/ 15 сентября 2011

После некоторого копания вот что я выучил.

Вы можете отключить журнал, выполнив следующие действия:

silence_stream(STDOUT) do
  load "#{Rails.root}/db/schema.rb"
end

silence_stream - метод ядра, так что вы должны быть в состоянии вызвать его, и он убьет STDOUT, в который выводятся данные.Поэтому вышесказанное сработало для меня.

Если вы используете Spork, это не будет работать

Так что для Spork вы обычно загружаете schema.rb в память для каждогозапустить.К сожалению, Spork получает выходные данные даже до оболочки Silence_stream и пропускает их через.Я обнаружил это, читая статью Ruby Inside , которая объясняет это.Статья сбивает с толку, потому что он оставил код там, несмотря на то, что он ничего не делает для Spork.

2 голосов
/ 31 декабря 2016

Следующее работает для меня в Rails 5 (который устарел silence_stream).В этом примере я загружаю схему в указанное время, чтобы можно было предсказать вывод, и я устанавливаю ActiveRecord::Schema.verbose в false:

  setup do
    # Normalize time in order to match fixture file
    travel_to Time.zone.parse('2015-03-01T12:00:00') do
      ActiveRecord::Schema.verbose = false
      Rake::Task['db:schema:load'].reenable
      Rake::Task['db:schema:load'].invoke
      Rake::Task['db:fixtures:load'].reenable
      Rake::Task['db:fixtures:load'].invoke
    end
  end
2 голосов
/ 03 октября 2011

На самом деле вы можете отключить вывод нагрузки схемы при использовании spork, как описано здесь .

1 голос
/ 20 июля 2015

На самом деле ActiveRecord::Migration производит вывод журнала, поэтому наиболее подходящим решением будет:

ActiveRecord::Migration.suppress_messages do
  load("schema.rb")
end

См. документы .(См. Также раздел «Управление многословием».)

1 голос
/ 03 сентября 2013

Я обнаружил, что добавление этой строки min_messages к database.yml приятно успокоило:

test:
  adapter: postgresql
  encoding: unicode
  database: myapp_test
  template: template0
  pool: 5
  username: <%= ENV['USERNAME'] %>
  password: <%= ENV['PASSWORD'] %>
  min_messages: WARNING

Я также обнаружил, что параметр шаблона решает проблему кодирования SQL_ASCII в Ubuntu PG::Error: ERROR: new encoding (UTF8) is incompatible with the encoding of the template database (SQL_ASCII)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...