|
1 | 1 | # Setup через docker, docker-compose и dip
|
2 | 2 |
|
| 3 | +- для начала нужно зарегаться в algolia.com и получить API-ключи (у dev.to хорошие сиды, но они завязаны на algolia, поэтому приходится этим заниматься) |
| 4 | + - cp .env-example .env (.env is gitignored) |
| 5 | + - в .env вставить свои ключи от Algolia |
3 | 6 | - gem install dip (maybe change .ruby-version file with your ruby ver)
|
4 | 7 | - cd .dev_to
|
5 | 8 | - docker-compose build
|
6 |
| -- For algolia not to brake setup |
7 |
| - - cp .env-example .env (.env is gitignored) |
8 |
| - - in .env paste your Algolia keys |
9 | 9 | - dip provision
|
10 | 10 | - docker-compose up
|
11 | 11 | - open localhost:3000 in your browser
|
12 | 12 |
|
13 | 13 | After setup you can
|
14 | 14 |
|
| 15 | +- dip bash - to do any other commands or just to peek around |
15 | 16 | - dip bundle - to bundle install after adding gems
|
16 | 17 | - dip setup - to rerun bin/setup
|
17 |
| -- dip bash - to do any other commands or just to peek around |
| 18 | + |
18 | 19 |
|
19 | 20 | # Задание №4
|
20 | 21 |
|
21 | 22 | ## Цели выполнения задания
|
22 | 23 |
|
23 |
| -- Попрактиковаться в настройке мониторинга |
24 |
| -- Попрактиковаться в поиске возможностей для оптимизации |
25 |
| -- Попрактиковаться в проверке гипотез и обосновании предложений по оптимизации |
26 |
| -- Познакомиться с интересным живым `Rails` `open-source` проектом |
| 24 | +- Попрактиковаться в подключении APM |
| 25 | +- Попрактиковаться в проверке гипотез, бенчмарках и обосновании предложений по оптимизации |
27 | 26 |
|
28 | 27 | ## Подготовка
|
29 | 28 |
|
30 |
| -- Завести `dev.to` локально (прямо в этом репозитории, не нужно клонировать `dev.to` от них, иначе будут отличаться версии) |
| 29 | +- Завести `dev.to` локально через docker, по инструкции выше |
31 | 30 | - Настроить свой `NewRelic` для мониторинга локального `dev.to`
|
32 |
| -- Настроить свой `Skylight` / `Scout` / `Datadog` для мониторинга локального dev.to |
33 |
| -- Настроить свой `Prometheus` + `Grafana` для мониторинга локального `dev.to` |
34 | 31 | - Настроить `rack-mini-profiler`
|
35 |
| -- Настроить `rails-panel` |
36 |
| -- Сделать возможность запуска проекта в `local_production` |
37 | 32 |
|
38 |
| -### local_production |
| 33 | +## Оптимизация |
39 | 34 |
|
40 |
| -Можно либо |
| 35 | +Инструменты мониторинга показывают, что самой горячей точкой является главная страница, `StoriesController#index`. |
41 | 36 |
|
42 |
| -- сделать новый `environment`, `local_production` |
43 |
| -- использовать `production`, но найти способ переопределить нужные настройки локально |
| 37 | +В частности, заметное время занимает рендеринг `partial`-ов `_single_story.html.erb`. |
44 | 38 |
|
45 |
| -Основное, что должно отличать ваш `local_production` от `development`: |
| 39 | +Рассмотрите гипотезу о том, что можно закешировать `<%= render "articles/single_story", story: story %>` в `_main_stories_feed.html.erb` и это даст заметный эффект. (В этот паршл входят счётчики лайков и комментариев, они не заморозятся?) |
46 | 40 |
|
47 |
| -- `cache_classes: true` |
48 |
| -- `eager_load: true` |
49 |
| -- `perform_caching: true` |
50 |
| -- `assets_debug: false` |
51 |
| -- `assets_compile: false` |
| 41 | +- Не забудьте включить локальное кэширование (`touch tmp/caching-dev.txt` / `rails dev:cache`) |
| 42 | +- Сделайте `benchmark` с помощью `ab` (`ab -n 100 -c 5 http://localhost:3000/`) |
| 43 | +- Сделайте оптимизацию |
| 44 | +- Перезапустите `benchmark` и сравните результаты |
52 | 45 |
|
53 |
| -Для работы потребуется прекомпиляция ассетов `rake assets:precompile` |
| 46 | +Если вы посчитаете, что применить кэширование здесь целесообразно, оформите обоснованный `PR` с этим предложением. Напишите в описании `PR`, какая была гипотеза, откуда она взялась, как вы проверяли гипотезу, какие результаты получили. Приложите скриншоты графиков APM, если на них виден эффект оптимизации. |
54 | 47 |
|
55 |
| -## Оптимизация |
56 | 48 |
|
57 |
| -Все инструменты мониторинга показывают, что самой горячей точкой является главная страница, `StoriesController#index`. |
| 49 | +## Бонусная программа |
| 50 | +- Попробовать что-то ещё, поимио `NewRelic` - `datadog`, `scout`, `skylight`, etc... |
| 51 | +- Настроить `local_production` окружение, сравнить скорость работы с обычным `development` |
58 | 52 |
|
59 |
| -В частности, заметное время занимает рендеринг `partial`-ов `_single_story.html.erb`. |
| 53 | +### local_production |
60 | 54 |
|
61 |
| -Рассмотрите гипотезу о том, что можно закешировать `<%= render "articles/single_story", story: story %>` в `_main_stories_feed.html.erb` и это даст заметный эффект. |
| 55 | +Cделать новый `environment`, `local_production` |
62 | 56 |
|
63 |
| -- Не забудьте включить локальное кэширование (`touch tmp/caching-dev.txt`) |
64 |
| -- Сделайте `benchmark` с помощью `ab` |
65 |
| -- Сделайте оптимизацию |
66 |
| -- Перезапустите `benchmark` |
| 57 | +Основное, что должно отличать ваш `local_production` от `development`: |
67 | 58 |
|
68 |
| -Если вы посчитаете, что применить кэширование здесь целесообразно, оформите обоснованный `PR` с этим предложением. Напишите в описании `PR`, какая была гипотеза, откуда она взялась, как вы проверяли гипотезу, какие результаты получили. Приложите скриншоты графиков мониторинга, если на них виден эффект оптимизации. |
| 59 | +- `cache_classes: true` |
| 60 | +- `eager_load: true` |
| 61 | +- `perform_caching: true` |
| 62 | +- `assets_debug: false` |
| 63 | +- `assets_compile: false` |
69 | 64 |
|
70 |
| -## Bonus |
| 65 | +Для работы потребуется прекомпиляция ассетов `rake assets:precompile` |
71 | 66 |
|
72 |
| -Поищите возможности для оптимизации самостоятельно. Если сможете что-то найти и оптимизировать, добавляйте в `PR` ваши оптимизации с обоснованиями. |
73 | 67 |
|
74 | 68 | ## Сдача задания
|
75 | 69 |
|
76 |
| -`PR` в этот репозиторий с кодом и подробным описанием проделанной работы в описании `PR`-а. |
| 70 | +Как обычно, `PR` в этот репозиторий с кодом и case-study по проделанной работе в описании `PR`-а, или в файле. |
77 | 71 |
|
78 | 72 | <div align="center">
|
79 | 73 | <br>
|
|
0 commit comments