2013-05-16 25 views
3

通常,问题在于如何在开发环境中为静态文件提供服务,而在我的情况中则相反。所以我已经使用Apache和mod_wsgi部署了一个Flask应用程序,配置了Apache来在/ static url上提供我的静态文件。现在我不确定这些文件是由Apache还是由Flask提供的,因为flask默认使用相同的静态路径。在生产中使用Flask的静态文件

在模板中,我使用了url_for(“static”,filename =“style.css”)。它工作正常。但是,这是问题,因为我不知道什么是我的静态文件。当然,如果我将每个模板更改为硬编码路径以及与默认Flask不同的东西,但我可以确定Apache正在服务,但这听起来不像正确的解决方案。

因此,总结我的问题:如何在Flask(模板)中使用url_for(静态)并确保Flask不为他服务?

感谢, Rapolas K.

回答

6
  1. 设置另一个静态文件夹(你需要还可以创建文件系统的空文件夹):

    app = Flask(__name__, static_url_path='static', static_folder='static_test') 
    

    所以,如果你得到404随后将通过其他烧瓶阿帕奇投放文件。

  2. 添加测试文件夹和映射Apache为静态文件夹。

    因此,如果您从测试文件夹获取内容,然后通过apache其他瓶子提供文件。

  3. 打破任何static端点请求:

    @app.before_request 
    def break_static(): 
        if request.endpoint == 'static': 
         abort(404) 
        return None 
    

    class YourApp(Flask): 
        def send_static_file(self, filename): 
         abort(404) 
    

    所以,如果你得到404随后将文件通过flaks其他服务的Apache。

但是,如果你真的不确定,你足够一次测试这种情况。如果apache配置不会改变,那么静态服务行为也不会改变。

+0

谢谢,这回答了我的问题。在1.之后,我得到了由Flask提供的文件,而不是Apache。因此,它看起来像一个解决方法,向Flask应用程序添加一些伪造的static_folder选项,否则不清楚为这些静态文件提供了什么服务......但是留下一个问题是性能会受损,而Flask总是试图提供静态文件。 –

+0

也许你错了apache配置,因为使用正确的设置apache必须处理来自setted目录的这些文件。 – tbicr

+0

我更改了apache conf来有意地提供不同的目录,以查看Flask是否还在服务这些文件。这是我的担忧,如果Flask和Apache都在同一个目录下服务,我不知道哪个优先。将Flask设置为空目录后,我确信Apache正在处理静态文件。 –

0

你可以确信,只要你有这样的:

if __name__ == '__main__': 
    app.run() 

的app.run()调用实际启动本地开发服务器。在制作过程中,您将/不应该调用此功能,因此开发人员无法提供任何服务。服务器,因为它从未启动。

+0

我不确定。如果我更改Apache以在不同路径上提供文件,那些文件仍然可以通过旧的Flask静态路径以及新的Apache路径访问。但是url_for生成Flask路径,而不是Apache提供的路径。 –

相关问题