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
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
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] <javascript:>>
> 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 <[email protected]> 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'. 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' 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] 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 [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.
>>>
>>>
>>>
>> --
>> 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.
>>
>>
>>
> --
> 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] <javascript:>.
> To post to this group, send email to [email protected] <javascript:>
> .
> Visit this group at https://groups.google.com/group/modwsgi.
> For more options, visit 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.