对于文件系统中存在的文件,heroku 显示文件未找到/500
heroku shows file not found / 500 for files that exist in file system
我有一个在本地运行良好的 Flask + React 应用程序。当我部署到 heroku 时,尝试从 Flask 加载 metrics.yaml
文件时出现 500 错误:
app = Flask(__name__, static_folder='../build', static_url_path='/')
@app.route('/')
def index():
metrics = load_metrics(url_for('static', filename='metrics.yaml'))
这会导致 500 服务器错误,整个站点无法加载。 heroku logs --tail
显示:
No such file or directory: '/metrics.yaml'
2021-07-15T16:44:56.490218+00:00 heroku[router]: at=info method=GET path="/metrics.yaml" host=react-flask-heroku-bp.herokuapp.com request_id=6c5561ad-e8b4-49da-bba0-5342052a19a0 fwd="73.25.235.134" dyno=web.1 connect=1ms service=45ms status=200 bytes=1320 protocol=https
2021-07-15T16:49:45.626217+00:00 heroku[router]: at=info method=GET path="/" host=react-flask-heroku-bp.herokuapp.com request_id=48f85a02-744c-4c1e-a52f-f063ee1213e8 fwd="73.25.235.134" dyno=web.1 connect=1ms service=17ms status=500 bytes=463 protocol=https
但是如果我将浏览器指向 https://[site].herokuapp.com/metrics.yaml
文件,我可以正常看到它。
让我感到困惑的一件事是 method=GET path="/metrics.yaml"
似乎显示 200
状态,然后 method=GET path="/"
显示 500 错误。这是为什么?
如何解决此问题,以便我可以从 Web 根目录加载 /metrics.yaml
文件而不会出现 500 错误?
---更新---
我注意到无论我在这里输入什么地址,即使是绝对路径:https:/mhtransfers.s3.us-west-2.amazonaws.com/metrics.yaml
结果
FileNotFoundError: [Errno 2] No such file or directory: 'https:/mhtransfers.s3.us-west-2.amazonaws.com/metrics.yaml'
这是构建文件夹结构:
我设法通过以下方式解决了这个问题:
from pathlib import Path
metrics_file = Path(__file__).parent / "metrics.yaml"
metrics = load_metrics(metrics_file)
这让我可以在没有环境特定变量的情况下定位正确的路径,并在服务器和本地使用相对路径。
我有一个在本地运行良好的 Flask + React 应用程序。当我部署到 heroku 时,尝试从 Flask 加载 metrics.yaml
文件时出现 500 错误:
app = Flask(__name__, static_folder='../build', static_url_path='/')
@app.route('/')
def index():
metrics = load_metrics(url_for('static', filename='metrics.yaml'))
这会导致 500 服务器错误,整个站点无法加载。 heroku logs --tail
显示:
No such file or directory: '/metrics.yaml'
2021-07-15T16:44:56.490218+00:00 heroku[router]: at=info method=GET path="/metrics.yaml" host=react-flask-heroku-bp.herokuapp.com request_id=6c5561ad-e8b4-49da-bba0-5342052a19a0 fwd="73.25.235.134" dyno=web.1 connect=1ms service=45ms status=200 bytes=1320 protocol=https
2021-07-15T16:49:45.626217+00:00 heroku[router]: at=info method=GET path="/" host=react-flask-heroku-bp.herokuapp.com request_id=48f85a02-744c-4c1e-a52f-f063ee1213e8 fwd="73.25.235.134" dyno=web.1 connect=1ms service=17ms status=500 bytes=463 protocol=https
但是如果我将浏览器指向 https://[site].herokuapp.com/metrics.yaml
文件,我可以正常看到它。
让我感到困惑的一件事是 method=GET path="/metrics.yaml"
似乎显示 200
状态,然后 method=GET path="/"
显示 500 错误。这是为什么?
如何解决此问题,以便我可以从 Web 根目录加载 /metrics.yaml
文件而不会出现 500 错误?
---更新---
我注意到无论我在这里输入什么地址,即使是绝对路径:https:/mhtransfers.s3.us-west-2.amazonaws.com/metrics.yaml
结果
FileNotFoundError: [Errno 2] No such file or directory: 'https:/mhtransfers.s3.us-west-2.amazonaws.com/metrics.yaml'
这是构建文件夹结构:
我设法通过以下方式解决了这个问题:
from pathlib import Path
metrics_file = Path(__file__).parent / "metrics.yaml"
metrics = load_metrics(metrics_file)
这让我可以在没有环境特定变量的情况下定位正确的路径,并在服务器和本地使用相对路径。