У меня есть приложение Rails (v2.5.3), работающее на сервере Puma, в котором используется пользовательский Gem (link_engine). Я сталкиваюсь с проблемой, когда кажется, что несколько версий Gem работают в одном приложении. Журнал стандартного вывода Puma печатает идентификатор экземпляра соединителя в предварительном запросе CORS (кажется, что использует последнюю версию гема), но не в последующем запросе актуальной информации (очевидно, используя старую версию гема). Кроме того, производственный журнал показывает старую версию сообщения Connector Instance is not found.
, в которой нет with Id:
, показанного в файле apartment.rb
ниже.
Соответствующий код от apartment.rb
(последняя версия гема, 0.1.13):
puts headers.inspect
puts "connector instance: #{headers.with_indifferent_access['Connector-Instance']}"
if headers['Connector-Instance'] == nil
fail StandardError, "Connector Instance header is not found in the request '#{headers.with_indifferent_access['Connector-Instance']}'"
return Apartment::Tenant.current
end
# example: look up some tenant from the db based on this request
tenant = LinkEngine::ConnectorInstance.find_by(id: headers.with_indifferent_access['Connector-Instance'])
fail StandardError, "Connector Instance is not found with Id: '#{headers.with_indifferent_access['Connector-Instance']}'" if tenant.blank?
return tenant.id
end
Из текущего журнала / production.log:
F, [2019-04-18T13:02:52.008520 #1294] FATAL -- : [f9d6b219-71e4-48df-a0a6-61b9b3fe9172] StandardError (Connector Instance is not found):
Из текущего общего ресурса / log / puma.stdout.log:
This is the request path: /api/v1/execution_history
non_restricted_paths are: ["/api/v1/connector_instances", "/health_check"]
{"Accept"=>"application/json", "Accept-Encoding"=>"gzip, ... }
connector instance: 54
This is the request path: /api/v1/tasks
non_restricted_paths are: ["/api/v1/connector_instances", "/health_check"]
{"Accept"=>"application/json", "Accept-Encoding"=>"gzip, ... }
connector instance: 54
This is the request path: /api/v1/settings
non_restricted_paths are: ["/api/v1/connector_instances", "/health_check"]
{"Accept"=>"application/json", "Accept-Encoding"=>"gzip, ... }
connector instance: 54
This is the path: /api/v1/execution_history
non_restricted_paths: ["/api/v1/connector_instances", "/health_check"]
{"Accept"=>"application/json", "Accept-Encoding"=>"gzip, ... }
This is the path: /api/v1/tasks
non_restricted_paths: ["/api/v1/connector_instances", "/health_check"]
{"Accept"=>"application/json", "Accept-Encoding"=>"gzip, ... }
This is the path: /api/v1/settings
non_restricted_paths: ["/api/v1/connector_instances", "/health_check"]
{"Accept"=>"application/json", "Accept-Encoding"=>"gzip, ... }
И Gemfile, и Gemfile.lock отражают последнюю версию gem (0.1.13). Я вручную удалил все предыдущие версии гема, перезапустил службу puma и даже выполнил полную перезагрузку сервера.
Мое лучшее предположение заключается в том, что Puma где-то кэширует версию драгоценного камня, которую я не могу найти, и использую ее вместо последней версии. Я провел глобальный поиск того, к чему у пользователя приложения есть доступ для чтения, и я нашел только последнюю версию Gem. Кто-нибудь имел дело с чем-то подобным?
Рассматриваемый самоцвет устанавливается как Rails Engine, если это имеет значение.