рельсы не распознают sym связанные каталоги - PullRequest
0 голосов
/ 23 января 2012

Я рефакторинг некоторого общего кода в некоторых из моих приложений rails, и я столкнулся со странной проблемой с некоторыми связанными с sym каталогами. По сути, моя старая структура приложения rails была:

RAILS_ROOT
  -> app
  -> config
     -> initializers
         -> common
  ->lib
     -> common
  ...

Все работало просто отлично, и rails распознавал общие папки и загружал все файлы туда.

Поэтому я решил переместить все обычные вещи в собственный репозиторий и добавить его в мое приложение rails. Таким образом, новая структура папок выглядит как

RAILS_ROOT
  -> app
  -> config
     -> initializers
         -> common -> ../../shared/initializers/
  ->lib
     -> common -> ../shared/lib/
  -> shared
     -> initializers
     -> lib
     ...
  ... 

По какой-то причине ни один из файлов в каталогах, связанных с sym, не загружается, и я не знаю почему. Если я создаю временный каталог в папке инициализаторов и копирую некоторые «общие» файлы, они загружаются нормально, так что, похоже, это связано с тем, что он связан с символом.

1 Ответ

1 голос
/ 24 января 2012

Итак, я покопался в источнике rails и нашел следующий код для загрузки инициализаторов:

 def load_application_initializers
  if gems_dependencies_loaded
    Dir["#{configuration.root_path}/config/initializers/**/*.rb"].sort.each do |initializer|
      load(initializer)
    end
  end
end

И на основании этого вопроса: Могу ли я пройти по каталогам с символическими ссылками в Ruby с глобусом "**"? похоже, что код не будет следовать ссылкам sym.

Чтобы обойти это, я поставил следующий патч обезьяны перед строкой Rails::Initializer.run

module Rails
  class Initializer
    def load_application_initializers
      if gems_dependencies_loaded
        Dir["#{configuration.root_path}/config/initializers/**{,/*/**}/*.rb"].sort.each do |initializer|
          load(initializer)
        end
      end
    end
  end
end

Это, очевидно, взлом, и, надеюсь, я найду более чистый способ сделать это, но пока это решает мою проблему. Интересно, что код, используемый для загрузки плагинов и папки lib, следует по ссылкам sym.

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