在 Apache 上找不到 Flask 的静态文件

Static files not found Flask on Apache

我在 Apache 上部署了一个 Flask 应用程序,找不到 static 文件夹中的 JavaScript 个文件

我不明白哪里出了问题,这是文件:

Apache 配置文件:

<VirtualHost *:80>
    ServerName japanesepractice.local
    ServerAlias www.japanesepractice.local

    WSGIDaemonProcess japanesepractice user=leonardo group=leonardo threads=5
    WSGIScriptAlias / /var/www/japanesepractice.local/japanese.wsgi
    <Directory /var/www/japanesepractice.local>
        WSGIProcessGroup japanesepractice
        WSGIApplicationGroup %{GLOBAL}
        Order allow,deny
        Allow from all
    </Directory>

    Alias /static/ /var/www/japanesepractice.local/static
    <Directory /var/www/japanesepractice.local/static>
        Order allow,deny
        Allow from all
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

# vim: syntax=apache ts=4 sw=4 sts=4 sr noet

app.py:

# -*- coding: utf-8 -*-
from flask import Flask
from flask import render_template
from flask import request

from service import kanjiservice

app = Flask(__name__)


@app.route('/')
def homepage():
    return render_template('index.html')

wsgi文件:

#!/usr/bin/python2

activate_this = '/var/www/japanesepractice.local/venv/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

import sys
sys.path.insert(0, '/var/www/japanesepractice.local')

from app import app as application

模板:

<script src="{{ url_for('static', filename='js/responsivevoice.js') }}"></script>
<script src="{{ url_for('static', filename='js/speaking.js') }}"></script>

有人可以帮忙吗?

尝试添加 type="text/javascript"

如下所示:

`<script type="text/javascript" src="{{  url_for('static', filename='js/responsivevoice.js') }}"> . 
</script>` 

如果您希望 Apache 使用您的 WSGIScriptAlias 来处理,您应该只为您的 /static/ 路由使用 Alias匹配请求。这对性能有好处,因为对静态文件的请求不需要参与 WSGI 应用程序(创建 URL 除外),但这可能与您的问题有关。

您可以通过删除以下内容来解决问题:

Alias /static/ /var/www/japanesepractice.local/static
<Directory /var/www/japanesepractice.local/static>
    Order allow,deny
    Allow from all
</Directory>

如果删除它有效,请尝试使用平衡的尾部斜杠重新添加它(/static/ as /static 以匹配缺少的斜杠 /var/www/japanesepractice.local/static.

/static 

没有

/static/

问题是所有 apache/debian 和 ubuntu 在线论坛都不正确。这是一个重大的疏忽。上面的 Logan Bertram 在他的回答中指出了这个问题。

通过这个和 conda 容器,使用 youtube 中的在线教程,我能够在 public 服务器上公开 localhost:5000 上的内容。