Rails Server чрезвычайно медленно развивается

#ruby-on-rails #ruby #ruby-on-rails-5

#ruby-на-рельсах #рубин #ruby-on-rails-5 #ruby-on-rails #ruby

Вопрос:

У меня есть приложение rails 5, которое работает очень медленно после загрузки сервера или изменения файла .rb. Ниже приведен мой вывод командной строки после того, как я загрузил сервер с помощью rails server и загрузил простую страницу. Кроме того, если я меняю модель, контроллер или помощника, серверу требуется примерно столько же времени, чтобы ответить на следующий запрос. После загрузки запроса страницы загружаются нормально, но этот первый запрос после каждого изменения может занять 30 секунд, что в сумме получается довольно быстро. Я попытался установить следующие конфигурации в разделе «разработка» (аналогичные вопросы предлагали эти изменения). Кроме того, у меня есть этот сервер разработки, работающий на digital ocean droplet с 4 ГБ памяти.

 config.assets.debug = false
config.assets.digest = false
  

Мой вывод:

 rails server
=> Booting Puma
=> Rails 5.2.2 application starting in development
=> Run rails server -h for more startup options
Puma starting in single mode...
* Version 3.12.0 (ruby 2.5.3-p105), codename: Llamas in Pajamas
* Min threads: 5, max threads: 5
* Environment: development
* Listening on tcp://0.0.0.0:3000
Use Ctrl-C to stop
Started GET "/treadmill-parts-model-select" for 98.251.169.224 at 2019-04-03 
11:51:29  0000
Cannot render console from 98.251.169.224! Allowed networks: 127.0.0.1, ::1, 
127.0.0.0/127.255.255.255
(2.1ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, 
',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  
@@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
↳ /usr/local/rvm/gems/ruby-2.5.3/gems/activerecord- 
5.2.2/lib/active_record/log_subscriber.rb:98
(2.4ms)  SELECT 'schema_migrations'.'version' FROM 'schema_migrations' ORDER 
BY 'schema_migrations'.'version' ASC
↳ /usr/local/rvm/gems/ruby-2.5.3/gems/activerecord- 
5.2.2/lib/active_record/log_subscriber.rb:98
Processing by SearchController#treadmill_model_search as HTML
  Rendering search/treadmill_model_search.html.erb within layouts/application
  Product Load (113.8ms)  SELECT DISTINCT 'products'.'brand' FROM 'products' WHERE 'products'.'product_type' = 'Treadmill' ORDER BY 'products'.'brand' ASC
  ↳ app/views/search/treadmill_model_search.html.erb:22
  Rendered search/treadmill_model_search.html.erb within layouts/application (167.6ms)
  Rendered layouts/_header.html.erb (5.8ms)
  Rendered layouts/_flash_messages.html.erb (1.1ms)
  Rendered layouts/_footer.html.erb (0.5ms)
Completed 200 OK in 18746ms (Views: 18565.0ms | ActiveRecord: 124.7ms)`
  

Комментарии:

1. Я бы попытался установить DevTrace и опубликовать здесь скриншот трассировки. Вы должны быть в состоянии увидеть там узкое место, если таковое имеется в коде.

2. @cannon Вы нашли какое-либо решение для этого?

3. В итоге я снял этот проект с сервера Digital ocean и просто запустил его локально на Mac, что помогло. Ваш проект выполняется локально? @NimishGupta

4. Да, мой проект выполняется локально. все еще требуется 8-10 секунд для обработки запроса при изменении файла .rb

Ответ №1:

Похоже, что каждый раз, когда ваш rails-сервер обнаруживает изменение страницы, он проверяет, находится ли их миграция в ожидании, что займет некоторое время.

 #config/environments/development.rb

  config.active_record.migration_error = false
  

мог бы помочь с этой проверкой.

В среде разработки код вашего приложения перезагружается при каждом запросе. Это замедляет время отклика, но идеально подходит для разработки, поскольку вам не нужно перезапускать веб-сервер при внесении изменений в код.

Как и в случае с более крупными проектами, вы захотите запретить rails предварительно загружать весь код, который не нужен, особенно если вы все равно работаете только над частью своего проекта. Также в среде

 #config/environments/development.rb

  # Do not eager load code on boot.
  config.eager_load = false
  

Вы можете прочитать больше об этих настройках конфигурации среды здесь

Хотя 4 ГБ памяти кажутся красным флагом, если вы не работаете над масштабным проектом … возможно, потребуется изучить ваши инициализации и то, что весь ваш проект загружается при загрузке.