【问题标题】:Static files with Flask in production生产中使用 Flask 的静态文件
【发布时间】:2013-05-16 19:19:59
【问题描述】:

通常,问题是如何在开发环境中提供静态文件,而我的情况恰恰相反。因此,我使用 Apache 和 mod_wsgi 部署了一个 Flask 应用程序,将 Apache 配置为在 /static url 处提供我的静态文件。现在我不确定这些文件是由 Apache 还是由 Flask 提供的,因为默认情况下,flask 也使用相同的静态路径。

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

所以总结一下我的问题:如何在 Flask(模板)中使用 url_for(static) 并确保 Flask 没有为我服务?

谢谢, 拉波拉斯·K。

【问题讨论】:

    标签: static flask production-environment


    【解决方案1】:
    1. 设置另一个静态文件夹(您还需要在文件系统上创建空文件夹):

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

      因此,如果您得到 404,则文件由烧瓶提供服务,否则为 apache。

    2. 添加测试文件夹并将 apache 映射为静态文件夹。

      因此,如果您从 test 文件夹获取内容,那么文件将由 apache else flask 提供。

    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 else apache 提供服务。

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

    【讨论】:

    • 谢谢,这回答了我的问题。在 1. 之后,我发现文件是由 Flask 提供的,而不是由 Apache 提供的。因此,向 Flask 应用程序添加一些虚假的 static_folder 选项看起来像是一种解决方法,否则不清楚什么服务于这些静态文件......但留下一个问题是存在性能损失,即 Flask 总是试图提供静态文件。
    • 可能你有错误的 apache 配置,因为正确的设置 apache 必须从设置的目录处理这些文件。
    • 我故意更改了 apache conf 以提供不同的目录,以查看 Flask 也在提供这些文件。这就是我关心的问题,如果 Flask 和 Apache 都在同一个目录中提供服务,我不知道哪个优先。在将 Flask 设置为服务空目录后,我现在确定 Apache 正在处理静态文件。
    【解决方案2】:

    只要你有这个就可以确定:

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

    app.run() 调用实际上启动了本地开发服务器。在生产中,您将/不应该调用它,因此开发人员无法提供任何服务。服务器,因为它从未启动。

    【讨论】:

    • 我不确定。如果我将 Apache 更改为在不同路径上提供文件,这些文件仍然可以通过旧的 Flask 静态路径以及新的 apache 路径访问。但是 url_for 生成 Flask 路径,而不是 Apache 提供的路径。
    猜你喜欢
    • 2017-04-30
    • 2015-06-19
    • 1970-01-01
    • 1970-01-01
    • 2019-09-19
    • 2019-11-17
    • 2016-01-08
    • 2017-03-05
    • 2015-01-08
    相关资源
    最近更新 更多