> On 17 Aug 2017, at 11:14 pm, Mike Heath <mike24he...@gmail.com> 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 <mike2...@gmail.com <>> 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 modwsgi+u...@googlegroups.com <>.
>> To post to this group, send email to mod...@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 modwsgi+unsubscr...@googlegroups.com 
> <mailto:modwsgi+unsubscr...@googlegroups.com>.
> To post to this group, send email to modwsgi@googlegroups.com 
> <mailto:modwsgi@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 modwsgi+unsubscr...@googlegroups.com.
To post to this group, send email to modwsgi@googlegroups.com.
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Reply via email to