Почему я получаю ошибки Listen L oop Bad File Descriptor на моем компьютере, но не на чьем-либо компьютере, когда задан код c? - PullRequest
0 голосов
/ 24 января 2020

В настоящее время я работаю над проектом по включению конфигураций на основе базы данных во внешнем интерфейсе нашего приложения. Они должны быть загружены после инициализации приложения, поэтому я создал модуль для их загрузки и добавил вызов к нему в 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

Я отмечу здесь, что я получаю ошибки, когда включены либо условие охраны, либо назначение.

У кого-то есть какие-либо идеи о том, что происходит ? Я почти сошел с ума.

1 Ответ

0 голосов
/ 06 февраля 2020

Так что я до сих пор не уверен в точной причине проблемы, но решение было переместить вызов загрузчика конфигурации из environment.rb в блок after_initialize в application.rb.

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