Скрипт установки приложения Django - Как добавить приложение в настройку INSTALLED_APPS? - PullRequest
5 голосов
/ 06 сентября 2011

Я написал приложение для Django и теперь хочу упростить его развертывание на нескольких серверах.

Базовая установка:

  1. Скопируйте папку приложения в папку проекта Django
  2. Добавьте к INSTALLED_APPS в settings.py
  3. Выполнить ./manage.py collectstatic

Это конкретное приложение не должно использовать БД, но если бы оно было, я бы использовал южную сторону и запустил бы ./manage.py migrate, но это уже другая история.

У меня проблемы с # 2. Я не хочу каждый раз редактировать этот файл вручную. Какой самый простой / надежный способ обновить это?

Я думал, что мог бы использовать модуль inspect, чтобы найти переменную и затем каким-то образом добавить ее, но мне не повезло. inspect.getsourcelines не найдет переменные.

Ответы [ 2 ]

2 голосов
/ 06 сентября 2011

Вот мои причины, по которым я думаю, что это будет неправильно:

  • это дополнительная сложность кода без большой необходимости, добавление одной строки в настройки каждый раз не так уж и плохо, особенно если вывыполняя шаги № 1 и № 3.
  • , станет неясно, какие приложения использует ваш проект.Когда другой разработчик будет работать над вашим проектом, он может не знать, что ваше приложение установлено.
  • Вы должны выполнить шаг № 1 и шаг № 2 в системе управления версиями кода, протестировать всю систему, а затем зафиксировать изменения ипросто разверните его.

Я думаю, что у вас что-то не так (с моей точки зрения) в процессе разработки / развертывания, если вы ищете такую ​​"оптимизацию".Я думаю, что это гораздо проще и лучше использовать INSTALLED_APPS.

Если вы создаете что-то для публичного использования и хотите максимально упростить добавление модулей, было бы неплохо.В этом случае я бы рекомендовал упаковать проект и его приложения в виде яиц Python и использовать точки входа.Затем вы можете развернуть приложение в проекте, например так:

pip install my-app-name

Даже без шагов № 1 и № 3!Шаг № 1 будет выполнен с помощью pip, а шаг № 2 и № 3 - с помощью установочных хуков, определенных в вашем проекте.

Скрипт вставки является хорошим примеромиспользование очков:

# Install paste script:
pip install pastescript

# install django templates for pastescript:
pip install fez.djangoskel

# now paste script knows about fez.djangoskel because of entry-points

# start a new django project from fez's templates:
paste create -t django_buildout

Вот часть setup.py из пакета fez.djangoskel:

...
entry_points="""
[paste.paster_create_template]
django_buildout=fez.djangoskel.pastertemplates:DjangoBuildoutTemplate
django_app=fez.djangoskel.pastertemplates:DjangoAppTemplate
...

zc.buildout - еще один замечательный инструмент, который можетсделать ваши развертывания намного проще.Яйца питона играют очень хорошо со сборкой.

1 голос
/ 05 мая 2019

Вы можете изменить ваши settings.py, используя bash.

#set $SETTINGS_FILE variable to full path of the your django project settings.py file
SETTINGS_FILE="/path/to/your/django/project/settings.py"
# checks that app $1 is in the django project settings file
is_app_in_django_settings() {
    # checking that django project settings file exists
    if [ ! -f $SETTINGS_FILE ]; then
        echo "Error: The django project settings file '$SETTINGS_FILE' does not exist"
        exit 1
    fi
    cat $SETTINGS_FILE | grep -Pzo "INSTALLED_APPS\s?=\s?\[[\s\w\.,']*$1[\s\w\.,']*\]\n?" > /dev/null 2>&1
    # now $?=0 if app is in settings file
    # $? not 0 otherwise
}

# adds app $1 to the django project settings
add_app2django_settings() {
    is_app_in_django_settings $1
    if [ $? -ne 0 ]; then
        echo "Info. The app '$1' is not in the django project settings file '$SETTINGS_FILE'. Adding."
        sed -i -e '1h;2,$H;$!d;g' -re "s/(INSTALLED_APPS\s?=\s?\[[\n '._a-zA-Z,]*)/\1    '$1',\n/g" $SETTINGS_FILE
        # checking that app $1 successfully added to django project settings file
        is_app_in_django_settings $1
        if [ $? -ne 0 ]; then
            echo "Error. Could not add the app '$1' to the django project settings file '$SETTINGS_FILE'. Add it manually, then run this script again."
            exit 1
        else
            echo "Info. The app '$1' was successfully added to the django settings file '$SETTINGS_FILE'."
        fi
    else
        echo "Info. The app '$1' is already in the django project settings file '$SETTINGS_FILE'"
    fi
}

Использование:

add_app2django_settings "my_app"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...