WSGIScriptAliasMatch problem on windows? someone help me.

31 views
Skip to first unread message

Yikang Mao

unread,
Oct 22, 2014, 10:36:33 AM10/22/14
to mod...@googlegroups.com
HI, 

I am working on a project which have three parts

1: Website to make user configure something which is handled by a django app, config.wsgi
2: Serve the segment files for MPEG Dash which is handled by another django app, mpegdash.wsgi
3: Static resources. 

I use the following configuration
------------------------------------------------------------
DocumentRoot "C:/xampp/htdocs"
Alias /mat_static/ "E:/Work/MAT/static_web_files/"

WSGIScriptAlias /mth "E:/Work/mat/config.wsgi"
WSGIScriptAliasMatch ^/testsuite/tests/a-z0-9][a-z0-9\-]*(\.[a-z0-9][a-z0-9\-]*)+_[A-Z0-9][A-Z0-9_\-]*)/(.*\.fmp4)/(.*)$ "E:/Work/MAT/mpegdash.wsgi"
----------------------------------------------------

Now the problem is that only one instance of django can work, e.g. if I firstly perform the request for config.wsgi and it works, then any requests matching the second one will fail. If I perform a request e.g. http://mat.test/testsuite/test/mat.test_1050/720x576i_1000Kbps_3secseg_MP30_169/media.fmp4/video/1/init.mp4 matching the rules for mpegdash.wsgi and it works, but any requests other than the request even it match the rule for config.wsgi or mpegdash.wsgi will fail.  All the error is the same " File "C:\Python27\lib\site-packages\win32\lib\pywintypes.py", line 114, in __import_pywin32_system_module__
    assert sys.modules[modname] is old_mod, AssertionError"

I was thinking that using WSGIDaemonProcess and soon found it is not supported on windows

Could someone tell what is the real problem for this? any suggestion for apache configuration?


Thanks in advance.


Best regards,
Monica.


Graham Dumpleton

unread,
Oct 22, 2014, 6:33:54 PM10/22/14
to mod...@googlegroups.com
On 23/10/2014, at 1:36 AM, Yikang Mao <yikan...@gmail.com> wrote:

HI, 

I am working on a project which have three parts

1: Website to make user configure something which is handled by a django app, config.wsgi
2: Serve the segment files for MPEG Dash which is handled by another django app, mpegdash.wsgi
3: Static resources. 

I use the following configuration
------------------------------------------------------------
DocumentRoot "C:/xampp/htdocs"
Alias /mat_static/ "E:/Work/MAT/static_web_files/"

WSGIScriptAlias /mth "E:/Work/mat/config.wsgi"
WSGIScriptAliasMatch ^/testsuite/tests/a-z0-9][a-z0-9\-]*(\.[a-z0-9][a-z0-9\-]*)+_[A-Z0-9][A-Z0-9_\-]*)/(.*\.fmp4)/(.*)$ "E:/Work/MAT/mpegdash.wsgi"
----------------------------------------------------

Your pattern doesn't appear to be valid. I don't know if you simply cut and paste it wrong. There is a missing opening '[' on the first character class match 'a-z0-9'.

In general you have to be very careful in using WSGIScriptAliasMatch and I would always recommend against it if you can.

Why can't you just have:

     WSGIScriptAlias / testsuite/tests "E:/Work/MAT/mpegdash.wsgi"

and have the script internally do pattern match on PATH_INFO and reject with a 404 if not matching.

Now the problem is that only one instance of django can work, e.g. if I firstly perform the request for config.wsgi and it works, then any requests matching the second one will fail. If I perform a request e.g. http://mat.test/testsuite/test/mat.test_1050/720x576i_1000Kbps_3secseg_MP30_169/media.fmp4/video/1/init.mp4 matching the rules for mpegdash.wsgi and it works, but any requests other than the request even it match the rule for config.wsgi or mpegdash.wsgi will fail.  All the error is the same " File "C:\Python27\lib\site-packages\win32\lib\pywintypes.py", line 114, in __import_pywin32_system_module__
    assert sys.modules[modname] is old_mod, AssertionError"
I was thinking that using WSGIDaemonProcess and soon found it is not supported on windows
Could someone tell what is the real problem for this? any suggestion for apache configuration?

Anyway, for a start, have a read of:


For multiple Django instances in same process, you need to make sure your Django wsgi.py is using:

    os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'

and not:

    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')

else the wrong config will be used.

The other possibility is that this win32 module you are using can only be used in one Python sub interpreter of a process at a time. Since you are using Django though, you cannot force the two to run together in one sub interpreter and you don't have daemon mode available.

Lets check how those Django settings modules are setup first though.

Graham



Yikang Mao

unread,
Oct 23, 2014, 5:19:26 AM10/23/14
to mod...@googlegroups.com
Hi Graham,

Really thanks for your quick response.

Yes, you are right and I missed "[", it is a paste mistake

Yes, I totally agree with you, I want to avoid use this complex thing.  It is ok for me to combine the two applications to one, then handle the pattern of URL inside the application. But I still have the problem for filtering the files I need to deal with.  For example,   there are other files e.g. html page, php script etc. under /testsuite/tests/sub_folder/sub_folder which I don't want to touch, I am only interested in the requests matching pattern either "mth" or "^/testsuite/tests/[a-z0-9][a-z0-9\-]*(\.[a-z0-9][a-z0-9\-]*)+_[A-Z0-9][A-Z0-9_\-]*)/(.*\.fmp4)/(.*)$",  the first one is easy, the second is kind of mixed with the files I don't want to handle. Because for so many reasons, I couldn't put the files into separate folders.

Before I thought I can use WSGIScriptAliasMatch  to do the filter, but it seems I cannot do it on windows. I tried to upgrade pywin32 package, it does not help:(.

Given "Alias" or "AliasMatch" has precedence over WSGIScriptAlias,  Now I am thinking possibly I use the them to filter out the files I am not interested in, then the rest of the files will go to the django application, hopping I can find easy pattern to do this filter ( I hate the perl regular expression :().

Really thanks for your help!!

Best regards,
Monica. 


--
You received this message because you are subscribed to a topic in the Google Groups "modwsgi" group.
To unsubscribe from this topic, visit https://groups.google.com/d/topic/modwsgi/eO4s3sobo-U/unsubscribe.
To unsubscribe from this group and all its topics, send an email to modwsgi+u...@googlegroups.com.
To post to this group, send email to mod...@googlegroups.com.
Visit this group at http://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.

Graham Dumpleton

unread,
Oct 23, 2014, 5:33:17 AM10/23/14
to mod...@googlegroups.com
Have a read of:


You can make Apache match actual physical files in the file system first and only send URLs that don't match through to a WSGI application.

There is also a mod_wsgi directive one can use such that even when a physical file is matched of a certain type, rather than it be served up by Apache, then the reference to it will be passed into a specified WSGI application instead. You can detect this case in the WSGI environ and then have the WSGI application read the file in and use it as input for the request and produce the response.

So have a read of those two docs and then perhaps explain a little bit clearer what your requirements are if that doesn't satisfy them.

Graham

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.

Yikang Mao

unread,
Oct 23, 2014, 12:34:46 PM10/23/14
to mod...@googlegroups.com
Hi,

I was trying to combine the two applications but failed because of the requirement of the project I couldn't combine the two rules ( ^/mat/(.*) and (^/testsuite/tests/[a-z0-9][a-z0-9\-]*(\.[a-z0-9][a-z0-9\-]*)+_[A-Z0-9][A-Z0-9_\-]*)/(.*\.fmp4)/(.*)$) in one perl regular expression, and also I found using "Alias" to filter out the files I don't want to touch is unrealistic (too many different type of files)

But finally I found solution from the following post. yeah..:) 


Thanks for all  your help!, Your blogs are very useful.

Best regards, 
Monica

Reply all
Reply to author
Forward
0 new messages