Исключить подкаталог в классе Eager Load - PullRequest
0 голосов
/ 30 мая 2009

Я столкнулся с проблемой, когда мое приложение Rails настроено на кэширование классов при работе в промежуточной или производственной среде. Хотя load_paths содержит только «app / models», похоже, что шаги инициализации рекурсивно кэшируют все в «app / models».

  # Eager load application classes
  def load_application_classes
    if configuration.cache_classes
      configuration.eager_load_paths.each do |load_path|
        matcher = /\A#{Regexp.escape(load_path)}(.*)\.rb\Z/
        Dir.glob("#{load_path}/**/*.rb").sort.each do |file|
          require_dependency file.sub(matcher, '\1')
        end
      end
    end
  end

Проблема в том, что у нас есть подкаталог в 'app / models', который содержит файлы с инструкциями require, которые ссылаются на параллельную среду JRuby. Поскольку Rails ничего не знает об этой среде, наше приложение ломается при загрузке.

В нынешнем виде предлагаются предлагаемые решения ... к сожалению, идеальным является только # 1.

1) Простейшим решением было бы исключить подкаталог виновника, но ничего не нашли, как этого добиться.

2) Обезьяна исправляет метод load_application_classes, чтобы пропустить определенный подкаталог.

3) Переместить подкаталог из «app / models». Чувствует себя немного хакерским и потребует немало изменений кода.

Мысли

1 Ответ

1 голос
/ 31 мая 2009

В качестве временной меры вы можете перейти с версией варианта 2 и переопределить определение load_application_classes, заменив его пустой реализацией. Это заставит вас явно требовать нужные вам классы, но даст вам полный контроль над тем, что загружается, и будет полностью прозрачным решением.

Похоже, ваше приложение достаточно сложное, что выходит за рамки Rails. Я знаю, что это не дает прямого ответа на ваш вопрос, поэтому заранее извиняюсь, но вы можете рассмотреть возможность поиска альтернативной среды Ruby, такой как Merb. Rails - это здорово, но рано или поздно вы натолкнетесь на край фреймворка - звучит так, как будто вы сейчас там.

Мы перешли на Merb в прошлом году и не восстановили его.

Chris

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