0

私たちのアプリケーションは、Rails 2.3.5 と ActiveScaffold を使用して開発されています。ActiveScaffold は、コントローラーで次のように宣言するだけで、実行時にかなりの魔法を追加します。

class SomeController < ApplicationController
 active_scaffold :model
end

コントローラーにその 1 行を追加するだけで、ActiveScaffold のメタ プログラミングにより、すべての安らかなアクションとそれに対応するビューが利用可能になります。ほとんどのコードは実行時に追加されるため、開発モードでは class_caching がないためリクエストが少し遅くなるようです。

認証レイヤーを追加する必要があり、私のチームは、すべての認証ルールを宣言する init.rb ファイルを解析する Lockdown プラグインを選択しました。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

上記の 4 つのオプションをすべて試しました。リクエストを行うと、ブラウザに読み込みインジケータが表示されているように見えますが、何も起こりません。

どんな助けでも大歓迎です。前もって感謝します。

4

1 に答える 1

0

ロックダウンは、開発モードで init.rb のみを再解析するため、アプリケーションを再起動せずに変更を加えることができます。遅くなります - 利便性のトレードオフです。良いニュースは、Lockdown がこの解析をプロダクション モードで 1 回だけ行うことです。

私は ActiveScaffold を使用していないため、そこでは何の助けにもなりませんが、これはあなたにとって興味深いものになると思いました。

于 2010-01-01T21:17:35.967 に答える