Heroku Procfile не собирается в каталогах? - PullRequest
0 голосов
/ 17 июня 2019

Это мой файл моей структуры:

requirements.txt
Procfile
Chess/
      -- lichess-bot/
                     -- lichess-bot.py
                     -- config.yml
                     -- (many other files related to lichess-bot.py)

Часть, ответственная за открытие YAML в config.py:

def load_config(config_file):
    with open(config_file) as stream:
        try:
            CONFIG = yaml.load(stream)
        except Exception as e:
            print("There appears to be a syntax problem with your config.yml")
            raise e

А в lichess-bot.py вот вызов для config.yml:

CONFIG = load_config(args.config or "./config.yml")

Команды, которые мне нужно выполнить:

  1. chmod +x ./engines/stockfish_10_x64
  2. python lichess-bot.py -u

Я пробовал это в Heroku bash: python ./chess/lichess-bot/lichess-bot.py -u но он возвращает

FileNotFoundError: [Errno 2] Нет такого файла или каталога: './config.yml'

Я пробовал это Procfile:

worker: cd chess
worker: cd lichess-bot
worker: chmod +x ./engines/stockfish_10_x64
worker: python lichess-bot.py -u

но Героку не мог его распознать.

Если я сделаю это вручную:

~ $ cd chess
~/chess cd lichess-bot
~/chess/lichess-bot python lichess-bot.py -u

отлично работает

Как получить доступ к каталогам из Procfile и затем выполнить файл без ошибок?

1 Ответ

1 голос
/ 17 июня 2019

Код по умолчанию - файл конфигурации в текущем каталоге с именем config.yml:

CONFIG = load_config(args.config or "./config.yml")

Вы можете переместить ваш config.yml в корень вашего хранилища, или вы можете предоставить args.config. Похоже, что это можно сделать с помощью --config.

Ваш Procfile должен просто определять типы процессов. Они не являются сценариями, и они не должны содержать много «шагов». Что-то вроде

worker: python lichess-bot.py --config chess/lichess-bot/config.yml -u

должно работать (при условии, что ваш каталог на самом деле называется chess/, а не Chess/). Если вам нужно сделать движок исполняемым, подумайте о том, чтобы сделать это локально и зафиксировать его как исполняемый файл.

...