AuthLogic меняет порядок инициализации Rails 3? - PullRequest
1 голос
/ 16 января 2012

У меня есть работающее приложение на Rails 3.1, с которым я сейчас пытаюсь использовать Authlogic. Он внедряется в производство под юри в ситуации обратного прокси. До сих пор, я установил ENV['RAILS_RELATIVE_URL_ROOT'] в config/environments/production.rb, чтобы он работал просто отлично - все работает правильно, в том числе javascript_include_tag, link_to, маршрутизация ресурсов и т. Д.

Добавление Authlogic, однако, сломало javascript_include_tag и stylesheet_include_tag - Rails не включает RAILS_RELATIVE_URL_ROOT в сгенерированный URL, как это было раньше. Все остальное просто отлично, однако - url_for, form_for, new_*_path и т. Д. Все работает нормально. Я немного покопался и в итоге выяснил, что функции *_include_tag используют глобальную опцию конфигурации под названием relative_url_root, и что это свойство устанавливается во время инициализации в строке 15 actionpack/action_controller/metal/compatibility.rb. Я добавил несколько операторов отладки и увидел, что без AuthLogic порядок операций был следующим:

  1. environments/*.rb загружено
  2. production.rb оценено и ENV['RAILS_RELATIVE_URL_ROOT'] установлено
  3. Выполните код в actionpack/action_controller/metal/compatibility.rb и установите свойство конфигурации relative_url_root в ActionController.

Если я добавлю gem authlogic в Gemfile приложения, однако, порядок изменится - действие металла action_controller происходит сначала , а затем запускается работа, связанная с окружающей средой. Таким образом, в этих условиях во время установки параметра конфигурации relative_url_root, ENV['RAILS_RELATIVE_URL_ROOT'] еще не было установлено , и что касается определенных частей приложения, оно не не существует.

Просматривая код для Authlogic, я не вижу ничего, что могло бы повлиять на инициализацию Rails - похоже, что оно не регистрирует какие-либо движки, инициализаторы или что-то подобное (хотя я, конечно, могу ошибаться тот). Gemfile приложения включает в себя несколько других драгоценных камней, кроме Authlogic, и ни один из них, похоже, не влияет на приложение таким образом. Кажется, не имеет значения, в каком порядке я помещаю драгоценные камни в Gemfile, что, я полагаю, логически означает, что это должно быть чем-то, что конкретно делает Authlogic, но я точно не могу понять, что именно. Есть идеи?

...