запустить команду и убить в случае успеха - PullRequest
0 голосов
/ 14 мая 2018

У меня есть Rails, развернутый в Kubernetes.В настоящее время время предварительной загрузки приложения огромно (около минуты), и я ищу способы уменьшить это время.

Одним из решений, которое я нашел, был гем под названием bootsnap, который кэширует некоторые важные файлы, поэтому каждый раз, когда вы загружаете эти файлы, уже загружены, и выигрыш в предварительной загрузке составляет около 50%

Дело в том, что это будет работать, только если мы перезапустим сервер и с помощью Kubernetes мы всегда создадим новый Pod, поэтому кеша не будет и нет никаких преимуществ в использовании bootsnap.

Чтобы создать этот кеш, мне нужно всего лишь запустить rails server, поэтому я подумал, что мог бы добавить команду в мой Dockerfile для запуска Rails, а затем, в случае успеха, убить ее, потому что в этот момент, файлы уже были кэшированы, и мое изображение будет содержать эти файлы

Есть ли способ, что я могу сделать что-то вроде

RUN rails server --daemon
RUN until port 3000 is not up wait
RUN kill server

Ответы [ 2 ]

0 голосов
/ 14 мая 2018

Я думаю, что это работает с

#!/bin/sh

bundle exec rails server --daemon

while ! nc -z localhost 3000; do
  echo "Checking for Rails"
  sleep 0.5
done

kill $(cat tmp/pids/server.pid)
0 голосов
/ 14 мая 2018

Вы должны быть в состоянии сделать это.Добавьте эти 3 строки (разработано) в ваш Dockerfile и протестируйте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...