Procfile запускает процессы в своем собственном рабочем каталоге

У меня есть этот простой Procfile

web: myapp

myapp находится в пути, но домашний каталог процессов должен быть ./directory/. Как я могу указать в Procfile, где процесс должен быть запущен?

https://github.com/ddollar/foreman/pull/101 не помогает потому что предполагается, что этот рабочий каталог должен быть одинаковым для каждого процесса, указанного в Procfile


person JohnDoe    schedule 08.11.2012    source источник
comment
если вы используете gunicorn, этот пост может вам помочь   -  person JPG    schedule 09.04.2021


Ответы (3)


Оболочка - это ответ. Это так же просто, как

web: sh -c 'cd ./directory/ && exec appname'
person JohnDoe    schedule 09.12.2012
comment
Зачем вам sh -c, кавычки, точка и косая черта? Разве вы не можете просто сделать: web: cd directory && exec appname? - person ma11hew28; 28.06.2015
comment
Я помню, проблема заключалась в том, что первый «cd» будет запущен в своем собственном процессе, и после его завершения каталог, в который он был изменен, будет возвращен обратно в то место, где работает мастер. Использование 'sh' создаст свою собственную среду, и все, что указано в кавычках после этого, унаследует эту среду. - person JohnDoe; 23.09.2015

Вы можете связать набор команд оболочки вместе. В текущей версии Foreman вам не нужно заключать это в команду оболочки, как в ответе @JohnDoe.

web: cd server_dir && start web_service
clk: cd clock_tower && start timers

Они будут запускать необходимые процессы из соответствующих папок и отслеживать их независимо.

person iGbanam    schedule 06.06.2017
comment
У меня есть этот frontend: cd ../frontend/ && npm run client, но он ищет package.json в текущем каталоге, а не там, где я CD. - person Arup Rakshit; 22.12.2018
comment
Не могли бы вы запустить npm run client из текущей папки, а не заходить в папку внешнего интерфейса? - person iGbanam; 02.01.2019

Ответ на вопрос "Как указать в Procfile, откуда должен запускаться процесс?"

Вы можете указать Форману, где находится корневой каталог приложения, что означает, что это не обязательно должно быть то же место, что и Procfile.

Вы можете запустить Foreman с опцией -d (может потребоваться также использовать -f для Procfile).

  $ foreman start -d ./directory

http://ddollar.github.io/foreman/

person robert_murray    schedule 19.01.2015
comment
Да, но что, если разные процессы, перечисленные в одном и том же Procfile, имеют разные корневые каталоги? - person ma11hew28; 28.06.2015
comment
@mattdipasquale затем имеет Procfile в главном каталоге с разными строками, как показано ниже: service1: foreman start -d ./directory1\n service2: foreman start -d ./directory2 - person Maxime R.; 06.05.2017