2012-02-22 2 views
4

У меня есть приложение (django-compressor), которое я хочу использовать только на своем локальном компьютере, а не на сервере. Я знаю проЛокальная настройка для INSTALLED_APPS с использованием Fabric

try: 
    from local_settings import * 
except ImportError: 
    pass 

трюк. Но мне было интересно, есть ли лучший способ удалить приложение, которое я хочу запустить только локально из INSTALLED_APPS в settings.py с использованием Fabric.

ответ

7

Я думаю, что стандартный подход, о котором вы говорили, лучше всего; создать папку settings с тремя файлами настроек; shared.py, production.py и development.py. Настройки, которые являются общими для всех экземпляров вашего приложения, размещаются в shared.py и импортируются из production.py и development.py. Тогда вы можете легко добавлять только compressor в настройках развития

shared.py

INSTALLED_APPS = (...) 

development.py

from settings.shared import * 
INSTALLED_APPS += ('compressor',) 

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

python manage.py --settings=settings.development 

и аналогичным образом на производственном сервере вы сделать то же самое для production.py (это вниз к вашей реализации)

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

Как и в стороне, вместо полного удаления compressor из установленных приложений, вы можете просто включить и отключить используете это COMPRESS_ENABLED установка

+0

благодарит за отличный ответ. Что касается параметра «COMPRESSOR_ENABLED», если я устанавливаю его в FALSE, я все равно оставляю шаблоны с '{% compress js%}' и '{% endcompress%}', которые затем ломаются на сервере. Есть ли способ сделать «django-compressor» переделать файлы шаблонов без этих тегов? Этот вопрос я сделал об этом http://stackoverflow.com/questions/9392993/weird-deployment-issue-with-django-and-coffeescript-to-heroku Спасибо за помощь по этому вопросу и любую помощь по другим вопросам , – Alexis

+0

Я не уверен, что понимаю. Когда 'COMPRESSOR_ENABLED = False' (но все еще в' INSTALLED_APPS'), эти блоки не должны вызывать никаких ошибок - их следует просто игнорировать. –

+0

Даже с 'COMPRESS_ENABLED = False' Я получаю' TemplateSyntaxError at/'...' Caught FilterError при рендеринге:/bin/sh: coffee: not found' – Alexis

6

Вы также можете сделать это по-другому.

Все общие настройки находятся в settings.py и сохраняют разницу в local_settings. В вашем случае это INSTALLED_APPS, вы можете изменить раздел импорта на что-то вроде этого:

DEV_APPS = None 
try: 
    from local_settings import * 
    INSTALLED_APPS += DEV_APPS 
except: 
    PASS 

А вот ваш local_settings.py:

DEV_APPS = ('compressor',) 
+1

Простой и очень прямой. Только один вопрос: не было бы лучше установить 'DEV_APPS =()'. Затем вы комбинируете два кортежа вместо добавления 'None' и' tupple'. – cezar

1

Мой подход переименовать оригинальный settings.py (сделано по ./manage.py startproject) до base_settings.py. Таким образом, все настройки базовой линии находятся в base_settings.py.

Затем я создам новый файл settings.py, который будет содержать только необходимые изменения и переопределения для среды от base_settings.py.

Таким образом, чтобы ответить на ваш вопрос, используя мой подход, мой settings.py будет выглядеть следующим образом:

from .base_settings import * 

INSTALLED_APPS += ('compressor',) 

Все необходимые настройки среды Предусмотрите будут добавлены в settings.py.

При таком подходе мне не нужно указывать параметр --settings при вызове ./manage.py или установить DJANGO_SETTINGS_MODULE.

Упрощает управление различными средами.

Примечание: Я использую git и добавляю settings.py к .gitignore для этого подхода.