Is your directory where images are to be stored writable to the user that Apache runs your code?
https://modwsgi.readthedocs.io/en/develop/user-guides/application-issues.html#access-rights-of-apache-user <https://modwsgi.readthedocs.io/en/develop/user-guides/application-issues.html#access-rights-of-apache-user> > On 30 Oct 2019, at 11:29 am, Robert Kudyba <[email protected]> wrote: > > Below is a snip of the app code. I didn't think it was relevant as the page > doesn't even load, i.e., before the submit. And since I got it working with > mod_wsgi-express start-server I thought it had to be something in the > httpd.conf file. > > from flask import Flask, render_template, request, redirect, url_for, > make_response,jsonify > from werkzeug.utils import secure_filename > import os > import cv2 > import time > from scipy import ndimage > from datetime import timedelta > import nibabel as nib > import numpy as np > import matplotlib.pyplot as plt > import nilearn > from nilearn import plotting > from nilearn import image > > ALLOWED_EXTENSIONS = set(['png', 'jpg', 'JPG', 'PNG', 'bmp','nii.gz','nii']) > > def allowed_file(filename): > return '.' in filename and filename.rsplit('.', 2)[1] in > ALLOWED_EXTENSIONS > > app = Flask(__name__) > app.send_file_max_age_default = timedelta(seconds=1) > > def show_slices(slices): > """ Function to display row of image slices """ > fig, axes = plt.subplots(1, len(slices)) > for i, slice in enumerate(slices): > axes[i].imshow(slice.T, cmap="gray", origin="lower") > > > > # @app.route('/upload', methods=['POST', 'GET']) > @app.route('/upload', methods=['POST', 'GET']) > def upload(): > if request.method == 'POST': > f = request.files['file'] > > if not (f and allowed_file(f.filename)): > return jsonify({"error": 1001, "msg": "png,PNG,jpg,JPG,bmp"}) > > user_input = request.form.get("name") > user_input1 = request.form.get("name1") > user_input2 = request.form.get("name2") > a = int(user_input) > b = int(user_input1) > c = int(user_input2) > > basepath = os.path.dirname(__file__) > > upload_path = os.path.join(basepath, 'static/images', > secure_filename(f.filename)) > # upload_path = os.path.join(basepath, 'static/images','test.jpg') > f.save(upload_path) > > epi_img = nib.load(upload_path) > epi_img_data = epi_img.get_fdata() > shape = epi_img_data.shape > x = shape[0] - 1 > > On Tuesday, October 29, 2019 at 5:18:04 PM UTC-4, Graham Dumpleton wrote: > As I already asked, how is the path for where you are storing the upload > calculated? What is the code and any configuration? > >> On 30 Oct 2019, at 6:59 am, Robert Kudyba <rku...@ <>fordham.edu >> <http://fordham.edu/>> wrote: >> >> SELinux is definitely disabled. When I test the app locally, all works well. >> I also found where you made a suggestion >> <https://davidhamann.de/2017/08/05/running-flask-with-wsgi-on-macos/> to try >> mod_wsgi-express start-server, and that works fine, and the URL displays >> and the image upload works: >> >> # mod_wsgi-express-3 setup-server upload_pictures.wsgi --port=8987 --user my >> --group mygroup >> Server URL : http://localhost:8987/ <http://localhost:8987/> >> Server Root : /tmp/mod_wsgi-localhost:8987:0 >> Server Conf : /tmp/mod_wsgi-localhost:8987:0/httpd.conf >> Error Log File : /tmp/mod_wsgi-localhost:8987:0/error_log (warn) >> Rewrite Rules : /tmp/mod_wsgi-localhost:8987:0/rewrite.conf >> Environ Variables : /tmp/mod_wsgi-localhost:8987:0/envvars >> Control Script : /tmp/mod_wsgi-localhost:8987:0/apachectl >> Request Capacity : 5 (1 process * 5 threads) >> Request Timeout : 60 (seconds) >> Startup Timeout : 15 (seconds) >> Queue Backlog : 100 (connections) >> Queue Timeout : 45 (seconds) >> Server Capacity : 20 (event/worker), 20 (prefork) >> Server Backlog : 500 (connections) >> Locale Setting : en_US.UTF-8 >> >> /tmp/mod_wsgi-localhost:8987:0/apachectl start >> >> So perhaps my stanza in the httpd.conf is awry? >> >> On Tuesday, October 29, 2019 at 3:32:14 PM UTC-4, Graham Dumpleton wrote: >> Where are you defining the path to upload images to? It cannot be a relative >> path, you need to calculate it as an absolute path. See: >> >> https://modwsgi.readthedocs.io/en/develop/user-guides/application-issues.html#application-working-directory >> >> <https://modwsgi.readthedocs.io/en/develop/user-guides/application-issues.html#application-working-directory> >> >> Only other thing off top of my head that could be is that have SELinux >> enabled and it is blocking where you are writing to. >> >> It is hard to guess without see any error message, but looks like you don't >> have Flask configured to log error messages and they get swallowed up. >> >> Graham >> >>> On 30 Oct 2019, at 2:50 am, Robert Kudyba <rku...@ <>fordham.edu >>> <http://fordham.edu/>> wrote: >>> >>> Running Apache/2.4.41 on Fedora 30 and >>> python3-mod_wsgi-4.6.4-3.fc30.x86_64. And doing a test with: >>> mod_wsgi-express start-server /var/www/flask/upload_pictures.wsgi --user >>> myuser works mostly fine just uses Python 2.7 and some warnings. Browsing >>> the URL works fine. The app just allows users to upload a picture. >>> >>> [Tue Oct 29 10:05:05.365111 2019] [mpm_event:notice] [pid 17160:tid >>> 140276832493888] AH00489: Apache/2.4.41 (Fedora) mod_wsgi/4.6.4 Python/2.7 >>> configured -- resuming normal operations >>> [Tue Oct 29 10:05:05.365167 2019] [core:notice] [pid 17160:tid >>> 140276832493888] AH00094: Command line: 'httpd (mod_wsgi-express) -f >>> /tmp/mod_wsgi-localhost:8000:16836/httpd.conf -D >>> MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D >>> MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D >>> FOREGROUND' >>> [Tue Oct 29 10:05:05.809860 2019] [wsgi:error] [pid 17162:tid >>> 140276832493888] /usr/lib/python2.7/site-packages/nilearn/__init__.py:73: >>> DeprecationWarning: Python2 support is deprecated and will be removed in >>> the next release. Consider switching to Python 3.6 or 3.7. >>> [Tue Oct 29 10:05:05.809882 2019] [wsgi:error] [pid 17162:tid >>> 140276832493888] _python_deprecation_warnings() >>> [Tue Oct 29 10:05:38.461053 2019] [mpm_event:notice] [pid 17160:tid >>> 140276832493888] AH00491: caught SIGTERM, shutting down >>> [Tue Oct 29 10:05:41.124861 2019] [mpm_event:notice] [pid 17414:tid >>> 140153494917440] AH00489: Apache/2.4.41 (Fedora) mod_wsgi/4.6.4 Python/2.7 >>> configured -- resuming normal operations >>> [Tue Oct 29 10:05:41.124923 2019] [core:notice] [pid 17414:tid >>> 140153494917440] AH00094: Command line: 'httpd (mod_wsgi-express) -f >>> /tmp/mod_wsgi-localhost:8000:16836/httpd.conf -D >>> MOD_WSGI_MPM_ENABLE_EVENT_MODULE -D MOD_WSGI_MPM_EXISTS_EVENT_MODULE -D >>> MOD_WSGI_MPM_EXISTS_WORKER_MODULE -D MOD_WSGI_MPM_EXISTS_PREFORK_MODULE -D >>> FOREGROUND' >>> [Tue Oct 29 10:05:41.598057 2019] [wsgi:error] [pid 17417:tid >>> 140153494917440] /usr/lib/python2.7/site-packages/nilearn/__init__.py:73: >>> DeprecationWarning: Python2 support is deprecated and will be removed in >>> the next release. Consider switching to Python 3.6 or 3.7. >>> [Tue Oct 29 10:05:41.598077 2019] [wsgi:error] [pid 17417:tid >>> 140153494917440] _python_deprecation_warnings() >>> Here is what is in the upload_pictures.wsgi file: >>> >>> #!/usr/local/bin/anaconda3/bin/python3 >>> import sys >>> import logging >>> logging.basicConfig(stream=sys.stderr) >>> >>> sys.path.insert(0, '/home/myhome/myuser/public_html') >>> >>> from upload_pictures2 import app as application >>> >>> application.root_path = '/home/myhome/myuser/public_html' >>> And here is what's in the end of the httpd.conf file: >>> >>> <VirtualHost *:8000> >>> WSGIDaemonProcess upload_pictures2 user=apache group=apache threads=5 >>> WSGIScriptAlias / /var/www/flask/upload_pictures.wsgi >>> >>> <Directory /home/myhome/myuser/public_html> >>> WSGIProcessGroup upload_pictures2 >>> WSGIApplicationGroup %{GLOBAL} >>> WSGIScriptReloading On >>> Order deny,allow >>> Allow from all >>> </Directory> >>> </VirtualHost> >>> I've looked at similar issues here >>> <https://serverfault.com/questions/967882/uploading-a-python-flask-app-to-an-existing-apache2-server-and-making-it-listen> >>> and here >>> <https://stackoverflow.com/questions/41966855/possible-to-run-a-flask-app-with-mod-wsgi-on-a-specific-port>, >>> but those don't appear to be related to my issue. I don't see any errors >>> in the logs, and netstat -ln|grep 8000 does not show port 8000 in use. Do I >>> have a problem with the paths? >>> >>> Here are the only logs that printed: >>> >>> [Tue Oct 29 10:29:47.742916 2019] [wsgi:info] [pid 26598:tid >>> 140684965835072] mod_wsgi (pid=26598): Attach interpreter ''. >>> [Tue Oct 29 10:29:47.746480 2019] [wsgi:info] [pid 26598:tid >>> 140684965835072] mod_wsgi (pid=26598): Imported 'mod_wsgi'. >>> [Tue Oct 29 10:29:47.746798 2019] [wsgi:debug] [pid 26598:tid >>> 140684920149760] src/server >>> >>> -- >>> 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 mod...@ <>googlegroups.com <http://googlegroups.com/>. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/modwsgi/cb069c88-5af3-44ac-9fa4-28586a231264%40googlegroups.com >>> >>> <https://groups.google.com/d/msgid/modwsgi/cb069c88-5af3-44ac-9fa4-28586a231264%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 mod...@ <>googlegroups.com <http://googlegroups.com/>. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/modwsgi/5d2ebb75-aeb9-4c50-8462-60246aed3965%40googlegroups.com >> >> <https://groups.google.com/d/msgid/modwsgi/5d2ebb75-aeb9-4c50-8462-60246aed3965%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] > <mailto:[email protected]>. > To view this discussion on the web visit > https://groups.google.com/d/msgid/modwsgi/45c34fca-e907-4b87-bad4-3ab81e5962bd%40googlegroups.com > > <https://groups.google.com/d/msgid/modwsgi/45c34fca-e907-4b87-bad4-3ab81e5962bd%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/7721FA12-B6E0-4546-8B51-178EF7E1879E%40gmail.com.
