I solved my problem in a different way.. I downloaded Apache for a 2nd
time, hence creating two instances of Apache24. The second instance I named
it Apache24_2

So what I did is:

1) Download Apache24 from https://www.apachelounge.com/download/

2) Rename the downloaded folder to Apache24_2. Extract that folder to the
same directory where Apache24 (original instance of Apache) is. In my case,
both Apache instances would be in "C:/".

3) Open Apache24_2's httpd.conf and httpd-vhosts.conf files. In httpd.conf
I modified the following:

Define SRVROOT "c:/Apache24_2"

#ServerRoot "${SRVROOT}"
ServerRoot "c:/Apache24_2"

# Modified the port. I left Apache24 (original Apache instance) with port
80. I set Apache24_2's port to port 5000.
# Listen 80
Listen 5000

4) In Apache24_2's httpd.conf file, include virtual host and paste my
mod_wsgi configuration:

Include conf/extra/httpd-vhosts.conf

LoadFile
"c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module
"c:/app2/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/app2/venv"

5) Set Apach24 (original instance) httpd.conf with app1's corresponding
mod_wsgi installation:

Listen 80

Include conf/extra/httpd-vhosts.conf

LoadFile
"c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
LoadModule wsgi_module
"c:/app1/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
WSGIPythonHome "c:/app1/venv"

6) Set the following virtual host for Apache24 (original):

<VirtualHost *:80>

    ServerName ip:80
    ServerAlias ip:80
    ServerAdmin [email protected]

    DocumentRoot c:/app1

    <Directory c:/app1>
        Require all granted
    </Directory>

    WSGIScriptAlias / c:/app1/run.wsgi
    WSGIApplicationGroup %{GLOBAL}

    <Directory c:/app1>
        Options +FollowSymLinks
        Require all granted
    </Directory>

    ErrorLog "logs/app1-error.log"
    CustomLog "logs/app1-access.log" common

</VirtualHost>

7) Set the following virtual host for Apache24_2 (second instance):

<VirtualHost *:5000>

    ServerName ip:5000
    ServerAlias ip:5000
    ServerAdmin [email protected]

    DocumentRoot c:/app2

    <Directory c:/app2>
        Require all granted
    </Directory>

    WSGIScriptAlias / c:/app2/run.wsgi
    WSGIApplicationGroup %{GLOBAL}

    <Directory c:/app2>
        Options +FollowSymLinks
        Require all granted
    </Directory>

    ErrorLog "logs/app2-error.log"
    CustomLog "logs/app2-access.log" common

</VirtualHost>
6) Once both Apaches are configured respectively, stop Apache24's service
(if running).

7)  In CMD go to C:/Apache24_2/bin. In CMD enter httpd.exe -k install -n
"Apache24_2" -f "C:/Apache24_2/conf/httpd.conf"

8) Go to Windows Services. Verify both Apaches are listed

9) Start both services

10) Process Ready. Go to:

ip:80 --> app1 should be displayed

ip:5000 --> app2 should be displayed


What are your thoughts on this?




On Tue, Sep 15, 2020 at 3:04 PM Graham Dumpleton <[email protected]>
wrote:

