2016-03-15 4 views
2

В настоящее время я работаю над проектом rails с Mongoid ORM. Я использую Rails admin gem для обработки данных на стороне сервера. Версия Rails - 4.1.7, Ruby - 2.1.5. Проблема заключается в том, что загрузка загружается, когда панель администратора загружается в первый раз.Rails admin panel loading slow

Я проверил журналы рельсов. Кажется, он запрашивает каждого пользователя из таблицы «пользователь» и, безусловно, время, затраченное на загрузку панели, пропорционально количеству записей в таблице пользователя.

Пожалуйста, помогите мне в ускорении загрузки панели. Если какая-либо другая информация требуется, пожалуйста, спросите. Благодарю.

Ниже приведен снимок журнала рельсов.

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 

Edit: Я решил проблему (см ответ). Но все же я хотел бы знать причину, по которой она загружалась так медленно. Помощь приветствуется.

ответ

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 

Надеется, что это помогает кому-то еще.