Рельсы с плагинами ActiveScaffold и Lockdown
Наше приложение разработано с использованием Rails 2.3.5 вместе с ActiveScaffold. ActiveScaffold добавляет немного магии во время выполнения, просто объявив в контроллере следующее:
class SomeController < ApplicationController
active_scaffold :model
end
Просто добавив эту одну строку в контроллере, все остальные действия и их соответствующие представления становятся доступными благодаря метапрограммированию ActiveScaffold. Поскольку большая часть кода добавляется во время выполнения, запросы в режиме разработки, кажется, немного медленнее, поскольку отсутствует class_caching.
Нам нужно было добавить слой авторизации, и моя команда выбрала плагин Lockdown, который анализирует файл init.rb, где вы объявляете все правила авторизации. Lockdown хранит правила авторизации путем анализа файла init.rb и оценки контроллеров, объявленных в файле init.rb. Таким образом, для каждого запроса Lockdown оценивает все контроллеры, вынуждая ActiveScaffold добавить множество метапрограммирования, которое, в свою очередь, выполняет db-запросы для определения определений столбцов каждой модели. Это значительно замедляет запрос в разработке, так как отсутствует class_caching. Несколько раз запрашивающие занимают почти 30-45 секунд.
Есть ли способ заставить ActiveScaffold сделать свое волшебство в before_filter? Что-то вроде следующего:
class SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.class_eval do
active_scaffold :model
end
end
end
class SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.instance_eval do
active_scaffold :model
end
end
end
class SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.class.class_eval do
active_scaffold :model
end
end
end
class SomeController < ApplicationController
before_filter :init_active_scaffold
private
def init_active_scaffold
self.class.instance_eval do
active_scaffold :model
end
end
end
Я перепробовал все вышеперечисленные четыре варианта, когда я делаю запрос, браузер, кажется, показывает индикатор загрузки, но ничего не происходит.
Любая помощь приветствуется. Заранее спасибо.
1 ответ
Блокировка только повторно выполняет init.rb в режиме разработки, поэтому вы можете вносить изменения без перезапуска приложения. Это будет медленнее - удобство компромисса. Хорошей новостью является то, что Lockdown будет выполнять этот анализ только один раз в производственном режиме.
Я не использую ActiveScaffold, поэтому не могу предложить там никакой помощи, но подумал, что это вас заинтересует.