0

我们的应用程序是使用 Rails 2.3.5 和 ActiveScaffold 开发的。ActiveScaffold 在运行时添加了相当多的魔力,只需在控制器中声明如下:

class SomeController < ApplicationController
 active_scaffold :model
end

只需在控制器中添加这一行,由于 ActiveScaffold 的元编程,所有的 restful 操作及其相应的视图都可用。由于大部分代码是在运行时添加的,因此在开发模式下,请求似乎有点慢,因为没有 class_caching。

我们需要添加一个授权层,我的团队选择了 Lockdown 插件,它解析一个 init.rb 文件,您可以在其中声明所有授权规则。Lockdown 存储授权规则的方式是解析 init.rb 文件并评估 init.rb 文件中声明的控制器。因此,对于每个请求,Lockdown 都会评估所有控制器,从而迫使 ActiveScaffold 添加大量元编程,从而使数据库查询找出每个模型的列定义。由于没有 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

我尝试了上述所有四个选项,当我发出请求时,浏览器似乎显示加载指示器但没有任何反应。

任何帮助表示赞赏。提前致谢。

4

1 回答 1

0

Lockdown 仅在开发模式下重新解析 init.rb,因此您可以在不重新启动应用程序的情况下进行更改。它会更慢 - 一个方便的权衡。好消息是 Lockdown 只会在生产模式下进行一次解析。

我不使用 ActiveScaffold,所以我无法提供任何帮助,但我认为这会引起您的兴趣。

于 2010-01-01T21:17:35.967 回答