Flask - 服务器的localhost不同的静态文件夹

时间:2015-01-28 21:50:17

标签: python angularjs heroku flask

我正在使用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文件夹中的那个。

1 个答案:

答案 0 :(得分:1)

我只使用两个单独的配置文件(例如debug.pyproduction.py),STATIC_FOLDER变量分别设置为app/staticapp/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']本身?