I've recently started restructuring a project to use two scoops style
configuration, with a `config` package, with `settings` inside it. Within
that package, there's _base.py, development.py, staging.py and
production.py. Since this is deployed as a WSGI app with Apache, I'm using
a json file for environment variables, such as AWS credentials, db
username/passwords and such. In short, following suggestions listed at
https://medium.com/@ayarshabeer/django-best-practice-settings-file-for-multiple-environments-6d71c6966ee2
When deploying on staging, I have the wsgi app running through apache. In
addition, manage.py $COMMAND is working with the
`--settings=config.settings.staging` flag set. That is, with the exception
of collectstatic.
(staging)ubuntu@farmer-stage:~/public_html/django/project$ ./manage.py
collectstatic --help
Using configuration [config.settings.staging]
Using configuration [config.settings.staging]
Traceback (most recent call last):
File "./manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File
"/home/ubuntu/.virtualenvs/staging/lib/python2.7/site-packages/django/core/management/__init__.py",
line 354, in execute_from_command_line
utility.execute()
File
"/home/ubuntu/.virtualenvs/staging/lib/python2.7/site-packages/django/core/management/__init__.py",
line 328, in execute
django.setup()
File
"/home/ubuntu/.virtualenvs/staging/lib/python2.7/site-packages/django/__init__.py",
line 17, in setup
configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
File
"/home/ubuntu/.virtualenvs/staging/lib/python2.7/site-packages/django/utils/log.py",
line 86, in configure_logging
logging_config_func(logging_settings)
File "/usr/local/lib/python2.7.11/lib/python2.7/logging/config.py", line
794, in dictConfig
dictConfigClass(config).configure()
File "/usr/local/lib/python2.7.11/lib/python2.7/logging/config.py", line
576, in configure
'%r: %s' % (name, e))
ValueError: Unable to configure handler u'file': [Errno 2] No such file or
directory: u'/home/ubuntu/public_html/django/logs/django_project.log'
In _base, I have the following defined:
environ_path = os.path.join(BASE_DIR, '../.env.json')
with open(environ_path) as f:
secrets = json.loads(f.read())
def get_secret(secret):
try:
return secrets[secret]
except KeyError:
raise ImproperlyConfigured('Required variable [{}] not
configured'.format(secret))
def set_settings_module(module):
if module in ['config.settings.development', 'config.settings.staging',
'config.settings.production']:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', module)
print "Using configuration [{}]".format(module)
else:
raise ImproperlyConfigured('Wrong settings module for configuration')
set_settings_module(get_secret('django_settings_module'))
LOGGING_DEFAULTS = {
'version': 1,
'disable_existing_loggers': 'False',
'handlers': {
'file': {
'level': 'INFO',
'filename': None,
'class': 'logging.FileHandler',
'formatter': 'verbose'
},
'console': {
'level': 'INFO',
'class': 'logging.StreamHandler',
'formatter': 'verbose'
}
},
'formatters': {
'verbose': {
'format': '%(levelname)s %(asctime)s %(module)s %(process)d
%(thread)d %(message)s'
},
'simple': {
'format': '%(levelname)s %(message)s'
},
},
'loggers': {
'django': {
'level': 'INFO',
'handlers': ['file', 'console'],
'propagate': True
}
}
}
and in staging.py, I override the filename for the env specific path via
LOGGING_PATH = os.path.join(BASE_DIR, '../../../logs/django/django_project.log')
When running via apache wsgi or manage.py shell_plus, it works as
expected. However, when I attempt to collect the staticfiles, I get the
error output at the start of this report. But this doesn't happen in my
vagrant dev environment.
I'm running python 2.7 with django 1.8.16
Any help is appreciated!
Thanks
--
You received this message because you are subscribed to the Google Groups
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/django-users.
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-users/27849a10-c364-452b-a67f-2e2d8aae7471%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.