Жемчужина квартиры - добавление текущей базы данных во все журналы сервера - PullRequest
0 голосов
/ 15 октября 2018

Я использую драгоценный камень Apartment для переключения арендатора (базы данных), используемого для многопользовательского приложения Rails.

В журналах моего сервера я хотел бы вывести текущего арендатора (базу данных), используемого для каждогоодна строка в файле журнала.

Когда я делаю rails s, сервер фактически никогда не запускается с кодом ниже, который находится в каталоге инициализаторов.Сервер просто зависает ... так странно.Нет сообщения об ошибке и нет работающего сервера.Если я уберу #{Apartment::Tenant.current} ниже, все будет хорошо ... но ... я действительно хочу знать текущий арендатор (базу данных) в моих файлах журнала.

/ initializers / log_formatting.rb:

class ActiveSupport::Logger::SimpleFormatter 
  def call(severity, time, progname, msg)
    "#{Apartment::Tenant.current} #{msg.strip} (pid:#{$$})\n"
  end
end

Есть какие-нибудь идеи о том, как получить текущий используемый арендатор (базу данных) для каждой строки моего файла журнала?

Спасибо!

1 Ответ

0 голосов
/ 15 октября 2018

Я бы предложил вам использовать log_tags.Из документации rails :

config.log_tags принимает список: методов, на которые отвечает объект запроса, Proc, который принимает объект запроса, или что-то, что отвечает to_s,Это позволяет легко помечать строки журнала отладочной информацией, такой как поддомен и идентификатор запроса, и то, и другое очень полезно при отладке многопользовательских производственных приложений.

Вы можете добавить эту конфигурацию в application.rb или production.rbв зависимости от того, что вам нужно.

Например: config.log_tags = [ :subdomain, :request_id, lambda { |request| request.headers["tenant_name"] } ]

Примечание. Если вы добавляете это для среды разработки и работаете на your_subdomain.localhost:3000, то субдомен не будет представлен какlocalhost не поддерживает субдомены.Есть некоторые обходные пути, такие как изменение файла / etc / hosts, но я не буду его рекомендовать.Более чистое решение - использовать your_subdomain.lvh.me:3000

...