2016-03-15 109 views
2

我目前正在使用Mongoid ORM的rails項目。我在服務器端使用Rails管理寶石進行數據處理。 Rails版本是4.1.7,Ruby是2.1.5。問題是第一次加載管理面板時需要花費很多時間。Rails管理面板加載緩慢

我檢查了導軌的日誌。它似乎從「用戶」表中查詢每個用戶,當然加載面板的時間與用戶表中的條目數成正比。

請幫我加速面板的加載。如果需要其他信息,請詢問。謝謝。

以下是rails日誌的快照。

MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('5656bd857261693fb10a0000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 10.0400ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('56ae41fe72616930bf030000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 0.4920ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('567d01277261695b8a000000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 5.1850ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('568cad1a7261691ff2030000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 0.5010ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('561144df726169602d000000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 2.4130ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('56ae487e72616930bf460000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 0.4500ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('567d01277261695b8a000000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 5.1940ms 
    MOPED: 127.0.0.1:27017 QUERY  database=yeloapp_development collection=users selector={"$query"=>{"_id"=>BSON::ObjectId('56aa51f972616944d1300000')}, "$orderby"=>{:_id=>1}} flags=[] limit=-1 skip=0 batch_size=nil fields 
=nil runtime: 6.2580ms 

Ability.rb

class Ability 
    include CanCan::Ability 

    def initialize(user) 
    # Define abilities for the passed in user here. For example: 
    # 
    # user ||= User.new # guest user (not logged in) 
    # if user.admin? 
    #  can :manage, :all 
    # else 
    #  can :read, :all 
    # end 
    # 
    # The first argument to `can` is the action you are giving the user 
    # permission to do. 
    # If you pass :manage it will apply to every action. Other common actions 
    # here are :read, :create, :update and :destroy. 
    # 
    # The second argument is the resource the user can perform the action on. 
    # If you pass :all it will apply to every resource. Otherwise pass a Ruby 
    # class of the resource. 
    # 
    # The third argument is an optional hash of conditions to further filter the 
    # objects. 
    # For example, here the user can only update published articles. 
    # 
    # can :update, Article, :published => true 
    # 
    # See the wiki for details: 
    # https://github.com/CanCanCommunity/cancancan/wiki/Defining-Abilities 
    if user && user.admin_type == 1 
     can :access, :rails_admin  # only allow admin users to access Rails Admin 
     can :dashboard 
     can :manage, :all 
    end 
    if user && user.is_admin? 
     can :access, :rails_admin  # only allow admin users to access Rails Admin 
     can :dashboard 
     can :read, :all 
     can :manage, :statistic 
    end 
    end 
end 

rails_admin.rb

RailsAdmin.config do |config| 

    ### Popular gems integration 
    ## == Devise == 
    config.authenticate_with do 
    warden.authenticate! scope: :user 
    end 
    config.current_user_method(&:current_user) 

    ## == Cancan == 
    #config.authorize_with :cancan 

    ## == PaperTrail == 
    # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0 

    ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration 

    config.actions do 
    dashboard      # mandatory 
    index       # mandatory 
    new 
    export 
    bulk_delete 
    show 
    edit 
    delete 
    show_in_app 

    ## With an audit adapter, you can add: 
    # history_index 
    # history_show 
    end 
end 

編輯:我解決了這個問題(見答案)。但我仍然想知道它爲什麼加載速度很慢的原因。幫助表示讚賞。

回答

2

所以我通過明確地列出我想要顯示的模型來解決這個問題。所以我改變了rails_admin.rb文件。

rails_admin.rb

RailsAdmin.config do |config| 

    ### Popular gems integration 
    ## == Devise == 
    config.authenticate_with do 
    warden.authenticate! scope: :user 
    end 
    config.current_user_method(&:current_user) 

    # this is the way to whitelist the models 
    config.included_models = [write the name of models you want to show at rails panel] 


    ## == Cancan == 
    config.authorize_with :cancan 

    ## == PaperTrail == 
    # config.audit_with :paper_trail, 'User', 'PaperTrail::Version' # PaperTrail >= 3.0.0 

    ### More at https://github.com/sferik/rails_admin/wiki/Base-configuration 

    config.actions do 
    dashboard      # mandatory 
    index       # mandatory 
    new 
    export 
    bulk_delete 
    show 
    edit 
    delete 
    show_in_app 

    ## With an audit adapter, you can add: 
    # history_index 
    # history_show 
    end 
end 

希望它可以幫助別人。