我正在使用Flask并在Heroku上部署我的应用程序。我的app目录是这样的:
myapp/
app/
static/
dist/
__init__.py
run.py
但是我正在使用grunt和angular.js,然后当我开发时我想使用静态文件夹,当我部署时我想使用dist文件夹。
路由
@app.route('/')
def root():
return send_from_directory(app.config['STATIC_FOLDER'], 'index.html')
配置
with app.test_request_context('/'):
host = request.host
if host == 'localhost' or host == '127.0.0.1':
STATIC_FOLDER = os.path.join(basedir, 'app/static')
app.static_folder = STATIC_FOLDER
else:
STATIC_FOLDER = os.path.join(basedir, 'app/dist')
app.static_folder = STATIC_FOLDER
尝试这样做并不起作用。它仍然使用静态文件夹中的index.html,而不是dist文件夹中的那个。
答案 0 :(得分:1)
我只使用两个单独的配置文件(例如debug.py
和production.py
),STATIC_FOLDER
变量分别设置为app/static
和app/dist
。
How to Structure Large Flask Applications建议您使用run.py
进行调试,config.py
用于制作目的;你可以这样分开。
目前尚不清楚如何使用配置。位于run.py
?
最简单的例子:
# run-debug.py
import os
from myapp import app
if __name__ == '__main__':
basedir = os.path.abspath(os.path.dirname(__file__))
app.config['STATIC_FOLDER'] = os.path.join(basedir, 'myapp/static')
app.run()
和run-production.py
基本相同,但只改变了路径(设置为'myapp/dist'
)。请注意,我是为了测试而制作的;你应该用一个应用程序对象来提供heroku的gunicorn服务器进行部署,因此会有一个"deploy-heroku.py"
文件,其中包含类似的内容:
from myapp import app # import flask's app object
app.config['STATIC_FOLDER'] = 'myapp/dist' # set the STATIC_FOLDER parameter to whatever you need in a Heroku instance
然后,在Heroku的gunicorn / procfile配置中,将它链接到deploy-heroku的app对象,该对象已被STATIC_FOLDER
覆盖。
我也不确定您是否正确分配STATIC_FOLDER
配置参数。
你这样做:
app.static_folder = STATIC_FOLDER
然后你尝试从app.config['STATIC_FOLDER']
获取它。这可能是它不起作用的原因。也许尝试直接写app.config['STATIC_FOLDER']
本身?