在 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 上的内容。
我在 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 上的内容。