>
>
> On 15 Sep 2020, at 10:56 pm, Daniel Gutiérrez <
> [email protected]> wrote:
>
> Hi Graham,
>
> Thank you for your quick response.
>
> Ok, so I did a couple things:
>
>
> 1) Set WSGIPythonHome
> = "c:/users/administrator/appdata/local/programs/python/python37" in
> httpd.conf
>
> 2) Removed WSGIApplicationGroup %{GLOBAL} from VirtualHost configuration
>
> Once I did that, I actually did not get the "encodings" error I was
> getting before. However, I got an Internal Server Error. I assumed this
> happened because the main Python interpreter didn't have the necessary
> modules that the virtualenv did have (thus, I pip installed them).
>
>
> You should not need to install the modules in the system Python
> installation so long as the activate_this code was in the correct spot
> within the WSGI script file, and that it actually works on Windows (I can't
> remember if it does or not).
>
> Make sure that the activate_this code is before all other imports except
> for 'import sys'.
>
> After the activate_this code and before doing anything else, add:
>
>     print(sys.path)
>
> and check Apache logs to see what it was set to for each application. What
> do you see?
>
> What Python distribution are you trying to use? The standard one from
> Python software foundation, or the Anaconda distribution?
>
> Graham
>
> Now I am getting the following error:
>
> File "C:\\CRM4_Flask\\venv\\Lib\\site-packages\\uuid.py", line 138\r,
> referer: http://172.16.3.120/
> [Tue Sep 15 06:54:38.538334 2020] [wsgi:error] [pid 6244:tid 1228] [client
> ]     if not 0 <= time_low < 1<<32L:
> SyntaxError: invalid syntax\r, referer: http://ip/
>
> This is apparently happening in uuid module, which in theory has nothing
> to do with my app. I guess it is a built in module or something. What can i
> do?
>
>
> This sorts of suggests that the mod_wsgi might be compiled for a different
> Python version. Can't think what else could cause it.
>
> When you install mod_wsgi, make sure you are using:
>
>     pip install -U --no-cache-dir mod_wsgi
>
> so that any prior build of the package is installed.
>
> On Tuesday, September 15, 2020 at 6:31:10 AM UTC-6 Graham Dumpleton wrote:
>
>>
>>
>> > On 15 Sep 2020, at 10:17 pm, Daniel Gutiérrez <
>> [email protected]> wrote:
>> >
>> >
>> > Hi, I want to host multiple Flask apps through Apache in the same
>> Windows 10 server. I want each app to be running on different ports. I
>> figured that each app must have its own Python configuration, otherwise
>> Apache will only run one of the two web apps. I have seen that in Linux you
>> are supposed to use WSGIDaemonProcess command in the VirtualHost file, but
>> this does not work on Windows.
>> >
>> > I tried using
>> >
>> > import sys
>> > activate_this = 'C:/CRM4_Flask/venv/Scripts/activate_this.py'
>> > with open(activate_this) as file_:
>> > exec(file_.read(), dict(__file__=activate_this))
>> >
>> > #Expand Python classes path with your app’s path
>> > # The string inputted as the parameter corresponds to the web app's
>> path in C
>> > sys.path.insert(0, "C:/CRM4_Flask")
>> >
>> > from run import app as application
>> >
>> > in my run.wsgi file for each app. However, I always get the following
>> error:
>> >
>> > Fatal Python error: initfsencoding: unable to load the file system codec
>>
>> > ModuleNotFoundError: No module named 'encodings'
>>
>> This error has nothing to do with use of activate_this files and
>> indicates that the Python libraries can't find your Python installation for
>> some reason.
>>
>> Still set WSGIPythonHome, but set it to where the main Python
>> installation is located (not the virtual environment).
>>
>> This should be the value of sys.prefix, or at least I hope so as I can't
>> remember what Windows uses for the main Python installation.
>>
>> > What alternative do I have instead of using WSGIDaemonProcess, given
>> that it does not work on Windows? Im using Apache 2.4, Python 3.7.7,
>> Windows 10 and mod_wsgi 4.7.1
>> >
>> > My VirtualHost configuration for one of the web apps I want to host is:
>>
>> >
>> >
>> > <VirtualHost *:80>
>> >
>> > ServerName localhost:80
>> > ServerAlias localhost:80
>> > ServerAdmin [email protected]
>> >
>> > DocumentRoot c:/CRM4_Flask
>> >
>> > <Directory c:/CRM4_Flask>
>> > Require all granted
>> > </Directory>
>> >
>> > WSGIScriptAlias / c:/CRM4_Flask/run.wsgi
>> > WSGIApplicationGroup %{GLOBAL}
>>
>> Provided that both your WSGI applications only use third party modules
>> that work fine in sub interpreters, all you need to do is NOT set
>> WSGIApplicationGroup.
>>
>> So long as you don't set it, each WSGI application will run in a separate
>> Python sub interpreter of the same process and in the main shouldn't
>> interfere with each other, or at least to the extent that sub interpreters
>> separate things.
>>
>> This is because sub interpreters are used by default, where the name of
>> the sub interpreter is based on the name of the virtual host, the port, and
>> the mount point of the WSGI application. So long as your two virtual hosts
>> are on different ports (except for 80/443 which are still treated as one),
>> they should be separate.
>>
>> If you are using Python packages such as numpy then you will have a
>> problem though. This is because numpy and thus a lot of the scientific
>> packages for Python don't work in sub interpreters. Usually with those you
>> would force the use of the main Python interpreter context. This is fine on
>> Linux where have multiple apps which all need that to be done, as you can
>> delegate each to separate daemon process groups. On Windows though you
>> would be out of luck, as only one could be delegated to the main Python
>> interpreter.
>>
>> The directive which delegates the WGSI application to the main
>> interpreter is:
>>
>> WSGIApplicationGroup %{GLOBAL}
>>
>> which is why I am asking you not to set it, cause right now you are
>> telling both to run in the main interpreter, so they will conflict.
>>
>> Graham
>>
>>
>> > <Directory c:/CRM4_Flask>
>> > Options +FollowSymLinks
>> > Require all granted
>> > </Directory>
>> >
>> > ErrorLog "logs/crm4-error.log"
>> > CustomLog "logs/crm4-access.log" common
>> >
>> > </VirtualHost>
>> >
>> > In the httpd.conf I added the following lines:
>> >
>> > LoadFile
>> "c:/users/administrator/appdata/local/programs/python/python37/python37.dll"
>>
>> > LoadModule wsgi_module
>> "c:/crm4_flask/venv/lib/site-packages/mod_wsgi/server/mod_wsgi.cp37-win_amd64.pyd"
>>
>> > #WSGIPythonHome "c:/crm4_flask/venv"
>> >
>> > I commented WSGIPythonHome because in theory I need Apache to load two
>> versions of Python, not only one.
>> >
>> > Please let me know if I am doing something wrong or if I should try
>> something else.
>>
>>
> --
> 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/bc1efda6-62b0-444c-8981-a9eb47ff7bd2n%40googlegroups.com
> <https://groups.google.com/d/msgid/modwsgi/bc1efda6-62b0-444c-8981-a9eb47ff7bd2n%40googlegroups.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/382A9A76-5E51-40F2-BCA4-98A508EA65E2%40gmail.com
> <https://groups.google.com/d/msgid/modwsgi/382A9A76-5E51-40F2-BCA4-98A508EA65E2%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/CAOgXKo8nWxqbkdnR34NG1yk2%2BkAai%2BoQfm29fXJUqN0GdhRrFQ%40mail.gmail.com.

Reply via email to