【问题标题】:AirBnB knowledge repo: Deploying using a context routeAirBnB 知识库:使用上下文路由进行部署
【发布时间】:2018-07-20 00:50:11
【问题描述】:

这篇文章与部署 AirBnBs knowledge repo 应用程序有关。

我们在服务器的子路由上托管我们的知识库 - 例如https://aws.our-server-uri.com/knowledge-repo,我遇到了加载静态内容和重定向的问题。 总之,我无法让 Knowledge_repo Flask 应用程序知道该应用程序正在子路由上运行。

问题

我遇到的第一个问题是让 gunicorn 了解上下文路由,以便成功定位静态文件,这些文件现在位于 /knowledge-repo/static/... 并且与根 url 无关。我通过在运行knowledge_repo --repo . deploy 之前将SCRIPT_NAME 环境变量设置为/knowledge-repo 解决了这个问题。 我将其包括在内,以作为我尝试过的参考和更好的解决方案的潜在建议。

第二个未解决的问题是动态地将我们的上下文路由添加到 Web 应用生成的重定向 url。例如,顶部导航栏中的 Home 按钮将用户重定向到根 URL(在我们的示例中为 https://aws.our-server-uri.com/)。我需要烧瓶应用程序了解我的上下文路由并将/knowledge-repo/ 附加到所有生成链接的页面根目录。

我的尝试:

我想避免分叉和修改这个 repo,所以我专注于不涉及编辑 Flask 应用程序 html 的方法,例如设置 <base> 标签。

  • 我在部署之前已经设置了SCRIPT_NAME 环境变量,但是没有用。
  • 我在运行knowledge_repo deploy 时使用--config config.py 标志传递了config.py 中的一些变量,但似乎找不到任何可以解决问题的方法。

【问题讨论】:

    标签: python flask gunicorn knowledge-repo


    【解决方案1】:

    我做了一些代码更改以使其正常工作:

    1. 为静态内容添加 URL 前缀。
    2. 为烧瓶中的蓝图添加 URL 前缀。
    3. 使用 jinja 模板的用户 URL_for 可以跨 HTML 和 JavaScript 访问路由。

    Here 是代码更改。

    【讨论】:

    • 谢谢@sabu,会试试这个。只是出于兴趣,您是否尝试过在.knowledge_repo_config.py 中使用prepare_app 方法?似乎我们的用例正是该方法的用途,但我似乎无法执行我在该方法中编写的任何代码。
    • @RenierBotha 我没用过。但是您如何考虑使用它?如果可以避免更改知识库代码,我也想尝试一下。
    • 我考虑在 Flask 应用程序中添加一个中间件...类似于这篇文章中的第三个答案:stackoverflow.com/questions/18967441/… 这意味着我们不必分叉知识仓库,这将是一大优势。
    • 请将代码更改添加到帖子本身。如果 GitHub 关闭了您删除该存储库,那么此答案将失去价值。
    猜你喜欢
    • 2017-07-08
    • 2018-12-31
    • 2011-11-23
    • 1970-01-01
    • 2012-08-15
    • 2020-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多