Цепочка 2 команды bash на 1 Heroku Dyno с использованием Procfile - PullRequest
0 голосов
/ 27 апреля 2020

На этой странице справки Heroku предлагается, чтобы я мог выполнять несколько команд в фоновом режиме, а затем wait -n в моем Procfile. Их пример:

web: puma -C config/puma.rb & sidekiq & wait -n

В моем примере команды, которые я хочу выполнить, находятся в разных каталогах, поэтому я написал:

web: cd api/ && bundle exec puma -C config/puma.rb & cd .. && sh target/bin/worker & wait -n

Проблема

Моё приложение heroku аварий. heroku logs показывает:

2020-04-26T22:50:37.104343+00:00 app[web.1]: sh: 0: Can't open target/bin/worker
2020-04-26T22:50:55.157670+00:00 heroku[web.1]: State changed from starting to crashed

Но если я сделаю heroku run bash, а затем sh target/bin/worker, он будет работать нормально. И все файлы находятся там, где я ожидаю:

$ heroku run bash
Running bash on [redacted]... up, run.[redacted] (Free)
~ $ ls -al api/config/puma.rb
-rw------- 1 u37764 dyno 1579 Apr 26 22:43 api/config/puma.rb
~ $ ls -al target/bin/worker
-rw------- 1 u37764 dyno 11952 Apr 26 22:45 target/bin/worker

Так что я думаю, что что-то может быть неправильно с тем, как я объединяю команды (например, смешивание && и &). Я видел этот связанный bash вопрос , но все еще не мог понять правильный синтаксис.

Что это?

Я также пытался ...

  • puma необходимо запустить из каталога api/, например, web: puma -C api/config/puma.rb & sh target/bin/worker & wait -n тоже не работает. *
  • web: sh start.sh, где start.sh содержит:
    #!/usr/bin/env sh
    cd api/
    bundle exec puma -C config/puma.rb &
    cd ..
    sh target/bin/worker &
    wait -n
    
...