The problem is the following code:
# If there is no BASE_DIR in Django settings, assume that
# the current working directory is the parent directory of
# the directory the settings module is in.
if hasattr(settings, 'BASE_DIR'):
options['working_directory'] = settings.BASE_DIR
else:
settings_mod = sys.modules[os.environ['DJANGO_SETTINGS_MODULE']]
parent = os.path.dirname(os.path.dirname(settings_mod.__file__))
options['working_directory'] = parent
You are lacking the BASE_DIR setting in the settings module which would be
added by startproject.
Thus could occur if you have migrated a very old project progressively up
through Django versions, or I guess also if cookiecutter doesn’t follow Django
precedence and include one, or has moved it to a sub directory and hasn’t
changed how BASE_DIR is calculated so it looks one directory higher.
When BASE_DIR doesn’t exist, then I can only assume that the top of the project
is the parent directory of the directory containing the settings module. In
your case your settings are located another level down.
I can possibly do the fallback differently and calculate first part of module
path in Django settings module, import that, get its __file__ and then
calculate the parent directory.
Do you have BASE_DIR settings and what is it?
Graham
> On 24 Aug 2016, at 6:43 AM, 'Danny' via modwsgi <[email protected]>
> wrote:
>
> I ran the pip install from your dev again, and I'm not sure anything changed.
>
> First, I checked my postactivate script, and I have:
>
> export DJANGO_SETTINGS_MODULE='config.settings.local'
>
> as well as proxy settings and the DATABASE_URL
>
> my config/settings/common.py has:
> WSGI_APPLICATION = 'config.wsgi.application'
>
> it is not overridden in config/settings/local.py.
>
> My config/wsgi.py file is straight from cookiecutter.
>
> ###############################################
> import os
>
> from django.core.wsgi import get_wsgi_application
> if os.environ.get('DJANGO_SETTINGS_MODULE') == 'config.settings.production':
> from raven.contrib.django.raven_compat.middleware.wsgi import Sentry
>
> # We defer to a DJANGO_SETTINGS_MODULE already in the environment. This breaks
> # if running multiple sites in the same mod_wsgi process. To fix this, use
> # mod_wsgi daemon mode with each site in its own daemon process, or use
> # os.environ["DJANGO_SETTINGS_MODULE"] = "config.settings.production"
> os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.production")
>
> # This application object is used by any WSGI server configured to use this
> # file. This includes Django's development server, if the WSGI_APPLICATION
> # setting points here.
> application = get_wsgi_application()
> if os.environ.get('DJANGO_SETTINGS_MODULE') == 'config.settings.production':
> application = Sentry(application)
>
> ######################################################
>
> since postactivate sets:
> export DJANGO_SETTINGS_MODULE='config.settings.local'
>
> almost none of wsgi.py gets executed, just
> application = get_wsgi_application()
>
> finally
>
> $ mod_wsgi-express start-server --log-to-terminal --url-alias /static
> staticfiles --application-type module config.wsgi
>
> works just fine, but leaving out all the arguments as I now believe is
> correct to do, I get
>
> $ python manage.py runmodwsgi --log-to-terminal
> Successfully ran command.
> Server URL : http://localhost:8000/
> Server Root : /tmp/mod_wsgi-localhost:8000:501
> Server Conf : /tmp/mod_wsgi-localhost:8000:501/httpd.conf
> Error Log File : /dev/stderr (warn)
> Request Capacity : 5 (1 process * 5 threads)
> Request Timeout : 60 (seconds)
> Startup Timeout : 15 (seconds)
> Queue Backlog : 100 (connections)
> Queue Timeout : 45 (seconds)
> Server Capacity : 20 (event/worker), 20 (prefork)
> Server Backlog : 500 (connections)
> Locale Setting : en_US.UTF-8
> [Tue Aug 23 14:32:02.741901 2016] [mpm_event:notice] [pid 598:tid
> 140065312126720] AH00489: Apache/2.4.12 (Unix) mod_wsgi/4.5.6 Python/3.5.2
> configured -- resuming normal operations
> [Tue Aug 23 14:32:02.742045 2016] [core:notice] [pid 598:tid 140065312126720]
> AH00094: Command line: 'httpd (mod_wsgi-express) -f
> /tmp/mod_wsgi-localhost:8000:501/httpd.conf -D
> MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D
> MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D
> FOREGROUND'
> [Tue Aug 23 14:32:03.126267 2016] [wsgi:error] [pid 602:tid 140065312126720]
> mod_wsgi (pid=602): Target WSGI script
> '/tmp/mod_wsgi-localhost:8000:501/handler.wsgi' cannot be loaded as Python
> module.
> [Tue Aug 23 14:32:03.126402 2016] [wsgi:error] [pid 602:tid 140065312126720]
> mod_wsgi (pid=602): Exception occurred processing WSGI script
> '/tmp/mod_wsgi-localhost:8000:501/handler.wsgi'.
> [Tue Aug 23 14:32:03.129097 2016] [wsgi:error] [pid 602:tid 140065312126720]
> Traceback (most recent call last):
> [Tue Aug 23 14:32:03.129202 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "/tmp/mod_wsgi-localhost:8000:501/handler.wsgi", line 94, in <module>
> [Tue Aug 23 14:32:03.129212 2016] [wsgi:error] [pid 602:tid 140065312126720]
> recorder_directory=recorder_directory)
> [Tue Aug 23 14:32:03.129225 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File
> "/opt/Envs/guidewire/lib/python3.5/site-packages/mod_wsgi/server/__init__.py",
> line 1348, in __init__
> [Tue Aug 23 14:32:03.129232 2016] [wsgi:error] [pid 602:tid 140065312126720]
> exec(code, self.module.__dict__)
> [Tue Aug 23 14:32:03.129243 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "/opt/Projects/guidewire/config/wsgi.py", line 31, in <module>
> [Tue Aug 23 14:32:03.129249 2016] [wsgi:error] [pid 602:tid 140065312126720]
> application = get_wsgi_application()
> [Tue Aug 23 14:32:03.129260 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "/opt/Envs/guidewire/lib/python3.5/site-packages/django/core/wsgi.py",
> line 13, in get_wsgi_application
> [Tue Aug 23 14:32:03.129267 2016] [wsgi:error] [pid 602:tid 140065312126720]
> django.setup(set_prefix=False)
> [Tue Aug 23 14:32:03.129277 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "/opt/Envs/guidewire/lib/python3.5/site-packages/django/__init__.py",
> line 22, in setup
> [Tue Aug 23 14:32:03.129284 2016] [wsgi:error] [pid 602:tid 140065312126720]
> configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
> [Tue Aug 23 14:32:03.129295 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File
> "/opt/Envs/guidewire/lib/python3.5/site-packages/django/conf/__init__.py",
> line 53, in __getattr__
> [Tue Aug 23 14:32:03.129301 2016] [wsgi:error] [pid 602:tid 140065312126720]
> self._setup(name)
> [Tue Aug 23 14:32:03.129312 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File
> "/opt/Envs/guidewire/lib/python3.5/site-packages/django/conf/__init__.py",
> line 41, in _setup
> [Tue Aug 23 14:32:03.129319 2016] [wsgi:error] [pid 602:tid 140065312126720]
> self._wrapped = Settings(settings_module)
> [Tue Aug 23 14:32:03.129329 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File
> "/opt/Envs/guidewire/lib/python3.5/site-packages/django/conf/__init__.py",
> line 97, in __init__
> [Tue Aug 23 14:32:03.129336 2016] [wsgi:error] [pid 602:tid 140065312126720]
> mod = importlib.import_module(self.SETTINGS_MODULE)
> [Tue Aug 23 14:32:03.129347 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "/opt/Envs/guidewire/lib/python3.5/importlib/__init__.py", line 126, in
> import_module
> [Tue Aug 23 14:32:03.129353 2016] [wsgi:error] [pid 602:tid 140065312126720]
> return _bootstrap._gcd_import(name[level:], package, level)
> [Tue Aug 23 14:32:03.129364 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 986, in _gcd_import
> [Tue Aug 23 14:32:03.129377 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 969, in _find_and_load
> [Tue Aug 23 14:32:03.129389 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
> [Tue Aug 23 14:32:03.129401 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
> [Tue Aug 23 14:32:03.129414 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 986, in _gcd_import
> [Tue Aug 23 14:32:03.129426 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 969, in _find_and_load
> [Tue Aug 23 14:32:03.129438 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 944, in _find_and_load_unlocked
> [Tue Aug 23 14:32:03.129450 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 222, in _call_with_frames_removed
> [Tue Aug 23 14:32:03.129462 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 986, in _gcd_import
> [Tue Aug 23 14:32:03.129475 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 969, in _find_and_load
> [Tue Aug 23 14:32:03.129487 2016] [wsgi:error] [pid 602:tid 140065312126720]
> File "<frozen importlib._bootstrap>", line 956, in _find_and_load_unlocked
> [Tue Aug 23 14:32:03.129522 2016] [wsgi:error] [pid 602:tid 140065312126720]
> ImportError: No module named 'config'
>
> finally I don't know if it helps, but I'm including the contents of
> /tmp/mod_wsgi-localhost:8000:501/handler.wsgi
>
> ##########################3
>
> import os
> import sys
> import atexit
> import time
>
> import mod_wsgi.server
>
> working_directory = '/opt/Projects/guidewire/config'
>
> entry_point = '/opt/Projects/guidewire/config/wsgi.py'
> application_type = 'script'
> callable_object = 'application'
> mount_point = '/'
> with_newrelic_agent = False
> newrelic_config_file = ''
> newrelic_environment = ''
> reload_on_changes = False
> debug_mode = False
> enable_debugger = False
> debugger_startup = False
> enable_coverage = False
> coverage_directory = ''
> enable_profiler = False
> profiler_directory = ''
> enable_recorder = False
> recorder_directory = ''
> enable_gdb = False
>
> os.environ['MOD_WSGI_EXPRESS'] = 'true'
> os.environ['MOD_WSGI_SERVER_NAME'] = 'localhost'
> os.environ['MOD_WSGI_SERVER_ALIASES'] = None or ''
>
> if reload_on_changes:
> os.environ['MOD_WSGI_RELOADER_ENABLED'] = 'true'
>
> if debug_mode:
> os.environ['MOD_WSGI_DEBUG_MODE'] = 'true'
>
> # We need to fiddle sys.path as we are not using daemon mode and so
> # the working directory will not be added to sys.path by virtue of
> # 'home' option to WSGIDaemonProcess directive. We could use the
> # WSGIPythonPath directive, but that will cause .pth files to also
> # be evaluated.
>
> sys.path.insert(0, working_directory)
>
> if enable_debugger:
> os.environ['MOD_WSGI_DEBUGGER_ENABLED'] = 'true'
>
> def output_coverage_report():
> coverage_info.stop()
> coverage_info.html_report(directory=coverage_directory)
>
> if enable_coverage:
> os.environ['MOD_WSGI_COVERAGE_ENABLED'] = 'true'
>
> from coverage import coverage
> coverage_info = coverage()
> coverage_info.start()
> atexit.register(output_coverage_report)
>
> def output_profiler_data():
> profiler_info.disable()
> output_file = '%s-%d.pstats' % (int(time.time()*1000000), os.getpid())
> output_file = os.path.join(profiler_directory, output_file)
> profiler_info.dump_stats(output_file)
>
> if enable_profiler:
> os.environ['MOD_WSGI_PROFILER_ENABLED'] = 'true'
>
> from cProfile import Profile
> profiler_info = Profile()
> profiler_info.enable()
> atexit.register(output_profiler_data)
>
> if enable_recorder:
> os.environ['MOD_WSGI_RECORDER_ENABLED'] = 'true'
>
> if enable_gdb:
> os.environ['MOD_WSGI_GDB_ENABLED'] = 'true'
>
> if with_newrelic_agent:
> if newrelic_config_file:
> os.environ['NEW_RELIC_CONFIG_FILE'] = newrelic_config_file
> if newrelic_environment:
> os.environ['NEW_RELIC_ENVIRONMENT'] = newrelic_environment
>
> handler = mod_wsgi.server.ApplicationHandler(entry_point,
> application_type=application_type, callable_object=callable_object,
> mount_point=mount_point, with_newrelic_agent=with_newrelic_agent,
> debug_mode=debug_mode, enable_debugger=enable_debugger,
> debugger_startup=debugger_startup, enable_recorder=enable_recorder,
> recorder_directory=recorder_directory)
>
> reload_required = handler.reload_required
> handle_request = handler.handle_request
>
> if reload_on_changes and not debug_mode:
> mod_wsgi.server.start_reloader()
> ################################################################################
>
> one final thing is that I don't see a version bump in the pip install:$ pip
> install -U https://github.com/GrahamDumpleton/mod_wsgi/archive/develop.zip
> Collecting https://github.com/GrahamDumpleton/mod_wsgi/archive/develop.zip
> Downloading https://github.com/GrahamDumpleton/mod_wsgi/archive/develop.zip
> / 778kB 15.2MB/s
> Installing collected packages: mod-wsgi
> Found existing installation: mod-wsgi 4.5.6
> Uninstalling mod-wsgi-4.5.6:
> Successfully uninstalled mod-wsgi-4.5.6
> Running setup.py install for mod-wsgi ... done
> Successfully installed mod-wsgi-4.5.6
>
>
> --
> You received this message because you are subscribed to the Google Groups
> "modwsgi" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> Visit this group at https://groups.google.com/group/modwsgi
> <https://groups.google.com/group/modwsgi>.
> For more options, visit https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>.
--
You received this message because you are subscribed to the Google Groups
"modwsgi" 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/modwsgi.
For more options, visit https://groups.google.com/d/optout.