> On 18 Aug 2017, at 9:01 am, Mike Heath <[email protected]> wrote:
> 
> Thanks for that Graham but I'm not quite out of the wood yet. From your 
> latest advice, my httpd-vhosts.conf file now looks like this:
> 
> # Virtual Hosts
> 
> <VirtualHost *:80>
>     ServerName localhost
>     DocumentRoot c:/wamp/www
>     <Directory  "c:/wamp/www/">
>         Options +Indexes +Includes +FollowSymLinks +MultiViews
>         AllowOverride All
>         Require local
>     </Directory>
> 
>     ServerName localhost

You don't need the second ServerName.

>     WSGIScriptAlias /tester C:/python_projects/www/wsgi_script/test.wsgi
>     WSGIScriptAlias /app-test 
> C:/python_projects/www/python-test/python-test.wsgi    
>     <Directory C:/python_projects/www/>
>         Order allow,deny
>         Allow from all
>     </Directory>
> 
> </VirtualHost>
> 
> The url localhost/tester gets me 'Hello world' from the simple wsgi file cut 
> and pasted from online.
> The url localhost/app-test gets me a 500 error and the error log is here:
> 
> [Thu Aug 17 23:45:06.738358 2017] [wsgi:info] [pid 9252:tid 1252] mod_wsgi 
> (pid=9252): Create interpreter 'localhost|/app-test'.
> [Thu Aug 17 23:45:06.754401 2017] [wsgi:info] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949] mod_wsgi (pid=9252, process='', 
> application='localhost|/app-test'): Loading WSGI script 
> 'C:/python_projects/www/python-test/python-test.wsgi'.
> [Thu Aug 17 23:45:06.754401 2017] [wsgi:error] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949] mod_wsgi (pid=9252): Target WSGI script 
> 'C:/python_projects/www/python-test/python-test.wsgi' cannot be loaded as 
> Python module.
> [Thu Aug 17 23:45:06.754401 2017] [wsgi:error] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949] mod_wsgi (pid=9252): Exception occurred processing WSGI 
> script 'C:/python_projects/www/python-test/python-test.wsgi'.
> [Thu Aug 17 23:45:06.755406 2017] [wsgi:error] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949] Traceback (most recent call last):\r
> [Thu Aug 17 23:45:06.755406 2017] [wsgi:error] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949]   File 
> "C:/python_projects/www/python-test/python-test.wsgi", line 9, in <module>\r
> [Thu Aug 17 23:45:06.755406 2017] [wsgi:error] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949]     from hello import app as application\r
> [Thu Aug 17 23:45:06.755406 2017] [wsgi:error] [pid 9252:tid 1252] [client 
> 127.0.0.1:54949] ModuleNotFoundError: No module named 'hello'\r

Inside of python-test.wsgi you will need to add at the start:

    import sys
    sys.path.insert(0, 
'/some/path/to/parent/directory/of/flask/application/code')

For more details about module search path and setting up things for Python 
virtual environments in particular, read:

    
http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html 
<http://modwsgi.readthedocs.io/en/develop/user-guides/virtual-environments.html>

Just be aware that since you are on Windows, you don't have daemon mode.

