То, что я видел здесь, - это чтобы ваше приложение посмотрело на переменную окружения CF_INSTANCE_INDEX
. Это нулевой индекс, который показывает номер экземпляра вашего приложения. Итак, 0 - это первый экземпляр, 1 - это второй, 2 - третий, и т. Д. c ...
Ваше приложение взглянет на эту переменную env, и если значение не равно 0, то оно выйти или ничего не делать, или что-то имеет смысл. Делая это, только ваш первый экземпляр приложения будет запускать этот бит кода. Остальные пропустят или ничего не сделают.
Другой вариант, который немного новее, - это использование нескольких процессов в вашем приложении. Это позволит вам иметь веб-процесс и отдельный процесс рабочий / планировщик (как хотите, чтобы он назывался). Затем вы можете масштабировать их независимо, так что ваш веб-процесс может быть go настолько высоким, насколько это необходимо, но ваш другой процесс может быть установлен на единицу.
Этого можно достичь, создав Procfile
с чем-то вроде этого:
web: bundle exec rackup config.ru -p $PORT
worker: bundle exec rake worker:start
И с использованием cf7 push myapp
или cf v3-push myapp
.
Полные инструкции приведены здесь:
https://docs.cloudfoundry.org/devguide/multiple-processes.html
Я повторю, что это новее, и если вы используете какую-то технологию автоматического масштабирования, вам нужно убедиться, что она совместима с этим новым методом развертывания приложений.