简体   繁体   中英

Trying to configure a django application to use mod_wsgi

I keep receiving this error in the apache error.log when I visit the URL for this project:

[Fri Jan 20 21:04:16.143990 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326] mod_wsgi (pid=18618): Target WSGI script '/srv/botbot/src/botbot/botbot/wsgi.py' cannot be loaded as Python module. 
[Fri Jan 20 21:04:16.144124 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326] mod_wsgi (pid=18618): Exception occurred processing WSGI script '/srv/botbot/src/botbot/botbot/wsgi.py'. 
[Fri Jan 20 21:04:16.144195 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326] Traceback (most recent call last): 
[Fri Jan 20 21:04:16.144255 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/src/botbot/botbot/wsgi.py", line 9, in <module> 
[Fri Jan 20 21:04:16.144335 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     application = get_wsgi_application() 
[Fri Jan 20 21:04:16.144381 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/lib/python2.7/site-packages/django/core/wsgi.py", line 14, in get_wsgi_application 
[Fri Jan 20 21:04:16.144437 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     django.setup() 
[Fri Jan 20 21:04:16.144487 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/lib/python2.7/site-packages/django/__init__.py", line 17, in setup 
[Fri Jan 20 21:04:16.144540 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING) 
[Fri Jan 20 21:04:16.144586 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/lib/python2.7/site-packages/django/conf/__init__.py", line 48, in __getattr__ 
[Fri Jan 20 21:04:16.144638 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     self._setup(name) 
[Fri Jan 20 21:04:16.144675 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/lib/python2.7/site-packages/django/conf/__init__.py", line 44, in _setup 
[Fri Jan 20 21:04:16.144711 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     self._wrapped = Settings(settings_module) 
[Fri Jan 20 21:04:16.144747 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/lib/python2.7/site-packages/django/conf/__init__.py", line 92, in __init__ 
[Fri Jan 20 21:04:16.144793 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     mod = importlib.import_module(self.SETTINGS_MODULE) 
[Fri Jan 20 21:04:16.144822 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module 
[Fri Jan 20 21:04:16.144856 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     __import__(name) 
[Fri Jan 20 21:04:16.144884 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/src/botbot/botbot/settings/__init__.py", line 1, in <module> 
[Fri Jan 20 21:04:16.144930 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     from base import * 
[Fri Jan 20 21:04:16.145008 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/srv/botbot/src/botbot/botbot/settings/base.py", line 27, in <module> 
[Fri Jan 20 21:04:16.145053 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     SECRET_KEY = os.environ['WEB_SECRET_KEY'] 
[Fri Jan 20 21:04:16.145085 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]   File "/usr/lib/python2.7/UserDict.py", line 23, in __getitem__ 
[Fri Jan 20 21:04:16.145118 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326]     raise KeyError(key) 
[Fri Jan 20 21:04:16.145157 2017] [:error] [pid 18618:tid 140192977487616] [remote 66.90.146.30:326] KeyError: 'WEB_SECRET_KEY' 

This is my wsgi.py file:

import os 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "botbot.settings") 

# 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. 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

This is my .env file:

# Required 
SECRET_KEY='password1' 
WEB_PORT=8000 
EMAIL_BACKEND='django.core.mail.backends.console.EmailBackend' 
GOPATH=$VIRTUAL_ENV 
WEB_SECRET_KEY='password1' 
STORAGE_URL=postgres://ubuntu:password@localhost:5432/botbot 
REDIS_PLUGIN_STORAGE_URL=redis://localhost:6379/0 
REDIS_PLUGIN_QUEUE_URL=redis://localhost:6379/1 
PUSH_STREAM_URL=http://localhost:8080/pub/?id={id} 

# Set encoding if the system hasn't done it properly 
LANG=en_US.UTF-8 
PYTHONIOENCODING=utf8 

# Optional 
# MEMCACHE_URL=127.0.0.1:11211 
# STATIC_ROOT=/var/www/botbot/static 
# MEDIA_ROOT=/var/www/botbot/uploads 
# DEBUG=True 
# SMTP_URL=smtp://user:pass@host:port 
# SMTP_TLS=True 
# ALLOWED_HOSTS=host1,host2 
# INCLUDE_DJANGO_ADMIN=False 
# EXCLUDE_NICKS=nick1,nick2 

This is my apache conf file:

<VirtualHost *:80> 
        ServerName server.test.com 
        ErrorLog ${APACHE_LOG_DIR}/error.log 
        SetEnv WEB_SECRET_KEY password1 
        CustomLog ${APACHE_LOG_DIR}/access.log combined 
        DocumentRoot /srv/botbot/src/botbot 
        <Directory /srv/botbot/src/botbot/botbot> 
                <Files wsgi.py> 
                        Require all granted 
                </Files> 
        </Directory> 

        WSGIDaemonProcess botbot python-path=/srv/botbot/src/botbot/botbot:/srv/botbot/lib/python2.7/site-packages 
        WSGIProcessGroup botbot 
        WSGIScriptAlias / /srv/botbot/src/botbot/botbot/wsgi.py 

</VirtualHost> 

This is the app I'm trying to build: https://github.com/BotBotMe/botbot-web .

As you can see I've tried setting the SetEnv variable in the apache conf but with no luck. I'm not even sure if that's the right thing to be doing, no matter what I do I still receive the error below.

I believe that you should try SetEnvIf directive, as reading in apache docs:

The internal environment variables set by this directive are set after   
most early request processing directives are run, such as access 
control and URI-to-filename mapping. If the environment variable you're 
setting is meant as input into this early phase of processing such as 
the RewriteRule directive, you should instead set the environment  
variable with SetEnvIf.

Probably if you want to set it by SetEnv - it is just not available for the django app when starting yet.

But probably the best thing you can do - is to set this env variable in some pre-run script.

Happy coding!

I ended up adding the following line to my wsgi.py file:

os.environ['WEB_SECRET_KEY'] = 'password'

where 'password' is equal to the password string specified in the .env file for the WEB_SECRET_KEY variable.

I also had to recursively chown the /srv directory (which contains the app and nothing else) to the www-data user.

This document was helpful: https://gist.github.com/GrahamDumpleton/b380652b768e81a7f60c

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM