Aha! Thanks! Addition of proper user and group options to WSGIDaemonProcess
solved the ImportError! The last question i have might be not related to
mod_wsgi directly, but still.
I have a Flask app, purpose of which to be able to upload files provided by
user, do some math and return result on a new page. Simplified code looks
like this:
...
@app.route('/'):
def index()
return render_template('index.html')
@app.route('/analysis', methods=['POST'])
def upload():
uploaded_files = request.files.getlist('files')
...
for file in uploaded_files:
...
return render_template('analysis.html')
...
The folder with static files which Flask renders is:
home/user/flask_stuff_files/templates
in Apache ive corrected document root folder and added directory with
static files:
apache-wsgi config:
----------------------------
<VirtualHost *:80>
ServerName www.example.com
DocumentRoot /home/user/flask_stuff_files/templates
WSGIDaemonProcess home=/var/www/wsgi-scripts python-path=
/home/user/flask_stuff_files user=user group=user
WSGIScriptAlias /test /var/www/wsgi-scripts/simple_app.wsgi
process-group=app application-group=%{GLOBAL}
<Directory /var/www/wsgi-scripts>
Require all granted
</Directory>
<Directory /home/user/flask_stuff_files>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
<Directory /home/user/flask_stuff_files/templates>
WSGIProcessGroup app
WSGIApplicationGroup %{GLOBAL}
Require all granted
</Directory>
</VirtualHost>
So, www.example.com/test - it renders main page as intended, but when i
select files and submit them via POST request ive got a forbidden access
with error_log : Permission denied [...] : acces to /analysis denied
(filesystempath '/home/user/flask_stuff_files') because search permissions
are missing on a component of the path, referer: www.example.com/test.
For the test, i set permissions of the folder /home/user/flask_stuff_files
to the drwxrwxrwx, it belongs to user user.
So, could you share your thoughts on what is wrong here?
2016-08-21 23:28 GMT+03:00 Graham Dumpleton <[email protected]>:
> Your code will be running as the Apache user. Your home directory would
> have restrictive permissions on it such that not everyone can access files
> out of it.
>
> The quickest solution would be to set the process/group that the mod_wsgi
> daemon process runs as.
>
> WSGIDaemonProcess home=/var/www/wsgi-scripts
> python-path=/home/user/flask_stuff_files user=xxx group=yyy
>
> Replace xxx with your user name and yyy with the group name, likely same
> as xxx.
>
> Thi presumes the issue isn’t as simple as you having left off the leading
> slash on the path to the python-path option as your snippet showed.
>
> Graham
>
> On 21 Aug 2016, at 11:41 PM, Tierprot B. <[email protected]> wrote:
>
>
>> That is what WSGIScriptAlias is doing in giving it the path to the WSGI
>> script file. If you mean something different you need to be clearer.
>>
>> b) that it should include python files from outside directory, for
>> example home/user/flask_stuff_files ?
>>
>>
>> If you are talking about other places to look for Python modules to
>> import, that is what the python-path option for WSGIDaemonProcess that I
>> mentioned is for.
>>
>> Graham
>>
>>
> Ok, ive got python modules which i try to import located at
> home/user/flask_stuff_files,
> mine wsgi file is in /var/www/wsgi-scripts, now to the code:
>
> apache-wsgi config:
> ----------------------------
> <VirtualHost *:80>
> ServerName www.example.com
> DocumentRoot /var/www/html
>
> WSGIDaemonProcess home=/var/www/wsgi-scripts python-path=
> home/user/flask_stuff_files
> WSGIScriptAlias /test /var/www/wsgi-scripts/simple_app.wsgi
>
> <Directory /var/www/wsgi-scripts>
> Require all granted
> </Directory>
> </VirtualHost>
> -------------------------
>
> simple_app.wsgi:
> ----------------------------------
> import server_handle
>
> def application(environ, start_response):
> status = '200 OK'
> output = b'Hello, World!'
>
> response_headers = [('Content-type', 'text/plain'),
> ('Content-Length', str(len(output)))]
> start_response(status, response_headers)
> return [output]
>
> ------------------------------------
>
> server_handle.py module is located at /home/user/flask_stuff_files
>
> on trying www.example.com/test Apache spits with error ImportError: no
> module named 'server_handle'
>
> adding of code like:
>
> import sys
> sys.path.insert(0,'/home/user/flask_stuff_files')
>
> dont solve the problem too (do you know why, btw?)
>
> Theres something i didn`t properly understood, so sorry for annoying and
> dumb questions :)
>
> --
> 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 a topic in the
> Google Groups "modwsgi" group.
> To unsubscribe from this topic, visit https://groups.google.com/d/
> topic/modwsgi/mDhEH4ChXgE/unsubscribe.
> To unsubscribe from this group and all its topics, 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.