所以我正在尝试部署我的应用程序,该应用程序在后端有一个 React 前端和一个烧瓶,但是在尝试将其部署到 Heroku 时出现以下 H10 错误。我不确定我必须做什么才能让它发挥作用。
2021-03-17T15:10:50.239043+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=skk-stock.herokuapp.com request_id=845a47bf-a496-4159-8f07-d232ac5ec10f fwd="49.36.113.206" dyno= connect= service= status=503 bytes= protocol=https
2021-03-17T15:10:50.632559+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=skk-stock.herokuapp.com request_id=e257b95b-b16c-4866-814b-5b5610b15e37 fwd="49.36.113.206" dyno= connect= service= status=503 bytes= protocol=https
从日志看来问题是这样的:
2021-03-17T15:10:32.025278+00:00 app[web.1]: Failed to find attribute 'app' in 'api'.
以下是我的目录结构:
|-- Procfile
|-- README.md
|-- api
|-- build
|-- node_modules
|-- package-lock.json
|-- package.json
|-- public
|-- requirements.txt
`-- src
我的 Procfile 包含以下内容:
web: gunicorn -w 4 api:app
在“api”文件夹中,我有一个 api.py,我在其中定义了应用程序:
from flask import Flask
from fetch_data import fetch_data, fetch_gainers, fetch_losers
from nsepy import get_history
from datetime import date,timedelta
import pandas as pd
app = Flask(__name__, static_folder='../build', static_url_path='/')
@app.route('/api/<string:ticker>', methods = ['GET'])
def api(ticker):
return fetch_data(ticker)
@app.route('/history/<string:ticker>', methods = ['GET'])
def history(ticker):
today = date.today()
days = timedelta(30)
period = today - days
data = get_history(symbol = ticker, start = period, end = today)
dates = []
for day in data.index.values:
dates.append(day.strftime("%d-%b-%Y"))
formatted_data = pd.DataFrame(zip(dates, data["Close"]), columns = ["Date", "Price"])
return formatted_data.to_json(orient="records")
@app.route('/gainers', methods = ['GET'])
def gainers():
return fetch_gainers()
@app.route('/losers', methods = ['GET'])
def losers():
return fetch_losers()
@app.errorhandler(404)
def not_found(e):
return app.send_static_file('index.html')
if __name__ == "__main__":
app.run(host='0.0.0.0', debug=False)
我不确定我哪里出错了。任何帮助将不胜感激,提前致谢。