Search code examples
pythonapacheflaskmod-wsgiwsgi

Error: ImportError while deploying Flask app in wsgi file


I dont know what exactly am I missing. Here is what I have till now:

wsgi

/opt/tools/apps/scheduler/scheduler.wsgi

Its content

from scheduler import app as application

init.py

/opt/tools/apps/scheduler/scheduler/__init__.py

Error in Apache Log

[Thu Feb 04 21:54:30 2016] [error] [client 10.57.136.99] mod_wsgi (pid=45485): Target WSGI script '/opt/tools/apps/scheduler/scheduler.wsgi' cannot be loaded as Python module.
[Thu Feb 04 21:54:30 2016] [error] [client 10.57.136.99] mod_wsgi (pid=45485): Exception occurred processing WSGI script '/opt/tools/apps/scheduler/scheduler.wsgi'.
[Thu Feb 04 21:54:30 2016] [error] [client 10.57.136.99] Traceback (most recent call last):
[Thu Feb 04 21:54:30 2016] [error] [client 10.57.136.99]   File "/opt/tools/apps/scheduler/scheduler.wsgi", line 1, in <module>
[Thu Feb 04 21:54:30 2016] [error] [client 10.57.136.99]     from scheduler import app as application
[Thu Feb 04 21:54:30 2016] [error] [client 10.57.136.99] ImportError: No module named scheduler

wsgi.conf

/etc/httpd/conf.d

LoadModule wsgi_module modules/mod_wsgi.so
WSGIPythonHome /opt/tools
WSGISocketPrefix run/wsgi

WSGIDaemonProcess scheduler user=abcd group=efgh processes=4
WSGIScriptAlias /scheduler /opt/tools/apps/scheduler/scheduler.wsgi
<Directory /opt/tools/apps/scheduler>
  WSGIProcessGroup scheduler
  WSGIApplicationGroup %{RESOURCE}
  Order deny,allow
  Allow from all
</Directory>

I followed Link1 & Link2 but no luck. This application was working properly on one host (say host-1) and I am trying to deploy it on say host-2.


Solution

  • As your application will run as a daemon, the root directory will be set to /.

    Ensure your project directory is added to python PATH or to let wsgi run the application in the correct path.

    Your scheduler.wsgi should be something like:

    # insert application path in python path
    import sys
    sys.path.insert(0, "/opt/tools/apps/scheduler")
    
    # launch app
    from scheduler import app as application
    

    Also ensure apache user/group (www-data) have access to the project:

    chown -R www-data:www-data /opt/tools/apps/scheduler