> The directory python-test has two files: hello.py with this code
> 
> from flask import Flask
> 
> app = Flask(__name__)
> 
> @app.route('/')
> def index():
>     return 'Hello World'
> 
> if __name__ == "__main__":
>    app.run()
> 
> 
> and python-test.wsgi with this code
> 
> #! C:/Python36
> 
> import sys
> 
> sys.path.insert(0,"C:\python_projects\www")
> 
> from hello import app as application
> 
> I got this code from various research online - it's obviously completely 
> wrong but I'm at a loss as to what it should contain. Can you help me with 
> that?
> 
> Mike
> 
> 
> 
> On Thursday, August 17, 2017 at 11:23:15 PM UTC+1, Graham Dumpleton wrote:
> 
>> On 17 Aug 2017, at 11:14 pm, Mike Heath <[email protected] <>> wrote:
>> 
>> What a star you are! That worked! It was the virtual host setup that put the 
>> final piece into the jigsaw. I have also, on your advice, moved all python 
>> project files to a new directory outside wamp. Once I had changed the 
>> virtual host details, that worked fine too. However, that's a simple case 
>> with a special wsgi file. If I have a website project, presumably I don't 
>> have to use wsgi file extensions throughout? So does each project have to 
>> have an embedded wsgi file to 'connect' it and what would its code look like?
> 
> Yes, there needs to be some Python code file usable as the WSGI script file. 
> Then extension doesn't usually matter, so if has .py extension is okay. If 
> using .py just make sure you don't have:
> 
>     AddHandler cgi-script .py
> 
> in your httpd.conf file as that will cause it not to work.
> 
>> Also, I'm assuming that each project would need its own virtualhost setup.
> 
> Not a separate VirtualHost definition. If mounting them at different sub URL, 
> put it in the same VirtualHost.
> 
> A separate VirtualHost can only be used where is for different hostname or 
> port.
> 
>> I tried adding another virtual host within the VirtualHost tags like this:
>> 
>>     ServerName localhost
> 
> You don't need to duplicate ServerName if already appears and likely you 
> don't need it at all if only have one VirtualHost as it will default to using 
> that anyway. A VirtualHost is strictly only needed when start publishing 
> under a real hostname and server needs to handle more than one hostname with 
> different applications.
> 
>>     WSGIScriptAlias /app-test C:/python_projects/www/python-test/app.py
>>     <Directory C:/python_projects/www/python-test>
>>     Order allow,deny
>>     Allow from all
>>     </Directory>    
>> 
>> and got a 404 for /app-test, so maybe you can't have two different 
>> scriptaliases? btw app.py looks like this:
>> {
>> 
>> from flask import Flask
>> 
>> app = Flask(__name__)
>> 
>> @app.route('/')
>> def index():
>>     return 'Hello World'
>> 
>> if __name__ == "__main__":
>>    app.run()
>> }
>> 
>> Mike
>> On Thursday, August 17, 2017 at 12:37:14 PM UTC+1, Graham Dumpleton wrote:
>> 
>>> On 17 Aug 2017, at 9:23 pm, Mike Heath <mike2...@ <>gmail.com 
>>> <http://gmail.com/>> wrote:
>>> 
>>> Thanks for your response. Taking the points in turn:
>>> 
>>> Can you confirm that you are using the same Apache instance for PHP at the 
>>> same time as wanting to use it for Python? Yes that is correct
>>> Many thanks for your response, Graham. Taking your point in turn:
>>> 
>>> Can you confirm that you are using the same Apache instance for PHP at the 
>>> same time as wanting to use it for Python? Yes that is correct
>>> 
>>> Post the details of the over VirtualHost.
>>> Full content of the httpd-vhosts.conf file is as follows:
>>> 
>>> <VirtualHost *:80>
>>>     ServerName localhost
>>>     DocumentRoot c:/wamp/www
>>>     <Directory  "c:/wamp/www/">
>>>         Options +Indexes +Includes +FollowSymLinks +MultiViews
>>>         AllowOverride All
>>>         Require local
>>>     </Directory>
>>> </VirtualHost>
>>> #
>>> <VirtualHost *:80>
>>>     ServerName localhost
>>>     WSGIScriptAlias /test C:/wamp/www/wsgi_script/test.wsgi
>>>     <Directory C:/wamp/www/wsgi_script>
>>>     Order allow,deny
>>>     Allow from all
>>>     </Directory>
>>> </VirtualHost>
>> 
>> 
>> Change above two VirtualHost definitions to:
>> 
>> <VirtualHost *:80>
>>     ServerName localhost
>>     DocumentRoot c:/wamp/www
>>     <Directory  "c:/wamp/www/">
>>         Options +Indexes +Includes +FollowSymLinks +MultiViews
>>         AllowOverride All
>>         Require local
>>     </Directory>
>> 
>>     WSGIScriptAlias /test C:/wamp/www/wsgi_script/test.wsgi
>>     <Directory C:/wamp/www/wsgi_script>
>>     Order allow,deny
>>     Allow from all
>>     </Directory>
>> </VirtualHost>
>> 
>> In other words, combine them into one.
>> 
>> For the same hostname:port, everything must be under the one VirtualHost. 
>> Multiple VirtualHost for same hostname:port are not automatically joined in 
>> anyway. It was never matching the second VirtualHost and was being process 
>> in context of first VirtualHost and why getting 404.
>> 
>> Technically since likely only got one site and no public hostname, you could 
>> leave out the VirtualHost/ServerName directives and have everything at top 
>> level.
>> 
>> See how that goes and can then start changing where you place things. You 
>> should not put your Python source code under C:/wamp/www like you are as it 
>> could expose the source code even if WSGI application mapped properly.
>> 
>> For example, I could download source code for that test.wsgi by visiting URL 
>> path on server of:
>> 
>>     /wsgi_script/test.wsgi
>> 
>> So better to create separate directory not under DocumentRoot to hold Python 
>> web application code.
>> 
>> Graham
>> 
>>> 
>>> Also, what is DocumentRoot set to in the httpd.conf file? The code line is 
>>> DocumentRoot "${INSTALL_DIR}/www" and earlier there is Define INSTALL_DIR 
>>> c:/wamp which presumably defines the variable.
>>> 
>>> What did step 4 output and what did you add to the httpd.conf file? The 
>>> following:
>>> 
>>> LoadFile "c:/python36/python36.dll"
>>> LoadModule wsgi_module 
>>> "c:/python36/lib/site-packages/mod_wsgi/server/mod_wsgi.cp36-win_amd64.pyd"
>>> WSGIPythonHome "c:/python36"
>>> 
>>> Is there any existing LoadModule line for wsgi_module anywhere else in the 
>>> httpd.conf file. Answer no - confirmed by file search
>>> 
>>> Hope that sheds some light.
>>> 
>>> 
>>> 
>>> 
>>> On Thursday, August 17, 2017 at 10:24:33 AM UTC+1, Graham Dumpleton wrote:
>>> 
>>>> On 17 Aug 2017, at 7:15 pm, Mike Heath <[email protected] <>> wrote:
>>>> 
>>>> I am on a PC running Windows 10. I am in the early stages of learning 
>>>> python and flask for web development purposes and I want to set up a local 
>>>> development environment. I have been using wamp for php development and 
>>>> have a successful installation of wampserver 3.0.6 64bit which runs Apache 
>>>> 2.4.23.
>>> 
>>> Can you confirm that you are using the same Apache instance for PHP at the 
>>> same time as wanting to use it for Python?
>>> 
>>>> I now want to use that for python/flask and the way to do that appears to 
>>>> be via mod_wsgi. Thanks to an exchange with Graham Dumpleton in 
>>>> Stackoverflow I am aware of the documentation for mod_wsgi and have read 
>>>> that but clearly I have not fully understood it or complied with it 
>>>> correctly and the system isn't working.
>>>> 
>>>> Incidentally I have managed to get a VirtualEnvironment working which I 
>>>> think uses an inbuilt python server but I don't think that solves the 
>>>> problem of connecting to a database.
>>>> 
>>>> Anyway this is what I have done so far:
>>>> 
>>>> 1. Successfully installed Python 3.6
>>>> 
>>>> 2. Successfully installed flask (evidence for which is that the 
>>>> VirtualEnvironment works)
>>>> 
>>>> 3. Successfully (I think) installed mod_wsgi via 'pip install mod_wsgi'
>>>>     
>>>> 4. Run command 'mod_wsgi-express module-config' and copied the output to 
>>>> my apache httpd.conf file.
>>>> 
>>>> 5. Changed the httpd.conf LogLevel to 'info'
>>>> 
>>>> 6. Commented out the line 'AddHandler cgi-script .cgi .py'
>>>> 
>>>> 7. Created simple wsgi application (copy/paste from documentation), called 
>>>> 'test.wsgi'  in a folder C:\wamp\www\wsgi_script
>>>> 
>>>> 8. Set up a virtual host in the httpd-vhosts.conf file using the following 
>>>> code:
>>>> 
>>>>     <VirtualHost *:80>
>>>>         ServerName localhost
>>>>         WSGIScriptAlias /test C:/wamp/www/wsgi_script/test.wsgi
>>>>         <Directory C:/wamp/www/wsgi_script>
>>>>         Order allow,deny
>>>>         Allow from all
>>>>         </Directory>
>>>>     </VirtualHost>
>>> 
>>> Do you have any other VirtualHost definitions in the httpd.conf file?
>>> 
>>> If you do and the other one is set up for PHP this second VirtualHost would 
>>> be ignored. Post the details of the over VirtualHost.
>>> 
>>> Also, what is DocumentRoot set to in the httpd.conf file?
>>> 
>>>>     which I expect may be wrong but I don't understand it enough to know 
>>>> what.
>>>>     
>>>> 9. Run a check on the server via 
>>>> 'C:\wamp\bin\apache\apache2.4.23\bin>httpd -V'
>>>> which seemed to give a satisfactory response showing the version as 2.4.23 
>>>> and the MPM as WinNT.
>>>> 
>>>> 10. In the browser (Firefox) entered following in url bar 
>>>> 'http://localhost/wsgi_script/test.wsgi 
>>>> <http://localhost/wsgi_script/test.wsgi>'. The output is merely the raw 
>>>> code of the file.
>>>> 
>>>> There are things I expected to happen that didn't eg
>>>> 
>>>> After installing mod_wsgi, I expected a module 'mod_wsgi.so' to appear in 
>>>> the apache modules folder but it did not.
>>> 
>>> When C extensions are compiled by Python they can have a .pyd or .pyo 
>>> extension.
>>> 
>>>> I expected to have to load that module via a LoadModule line in httpd.conf 
>>>> but didn't see any advice to that effect.
>>> 
>>> Step 4 would have output what to include in the httpd.conf file. That would 
>>> have included LoadFile, LoadModule and WSGIPythonHome directives. The 
>>> LoadModule line output at step 4 would use whatever is appropriate 
>>> extension, which need not be .so.
>>> 
>>> What did step 4 output and what did you add to the httpd.conf file?
>>> 
>>> Is there any existing LoadModule line for wsgi_module anywhere else in the 
>>> httpd.conf file. 
>>> 
>>>> When I look at the containing fiolder in the browser ie 
>>>> 'http://localhost/wsgi_script/' I see the 'index of 
>>>> <http://localhost/wsgi_script/'+I+see+the+'index+of>' page at the bottom 
>>>> of which is
>>>>     Apache/2.4.23 (Win64) PHP/5.6.25 mod_wsgi/4.5.17 Python/3.6 Server at 
>>>> localhost Port 80
>>>> which seems to indicate that apache is recognising mod_wsgi
>>>> 
>>>> Having tried to access the wsgi file, the apache error log read:
>>>> 
>>>> [Thu Aug 17 00:07:41.135713 2017] [auth_digest:notice] [pid 5416:tid 540] 
>>>> AH01757: generating secret for digest authentication ...
>>>> [Thu Aug 17 00:07:41.151640 2017] [wsgi:info] [pid 5416:tid 540] mod_wsgi 
>>>> (pid=5416): Python home c:/python36.
>>>> [Thu Aug 17 00:07:41.151640 2017] [wsgi:info] [pid 5416:tid 540] mod_wsgi 
>>>> (pid=5416): Initializing Python.
>>>> [Thu Aug 17 00:07:41.168231 2017] [wsgi:info] [pid 5416:tid 540] mod_wsgi 
>>>> (pid=5416): Attach interpreter ''.
>>>> [Thu Aug 17 00:07:41.182267 2017] [wsgi:info] [pid 5416:tid 540] mod_wsgi 
>>>> (pid=5416): Imported 'mod_wsgi'.
>>>> [Thu Aug 17 00:07:41.184272 2017] [mpm_winnt:notice] [pid 5416:tid 540] 
>>>> AH00354: Child: Starting 64 worker threads.
>>>> [Thu Aug 17 09:54:05.412979 2017] [core:info] [pid 5416:tid 1260] [client 
>>>> 127.0.0.1:50861 <http://127.0.0.1:50861/>] AH00128: File does not exist: 
>>>> C:/wamp/www/test
>>>> 
>>>> I hope this is enough information to pick up my errors and suggest 
>>>> corrections or further tests.
>>>> 
>>>> -- 
>>>> 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 modwsgi+u...@ <>googlegroups.com <http://googlegroups.com/>.
>>>> To post to this group, send email to mod...@ <>googlegroups.com 
>>>> <http://googlegroups.com/>.
>>>> 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 
>>> <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 
>> <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] 
> <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.

Reply via email to