The problem is that the Apache user cannot see into your home directory.
One solution is to do:
chmod o+rx /home/hd2900
Presuming permissions of directories/files underneath that are okay, might work.
For more information see:
https://modwsgi.readthedocs.io/en/master/user-guides/application-issues.html#access-rights-of-apache-user
<https://modwsgi.readthedocs.io/en/master/user-guides/application-issues.html#access-rights-of-apache-user>
Graham
> On 15 Oct 2021, at 6:36 pm, Jian Wu <[email protected]> wrote:
>
> hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ ls -lasd /home/hd2900
> 4 drwxr-x--- 17 hd2900 hd2900 4096 Oct 11 22:38 /home/hd2900
>
>> Den 15. okt. 2021 kl. 09.25 skrev Graham Dumpleton
>> <[email protected] <mailto:[email protected]>>:
>>
>> What do you get for:
>>
>> ls -lasd /home/hd2900
>>
>> Graham
>>
>>> On 15 Oct 2021, at 5:53 pm, Jian Wu <[email protected]
>>> <mailto:[email protected]>> wrote:
>>>
>>> Thanks again for your comments. I have read the quick configuration guide
>>> for mod_wsgi. Below is apache2 configuration file look like. I am now using
>>> absolute path to the project, wsgi file and the virtual environment.
>>>
>>> (env) hd2900@hd2900:~$ cat /etc/apache2/sites-enabled/000-default.conf
>>> <VirtualHost *:80>
>>> # The ServerName directive sets the request scheme, hostname and port
>>> that
>>> # the server uses to identify itself. This is used when creating
>>> # redirection URLs. In the context of virtual hosts, the ServerName
>>> # specifies what hostname must appear in the request's Host: header to
>>> # match this virtual host. For the default virtual host (this file) this
>>> # value is not decisive as it is used as a last resort host regardless.
>>> # However, you must set it for any further virtual host explicitly.
>>> #ServerName www.example.com <http://www.example.com/>
>>>
>>> ServerAdmin webmaster@localhost
>>> DocumentRoot /var/www/html
>>> WSGIDaemonProcess flaskapp threads=5
>>> python-home=/home/hd2900/Documents/Python/hd2900TakeawayPrint/env
>>> WSGIScriptAlias /
>>> /home/hd2900/Documents/Python/hd2900TakeawayPrint/flaskapp.wsgi
>>> WSGIApplicationGroup %{GLOBAL}
>>>
>>> <Directory /home/hd2900/Documents/Python/hd2900TakeawayPrint>
>>> WSGIProcessGroup flaskapp
>>> Require all granted
>>> </Directory>
>>>
>>> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
>>> # error, crit, alert, emerg.
>>> # It is also possible to configure the loglevel for particular
>>> # modules, e.g.
>>> #LogLevel info ssl:warn
>>>
>>> ErrorLog ${APACHE_LOG_DIR}/error.log
>>> CustomLog ${APACHE_LOG_DIR}/access.log combined
>>>
>>> # For most configuration files from conf-available/, which are
>>> # enabled or disabled at a global level, it is possible to
>>> # include a line for only one particular virtual host. For example the
>>> # following line enables the CGI configuration for this host only
>>> # after it has been globally disabled with "a2disconf".
>>> #Include conf-available/serve-cgi-bin.conf
>>> #Header set Access-Control-Allow-Origin "*"
>>> </VirtualHost>
>>>
>>> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
>>>
>>> Regarding permission to home directory. Right now the home directory is
>>> owned by root. Should I execute a chown command to change the user to
>>> hd2900 and www-data group?
>>>
>>> (env) hd2900@hd2900:/$ ls -la
>>> total 1048660
>>> drwxr-xr-x 20 root root 4096 Apr 22 02:13 .
>>> drwxr-xr-x 20 root root 4096 Apr 22 02:13 ..
>>> lrwxrwxrwx 1 root root 7 Apr 22 01:52 bin -> usr/bin
>>> drwxr-xr-x 5 root root 4096 Sep 29 06:06 boot
>>> drwxr-xr-x 19 root root 19200 Sep 7 20:34 dev
>>> drwxr-xr-x 2 root root 4096 Apr 22 02:13 .disk
>>> drwxr-xr-x 135 root root 8192 Oct 15 07:29 etc
>>> drwxr-xr-x 3 root root 4096 Sep 26 18:13 home
>>> lrwxrwxrwx 1 root root 7 Apr 22 01:52 lib -> usr/lib
>>> drwx------ 2 root root 16384 Apr 22 02:13 lost+found
>>> drwxr-xr-x 2 root root 4096 Apr 22 01:52 media
>>> drwxr-xr-x 2 root root 4096 Apr 22 01:52 mnt
>>> drwxr-xr-x 2 root root 4096 Apr 22 01:52 opt
>>> dr-xr-xr-x 298 root root 0 Jan 1 1970 proc
>>> drwx------ 5 root root 4096 Sep 26 19:03 root
>>> drwxr-xr-x 35 root root 940 Oct 15 08:06 run
>>> lrwxrwxrwx 1 root root 8 Apr 22 01:52 sbin -> usr/sbin
>>> drwxr-xr-x 9 root root 4096 Sep 27 02:10 snap
>>> drwxr-xr-x 2 root root 4096 Apr 22 01:52 srv
>>> -rw------- 1 root root 1073741824 Apr 22 02:15 swapfile
>>> dr-xr-xr-x 12 root root 0 Jan 1 1970 sys
>>> drwxrwxrwt 17 root root 4096 Oct 15 08:40 tmp
>>> drwxr-xr-x 11 root root 4096 Apr 22 01:52 usr
>>> drwxr-xr-x 15 root root 4096 Sep 26 21:54 var
>>>
>>> When I access my local IP from a web browser 192.168.0.179 I still get 403
>>> forbidden error in that I don’t have permission to access the ressources.
>>> Is there a log file somewhere allowing me to check the cause of the 403
>>> forbidden error as this will make debugging easier?
>>>
>>> Thanks!
>>>
>>>
>>>> Den 11. okt. 2021 kl. 23.05 skrev Graham Dumpleton
>>>> <[email protected] <mailto:[email protected]>>:
>>>>
>>>> That symlink is not pointing where you think it is, it is pointing at
>>>> "/var/www/html/hd2900TakeawayPrint”. You need to specify an absolute
>>>> pathname for the target when creating the symlink. Even then that may not
>>>> work as Apache has rules about following symlinks and am not sure whether
>>>> the default rules allow it or whether you need to enable it. If not
>>>> enabled, the target directory would need a Directory directive all well to
>>>> allow access to it.
>>>>
>>>> A further issue is that you seem to be using a Python virtual environment
>>>> but have not told mod_wsgi to use it. And another potential problem will
>>>> be whether your home directory is accessible by other users.
>>>>
>>>> Presuming that your home directory is called “/home/yourusername” and it
>>>> is accessible to others, try using:
>>>>
>>>> WSGIDaemonProcess flaskapp threads=5
>>>> python-home=/home/yourusername/Documents/Python/hd2900TakeawayPrint/env
>>>> WSGIScriptAlias /
>>>> /home/yourusername/Documents/Python/hd2900TakeawayPrint/flaskapp.wsgi
>>>> WSGIApplicationGroup %{GLOBAL}
>>>>
>>>> <Directory /home/yourusername/Documents/Python/hd2900TakeawayPrint>
>>>> WSGIProcessGroup flaskapp
>>>> Require all granted
>>>> </Directory>
>>>>
>>>> Have a read of:
>>>>
>>>> *
>>>> https://modwsgi.readthedocs.io/en/master/user-guides/quick-configuration-guide.html
>>>>
>>>> <https://modwsgi.readthedocs.io/en/master/user-guides/quick-configuration-guide.html>
>>>> *
>>>> https://modwsgi.readthedocs.io/en/master/user-guides/configuration-guidelines.html
>>>>
>>>> <https://modwsgi.readthedocs.io/en/master/user-guides/configuration-guidelines.html>
>>>> *
>>>> https://modwsgi.readthedocs.io/en/master/user-guides/virtual-environments.html
>>>>
>>>> <https://modwsgi.readthedocs.io/en/master/user-guides/virtual-environments.html>
>>>>
>>>> Graham
>>>>
>>>>
>>>>> On 12 Oct 2021, at 7:54 am, Jian Wu <[email protected]
>>>>> <mailto:[email protected]>> wrote:
>>>>>
>>>>> Hello Graham,
>>>>>
>>>>> Sorry I missed the argument in Directory. I have now changed the
>>>>> configuration file as below.
>>>>>
>>>>> (env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ cat
>>>>> /etc/apache2/sites-enabled/000-default.conf
>>>>> <VirtualHost *:80>
>>>>> # The ServerName directive sets the request scheme, hostname and port
>>>>> that
>>>>> # the server uses to identify itself. This is used when creating
>>>>> # redirection URLs. In the context of virtual hosts, the ServerName
>>>>> # specifies what hostname must appear in the request's Host: header to
>>>>> # match this virtual host. For the default virtual host (this file) this
>>>>> # value is not decisive as it is used as a last resort host regardless.
>>>>> # However, you must set it for any further virtual host explicitly.
>>>>> #ServerName www.example.com <http://www.example.com/>
>>>>>
>>>>> ServerAdmin webmaster@localhost
>>>>> DocumentRoot /var/www/html
>>>>> WSGIDaemonProcess flaskapp threads=5
>>>>> WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
>>>>> WSGIApplicationGroup %{GLOBAL}
>>>>>
>>>>> <Directory /var/www/html/flaskapp>
>>>>> WSGIProcessGroup flaskapp
>>>>> Require all granted
>>>>> </Directory>
>>>>>
>>>>> # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
>>>>> # error, crit, alert, emerg.
>>>>> # It is also possible to configure the loglevel for particular
>>>>> # modules, e.g.
>>>>> #LogLevel info ssl:warn
>>>>>
>>>>> ErrorLog ${APACHE_LOG_DIR}/error.log
>>>>> CustomLog ${APACHE_LOG_DIR}/access.log combined
>>>>>
>>>>> # For most configuration files from conf-available/, which are
>>>>> # enabled or disabled at a global level, it is possible to
>>>>> # include a line for only one particular virtual host. For example the
>>>>> # following line enables the CGI configuration for this host only
>>>>> # after it has been globally disabled with "a2disconf".
>>>>> #Include conf-available/serve-cgi-bin.conf
>>>>> #Header set Access-Control-Allow-Origin "*"
>>>>> </VirtualHost>
>>>>>
>>>>> Furthermore I have ensured that the dynamic link is created as seen below
>>>>> in the path /var/www/html
>>>>>
>>>>> (env) hd2900@hd2900:/var/www/html$ ll
>>>>> total 20
>>>>> drwxr-xr-x 2 root root 4096 Oct 10 18:38 ./
>>>>> drwxr-xr-x 3 root root 4096 Sep 26 21:54 ../
>>>>> lrwxrwxrwx 1 root root 19 Oct 10 18:38 flaskapp -> hd2900TakeawayPrint
>>>>> -rw-r--r-- 1 root root 10918 Sep 26 21:54 index.html
>>>>>
>>>>> In the hd2900TakeawayPrint folder the flasapp.wsgi is located
>>>>>
>>>>> (env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ ll -la
>>>>> total 32
>>>>> drwxrwxr-x 4 hd2900 www-data 4096 Oct 10 18:23 ./
>>>>> drwxrwxr-x 3 hd2900 hd2900 4096 Oct 10 18:04 ../
>>>>> drwxrwxr-x 4 hd2900 hd2900 4096 Oct 10 18:08 env/
>>>>> -rwxrwxr-x 1 hd2900 www-data 249 Oct 10 18:23 flaskapp.py*
>>>>> -rwxrwxr-x 1 hd2900 www-data 96 Oct 10 18:23 flaskapp.wsgi*
>>>>> drwxrwxr-x 8 hd2900 hd2900 4096 Oct 10 18:23 .git/
>>>>> -rw-r--r-- 1 root root 5 Oct 10 18:05 .gitignore
>>>>> -rwxrwxr-x 1 hd2900 hd2900 69 Oct 10 18:04 README.md*
>>>>>
>>>>> Still when I from a browser type https://my-global-IP:81
>>>>> <https://myglobalip:81/> I get the permission error.
>>>>>
>>>>> Best regards,
>>>>> Jian
>>>>>
>>>>>
>>>>>
>>>>>> Den 11. okt. 2021 kl. 22.37 skrev Graham Dumpleton
>>>>>> <[email protected] <mailto:[email protected]>>:
>>>>>>
>>>>>> You didn’t use exactly what I gave you. The argument to the Directory
>>>>>> directive needs to be the path to the directory holding the WSGI script
>>>>>> file, not the name of the mod_wsgi daemon process group.
>>>>>>
>>>>>> <Directory /var/www/html/flaskapp>
>>>>>> WSGIProcessGroup flaskapp
>>>>>> Require all granted
>>>>>> </Directory>
>>>>>>
>>>>>> Graham
>>>>>>
>>>>>>> On 12 Oct 2021, at 4:19 am, Jian Wu <[email protected]
>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>>
>>>>>>> Hello Graham,
>>>>>>>
>>>>>>> Thanks for pointing this out. I have now corrected it so the
>>>>>>> configuration file looks as below. The problem however still persists.
>>>>>>>
>>>>>>> cat /etc/apache2/sites-enabled/000-default.conf
>>>>>>> <VirtualHost *:80>
>>>>>>> # The ServerName directive sets the request scheme, hostname
>>>>>>> and port that
>>>>>>> # the server uses to identify itself. This is used when creating
>>>>>>> # redirection URLs. In the context of virtual hosts, the
>>>>>>> ServerName
>>>>>>> # specifies what hostname must appear in the request's Host:
>>>>>>> header to
>>>>>>> # match this virtual host. For the default virtual host (this
>>>>>>> file) this
>>>>>>> # value is not decisive as it is used as a last resort host
>>>>>>> regardless.
>>>>>>> # However, you must set it for any further virtual host
>>>>>>> explicitly.
>>>>>>> #ServerName www.example.com <http://www.example.com/>
>>>>>>>
>>>>>>> ServerAdmin webmaster@localhost
>>>>>>> DocumentRoot /var/www/html
>>>>>>> WSGIDaemonProcess flaskapp threads=5
>>>>>>> WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
>>>>>>> WSGIApplicationGroup %{GLOBAL}
>>>>>>>
>>>>>>> <Directory flaskapp>
>>>>>>> WSGIProcessGroup flaskapp
>>>>>>> Require all granted
>>>>>>> </Directory>
>>>>>>>
>>>>>>> # Available loglevels: trace8, ..., trace1, debug, info,
>>>>>>> notice, warn,
>>>>>>> # error, crit, alert, emerg.
>>>>>>> # It is also possible to configure the loglevel for particular
>>>>>>> # modules, e.g.
>>>>>>> #LogLevel info ssl:warn
>>>>>>>
>>>>>>> ErrorLog ${APACHE_LOG_DIR}/error.log
>>>>>>> CustomLog ${APACHE_LOG_DIR}/access.log combined
>>>>>>>
>>>>>>> # For most configuration files from conf-available/, which are
>>>>>>> # enabled or disabled at a global level, it is possible to
>>>>>>> # include a line for only one particular virtual host. For
>>>>>>> example the
>>>>>>> # following line enables the CGI configuration for this host
>>>>>>> only
>>>>>>> # after it has been globally disabled with "a2disconf".
>>>>>>> #Include conf-available/serve-cgi-bin.conf
>>>>>>> #Header set Access-Control-Allow-Origin "*"
>>>>>>> </VirtualHost>
>>>>>>>
>>>>>>> Best regards,
>>>>>>> Jian
>>>>>>>
>>>>>>>> Den 10. okt. 2021 kl. 23.23 skrev Graham Dumpleton
>>>>>>>> <[email protected] <mailto:[email protected]>>:
>>>>>>>>
>>>>>>>> For a start, this is wrong:
>>>>>>>>
>>>>>>>> <Directory flaskapp>
>>>>>>>> WSGIProcessGroup flaskapp
>>>>>>>> WSGIApplicationGroup %{GLOBAL}
>>>>>>>> Order deny,allow
>>>>>>>> Allow from all
>>>>>>>> </Directory>
>>>>>>>>
>>>>>>>> It should be:
>>>>>>>>
>>>>>>>> <Directory /var/www/html/flaskapp>
>>>>>>>> WSGIProcessGroup flaskapp
>>>>>>>> Require all granted
>>>>>>>> </Directory>
>>>>>>>>
>>>>>>>> Graham
>>>>>>>>
>>>>>>>>> On 11 Oct 2021, at 7:09 am, Jian Wu <[email protected]
>>>>>>>>> <mailto:[email protected]>> wrote:
>>>>>>>>>
>>>>>>>>> Dear Graham,
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> I am following this guide
>>>>>>>>> https://asdkazmi.medium.com/deploying-flask-app-with-wsgi-and-apache-server-on-ubuntu-20-04-396607e0e40f
>>>>>>>>>
>>>>>>>>> <https://asdkazmi.medium.com/deploying-flask-app-with-wsgi-and-apache-server-on-ubuntu-20-04-396607e0e40f>
>>>>>>>>> to deploy a flask app together with apache2 and mod-wsgi. My
>>>>>>>>> intension is being able to perform a request post call from another
>>>>>>>>> server over the internet to my server running flask.
>>>>>>>>>
>>>>>>>>> It seems that the author suggests to install mod-wsgi using the below
>>>>>>>>> command. I am not sure if that package is supported?
>>>>>>>>>
>>>>>>>>> sudo apt-get install libapache2-mod-wsgi-py3
>>>>>>>>>
>>>>>>>>> I followed the instruction, and when I typed in my local IP address
>>>>>>>>> on a browser I received a message saying “Forbidden you don’t have
>>>>>>>>> the permission to access this ressource Apache 2.4.46 (Ubuntu server
>>>>>>>>> at 192.168.0.179 port 80).
>>>>>>>>>
>>>>>>>>> Hardware:
>>>>>>>>> - Raspberry Pi 4 with Ubuntu 20.04. My local IP is 192.168.0.179
>>>>>>>>> - Router configuration: As seen in the picture below, I have
>>>>>>>>> forwarded port 22 external to internal 22 and external port 81 to
>>>>>>>>> internal port 80.
>>>>>>>>> <Indsat grafik-1.tiff>
>>>>>>>>>
>>>>>>>>> These ports are opened on my Ubuntu server
>>>>>>>>> (env) hd2900@hd2900:/etc/apache2/sites-available$ sudo ufw status
>>>>>>>>> [sudo] password for hd2900:
>>>>>>>>> Status: active
>>>>>>>>>
>>>>>>>>> To Action From
>>>>>>>>> -- ------ ----
>>>>>>>>> 22/tcp ALLOW Anywhere
>>>>>>>>> OpenSSH ALLOW Anywhere
>>>>>>>>> Apache Full ALLOW Anywhere
>>>>>>>>> 81/tcp ALLOW Anywhere
>>>>>>>>> 22/tcp (v6) ALLOW Anywhere (v6)
>>>>>>>>> OpenSSH (v6) ALLOW Anywhere (v6)
>>>>>>>>> Apache Full (v6) ALLOW Anywhere (v6)
>>>>>>>>> 81/tcp (v6) ALLOW Anywhere (v6)
>>>>>>>>>
>>>>>>>>> My Apache2 configuration file:
>>>>>>>>> (env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ cat
>>>>>>>>> /etc/apache2/sites-enabled/000-default.conf
>>>>>>>>> <VirtualHost *:80>
>>>>>>>>> # The ServerName directive sets the request scheme, hostname
>>>>>>>>> and port that
>>>>>>>>> # the server uses to identify itself. This is used when creating
>>>>>>>>> # redirection URLs. In the context of virtual hosts, the
>>>>>>>>> ServerName
>>>>>>>>> # specifies what hostname must appear in the request's Host:
>>>>>>>>> header to
>>>>>>>>> # match this virtual host. For the default virtual host (this
>>>>>>>>> file) this
>>>>>>>>> # value is not decisive as it is used as a last resort host
>>>>>>>>> regardless.
>>>>>>>>> # However, you must set it for any further virtual host
>>>>>>>>> explicitly.
>>>>>>>>> #ServerName www.example.com <http://www.example.com/>
>>>>>>>>>
>>>>>>>>> ServerAdmin webmaster@localhost
>>>>>>>>> DocumentRoot /var/www/html
>>>>>>>>> WSGIDaemonProcess flaskapp threads=5
>>>>>>>>> WSGIScriptAlias / /var/www/html/flaskapp/flaskapp.wsgi
>>>>>>>>> WSGIApplicationGroup %{GLOBAL}
>>>>>>>>>
>>>>>>>>> <Directory flaskapp>
>>>>>>>>> WSGIProcessGroup flaskapp
>>>>>>>>> WSGIApplicationGroup %{GLOBAL}
>>>>>>>>> Order deny,allow
>>>>>>>>> Allow from all
>>>>>>>>> </Directory>
>>>>>>>>>
>>>>>>>>> # Available loglevels: trace8, ..., trace1, debug, info,
>>>>>>>>> notice, warn,
>>>>>>>>> # error, crit, alert, emerg.
>>>>>>>>> # It is also possible to configure the loglevel for particular
>>>>>>>>> # modules, e.g.
>>>>>>>>> #LogLevel info ssl:warn
>>>>>>>>>
>>>>>>>>> ErrorLog ${APACHE_LOG_DIR}/error.log
>>>>>>>>> CustomLog ${APACHE_LOG_DIR}/access.log combined
>>>>>>>>>
>>>>>>>>> # For most configuration files from conf-available/, which are
>>>>>>>>> # enabled or disabled at a global level, it is possible to
>>>>>>>>> # include a line for only one particular virtual host. For
>>>>>>>>> example the
>>>>>>>>> # following line enables the CGI configuration for this host
>>>>>>>>> only
>>>>>>>>> # after it has been globally disabled with "a2disconf".
>>>>>>>>> #Include conf-available/serve-cgi-bin.conf
>>>>>>>>> #Header set Access-Control-Allow-Origin "*"
>>>>>>>>> </VirtualHost>
>>>>>>>>>
>>>>>>>>> # vim: syntax=apache ts=4 sw=4 sts=4 sr noet
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> My Flask app folder structure:
>>>>>>>>> (env) hd2900@hd2900:~/Documents/Python/hd2900TakeawayPrint$ ls -la
>>>>>>>>> total 32
>>>>>>>>> drwxrwxr-x 4 hd2900 hd2900 4096 Oct 10 18:23 .
>>>>>>>>> drwxrwxr-x 3 hd2900 hd2900 4096 Oct 10 18:04 ..
>>>>>>>>> drwxrwxr-x 4 hd2900 hd2900 4096 Oct 10 18:08 env
>>>>>>>>> -rw-rw-r-- 1 hd2900 hd2900 249 Oct 10 18:23 flaskapp.py
>>>>>>>>> -rw-rw-r-- 1 hd2900 hd2900 96 Oct 10 18:23 flaskapp.wsgi
>>>>>>>>> drwxrwxr-x 8 hd2900 hd2900 4096 Oct 10 18:23 .git
>>>>>>>>> -rw-r--r-- 1 root root 5 Oct 10 18:05 .gitignore
>>>>>>>>> -rw-rw-r-- 1 hd2900 hd2900 69 Oct 10 18:04 README.md
>>>>>>>>>
>>>>>>>>> flaskapp.wsgi content
>>>>>>>>> cat flaskapp.wsgi
>>>>>>>>> import sys
>>>>>>>>> sys.path.insert(0, '/var/www/html/flaskapp')
>>>>>>>>>
>>>>>>>>> Flaskapp.py content
>>>>>>>>> cat flaskapp.py
>>>>>>>>> # flaskapp.py
>>>>>>>>> # This is a "hello world" app sample for flask app. You may have a
>>>>>>>>> different file.
>>>>>>>>> from flask import Flask
>>>>>>>>> app = Flask(__name__)
>>>>>>>>> @app.route('/')
>>>>>>>>> def hello_world():
>>>>>>>>> return 'Hello from Flask!'
>>>>>>>>> if __name__ == '__main__':
>>>>>>>>>
>>>>>>>>> I don’t know how to troubleshoot this problem further, and I hope for
>>>>>>>>> your advice.
>>>>>>>>>
>>>>>>>>> Thanks in advance!
>>>>>>>>>
>>>>>>>>> Best regards,
>>>>>>>>> Jian
>>>>>>>>>
>>>>>>>>> --
>>>>>>>>> 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 view this discussion on the web visit
>>>>>>>>> https://groups.google.com/d/msgid/modwsgi/2BCCBE0B-7ECB-462D-998D-B0048679D76B%40gmail.com
>>>>>>>>>
>>>>>>>>> <https://groups.google.com/d/msgid/modwsgi/2BCCBE0B-7ECB-462D-998D-B0048679D76B%40gmail.com?utm_medium=email&utm_source=footer>.
>>>>>>>>
>>>>>>>>
>>>>>>>> --
>>>>>>>> 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 view this discussion on the web visit
>>>>>>>> https://groups.google.com/d/msgid/modwsgi/DA44D477-D5A6-4843-94BD-D2934DB8F9FE%40gmail.com
>>>>>>>>
>>>>>>>> <https://groups.google.com/d/msgid/modwsgi/DA44D477-D5A6-4843-94BD-D2934DB8F9FE%40gmail.com?utm_medium=email&utm_source=footer>.
>>>>>>>
>>>>>>>
>>>>>>> --
>>>>>>> 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 view this discussion on the web visit
>>>>>>> https://groups.google.com/d/msgid/modwsgi/85F8B0E7-909C-4FE5-B9E4-EE861298E63A%40gmail.com
>>>>>>>
>>>>>>> <https://groups.google.com/d/msgid/modwsgi/85F8B0E7-909C-4FE5-B9E4-EE861298E63A%40gmail.com?utm_medium=email&utm_source=footer>.
>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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 view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/modwsgi/0736BFAD-F31E-45FF-9083-AEAE4E91E5F4%40gmail.com
>>>>>>
>>>>>> <https://groups.google.com/d/msgid/modwsgi/0736BFAD-F31E-45FF-9083-AEAE4E91E5F4%40gmail.com?utm_medium=email&utm_source=footer>.
>>>>>
>>>>>
>>>>> --
>>>>> 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 view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/modwsgi/5D61A066-8FFD-4E2D-864C-A6E9245FAC22%40gmail.com
>>>>>
>>>>> <https://groups.google.com/d/msgid/modwsgi/5D61A066-8FFD-4E2D-864C-A6E9245FAC22%40gmail.com?utm_medium=email&utm_source=footer>.
>>>>
>>>>
>>>> --
>>>> 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 view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/modwsgi/DCBFDD21-E95A-4F09-A6CC-F65BEABEBB5B%40gmail.com
>>>>
>>>> <https://groups.google.com/d/msgid/modwsgi/DCBFDD21-E95A-4F09-A6CC-F65BEABEBB5B%40gmail.com?utm_medium=email&utm_source=footer>.
>>>
>>>
>>> --
>>> 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 view this discussion on the web visit
>>> https://groups.google.com/d/msgid/modwsgi/1FDD187D-FF9D-48DF-95A2-8DAB54881161%40gmail.com
>>>
>>> <https://groups.google.com/d/msgid/modwsgi/1FDD187D-FF9D-48DF-95A2-8DAB54881161%40gmail.com?utm_medium=email&utm_source=footer>.
>>
>>
>> --
>> 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 view this discussion on the web visit
>> https://groups.google.com/d/msgid/modwsgi/368B0BB7-524E-42D2-A9C6-A5BF9D66ADD5%40gmail.com
>>
>> <https://groups.google.com/d/msgid/modwsgi/368B0BB7-524E-42D2-A9C6-A5BF9D66ADD5%40gmail.com?utm_medium=email&utm_source=footer>.
>
>
> --
> 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 view this discussion on the web visit
> https://groups.google.com/d/msgid/modwsgi/5B040AC4-ED45-4DE0-A80E-6B1FCBAE9680%40gmail.com
>
> <https://groups.google.com/d/msgid/modwsgi/5B040AC4-ED45-4DE0-A80E-6B1FCBAE9680%40gmail.com?utm_medium=email&utm_source=footer>.
--
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 view this discussion on the web visit
https://groups.google.com/d/msgid/modwsgi/49F423B6-14CB-420A-956B-D087A6D7D9A4%40gmail.com.