Подтвердить что ты не робот

Как я могу изменить Procfile для запуска процесса Gunicorn в нестандартной папке на Heroku?

Я новичок в героике и стрельбе, поэтому я не уверен, как это работает. Но я сделал некоторые поиски, и я думаю, что я близок к развертыванию своего приложения Django (1.5.1). Поэтому я знаю, что мне нужен файл Procfile, который имеет

web: gunicorn app.wsgi

Потому что мои каталоги немного разные. Я не могу запустить gunicorn в корневом каталоге

app_project
    requirements/
    contributors/
    app/
        app/
            settings/
            wsgi.py
        # Normally Procfile goes here
    Procfile

Обычно приложение/будет корневым каталогом, но я решил структурировать свои папки таким образом, чтобы отделить мое приложение django от других вещей. Поскольку я должен поместить Procfile в корневой каталог для распознавания герою, что мне следует добавить в файл Procfile и/или какие параметры следует разместить в команде gunicorn?

Примечание:

web: gunicorn app.wsgi # won't work because Procfile is in a directory above
                       # I also want to keep the directories as is
                       # I also don't want to create a secondary git inside the app folder just for heroku
web: gunicorn app.app.wsgi # won't work because I don't want to convert the folder into a python module
4b9b3361

Ответ 1

Try:

web: gunicorn --pythonpath app app.wsgi

Ответ 2

Как сказал в своем ответе @Graham Dumpleton, проблема OP могла быть решена путем изменения его Procfile на следующее:

web: gunicorn --pythonpath app app.wsgi

Почему это работает:

  • Помните, что Procfile просто используется Heroku для запуска процессов. В этом случае процессы стрельбы.
  • Аргумент Gunicorn --pythonpath позволяет динамически присоединять каталог к ​​списку каталогов, которые выполняет среда выполнения Python, когда выполняет просмотр модуля.
  • Добавив --pythonpath app к команде gunicorn, интерпретатору в основном сказали: "Загляните внутрь каталога приложения для пакета (также), называемого приложением, которое содержит модуль wsgi.`

Общие имена папок в вопросе OP могут скрывать синтаксис команды, который выглядит следующим образом: gunicorn --pythonpath <directory_containing_package> <package>.<module>

Дополнительная информация:
Документация Gunicorn

Ответ 3

Я сделал уродливый взломать эту работу. Поэтому я собираюсь опубликовать свой ответ, но я надеюсь, что вы, ребята, можете придумать лучшее решение.

PROCFILE

web: sh ./app/run.sh

app_project/приложение/run.sh

#!/bin/bash

cd app
gunicorn app.wsgi

Ответ 4

Если ваш файл вложен в папки, то в этом есть смысл.

Вместо того чтобы добавлять путь к переменной окружения PYTHONPATH, я ссылался на него, как если бы вы ссылались на модули в пакете:

В моем случае объект приложения находился в файле scriptC.py внутри папки B, которая находится внутри папки A.

web: gunicorn folderA.folderB.scriptC:app