В настоящее время я работаю над проектом по включению конфигураций на основе базы данных во внешнем интерфейсе нашего приложения. Они должны быть загружены после инициализации приложения, поэтому я создал модуль для их загрузки и добавил вызов к нему в environment.rb после Rails.application.initialize!.
Проблема в том, что когда этот код Включено, моя консоль залила ошибками прослушивания l oop с плохими дескрипторами файлов, такими как:
2020-01-24 09:18:16 -0500: Listen loop error: #<Errno::EBADF: Bad file descriptor>
/Users/fionadurgin/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/server.rb:383:in `select'
/Users/fionadurgin/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/server.rb:383:in `handle_servers'
/Users/fionadurgin/.asdf/installs/ruby/2.6.5/lib/ruby/gems/2.6.0/gems/puma-4.3.1/lib/puma/server.rb:356:in `block in run'
Когда я отключаю вызов ConfigurationLoader или методы, которые я вызываю на модели, я не дольше получите эти ошибки.
Проблема в том, что я не могу воспроизвести эту проблему на другом компьютере или в спецификации. Я пробовал на двух других ноутбуках и на одном из наших промежуточных серверов, и они отлично работают с включенным ConfigurationLoader.
Я попытался перезагрузить компьютер, работать из свеже клонированного репозитория и установить все файлы разрешения для приложения на 777. Пока ничего не работает.
Вот модуль ConfigurationLoader:
module ConfigurationLoader
# Overrides client default configurations if frontend configurations exist
def self.call
Configurations::ImportRowMapping.override_configurations
rescue ActiveRecord::NoDatabaseError => e
log_no_database_error(e)
rescue ActiveRecord::StatementInvalid => e
log_statement_invalid_error(e)
rescue Mysql2::Error::ConnectionError => e
log_connection_error(e)
end
def self.log_no_database_error(error)
Rails.logger.warn(
'Could not initialize database backed configurations, database does '\
'not exist'
)
Rails.logger.warn(error.message)
end
def self.log_statement_invalid_error(error)
Rails.logger.warn(
'Could not initialize database backed configurations, table does '\
'not exist'
)
Rails.logger.warn(error.message)
end
def self.log_connection_error(error)
Rails.logger.warn(
'Could not initialize database backed configurations, could not '\
'connect to database'
)
Rails.logger.warn(error.message)
end
end
Вызов в environment.rb:
# Load the Rails application.
require_relative 'application'
require_relative 'configuration_loader'
# Initialize the Rails application.
Rails.application.initialize!
ConfigurationLoader.call
И вызываемый метод модели:
def self.override_configurations
return unless any?
Rails.application.client.payroll_service_file.payroll_service_file
.mappings = all.to_a
end
Я отмечу здесь, что я получаю ошибки, когда включены либо условие охраны, либо назначение.
У кого-то есть какие-либо идеи о том, что происходит ? Я почти сошел с ума.