如何将 Flask 静态指向 Amazon S3 URL?

2023-12-29

我有一个在 Heroku 上托管的 Flask 应用程序,但希望从 Amazon S3 提供静态文件。

在我的模板中,我使用 url_for() 来引用静态文件。在 Flask 应用程序的初始化中,我想把

app = Flask(__name__, static_url_path="http://my-bucket.s3.amazonaws.com")

确保不是 mysite.com/static/,http://my-bucket.s3.amazonaws.com/static/ http://my-bucket.s3.amazonaws.com/static/用来。但是我收到这个错误:

ValueError: urls must start with a leading slash

如果我将其更改为带有前导斜杠的值,它就可以工作,但我希望静态 URL 指向 S3(一个外部域),因此它需要以 http:// 开头。

我究竟做错了什么?如何通过 Flask 和 Heroku 将 S3 用于静态文件?


如果您正在使用任何static_*的选项Flask对象,假设它将负责提供这些文件。 Astatic路由配置为既作为提供静态文件的视图,又作为url_for()生成 URL 的目标。

因此,仅使用 Flask,您就必须替换所有url_for('static', ...)改为使用硬编码 URL 调用您的 CDN。

相反,您应该改用Flask-CDN https://flask-cdn.readthedocs.org/en/latest/,一个方便的 Flask 插件,用于处理 Flask 托管的静态文件和 CDN 托管的静态文件之间的无缝切换:

from flask_cdn import CDN

app = Flask(__name__)
cdn = CDN(app)

并设置CDN_DOMAIN配置选项http://my-bucket.s3.amazonaws.com部署到生产时。

在调试模式下,url_for()然后会生成旧的/static/..Flask 在生产模式下要处理的 url,url_for()在这些 url 前面加上前缀CDN_DOMAIN价值。如果后者保留默认值None设置,不会发生此类 URL 更改,从而可以在本地运行 Flaskdebug根据需要关闭。

请注意,url_for()仅被改变对于 Jinja 模板;如果您需要在视图中生成静态 URL,则必须交换flask.url_for()出去为了flask_cdn.url_for() https://flask-cdn.readthedocs.org/en/latest/#flask_cdn.url_for.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将 Flask 静态指向 Amazon S3 URL? 的相关文章

  • Django:Whitenoise 在调试错误的情况下无法在生产中工作

    我有一个带有静态文件白噪声的 Django 应用程序 但是 当我使用 Google Lighthouse 测试该应用程序时 系统要求我为静态 js 和 css 文件启用文本压缩 我读了很多相关帖子但找不到答案 我也按照 Heroku 的指南
  • 将 Flask 应用部署到 Heroku

    我正在尝试在 Heroku 上使用 Flask 开发我的第一个 大型 应用程序 并且我正在尝试结合这里的基本教程 https devcenter heroku com articles python https devcenter hero
  • 如何停止 Heroku 服务器?

    我有一个托管在 heroku 上的临时服务器 我只想将其关闭 但不想破坏该应用程序 我该怎么做 我是否有类似 heroku stop 之类的命令 例如 heroku restart 来重新启动 OR 有没有办法让服务器在超过 750 小时免
  • 连接到 Elasticsearch Heroku 数据库

    我已经在 Heroku 上使用 Bonsai elasticsearch 插件设置了一个入门帐户 我正在尝试通过 Java 应用程序连接到它 但似乎无法通过 Transport Client 或 Elasticsearch 文档页面上解释的
  • heroku 上 phantomjs 的分页内部支持

    我有一个 NodeJS 应用程序 使用 PhantomJS 生成 PDF 文件 我的应用程序已部署到 Heroku 并且我正在使用this https github com stomita heroku buildpack phantomj
  • Laravel 强制 SSL 给出“此网页有重定向循环”

    我正在使用 Laravel 4 1 并且想要在整个站点范围内强制使用 SSL 我的应用程序部署在 Heroku 上 将其添加到任一App before或作为过滤器 if Request secure return Redirect secu
  • Heroku 域名注册配置为雪松栈上的竹子

    我在 Cedar Stack 上运行时遇到 Heroku 的 DNS 配置问题 当我的自定义域具有正确的指向 CNAME 记录并正确配置为 Heroku 指令时 它一直认为我正在将 Cedar 堆栈路由到 Bamboo 事情是这样的 我最近
  • 如何防止公众进入非生产阶段?

    这个问题被问到了here https stackoverflow com questions 46375386 prevent public access to staging app in my heroku pipeline几年前 但没
  • 在 Heroku 上的生产模式下使用 Rails 同步 gem 与 Faye 和 Thin

    我正在尝试设置 同步 gem 以在我的 Rails 应用程序中启用实时更新 它使用 Faye 作为实时推送服务 并使用 Thin 作为网络服务器 我对此非常陌生 所以任何建议都会受到赞赏 我的本地服务器上有这个工作 但不知道如何让它在 He
  • Heroku 上的 Django 应用程序在一段时间后删除对象

    我编写了一个简单的 Django 问答论坛应用程序并将其部署在 Heroku 上 该网站的本地版本运行良好 但是 生产版本不会将问题 答案等存储超过几个小时 我决定坚持使用 Django 附带的 sqlite3 我预计该网站不会有太多流量
  • Rails 会话间歇性重置

    我知道这个主题已经被讨论了很多 但我相信我已经找到了它的一个新变体 我有一个 Rails 4 应用程序 它是从 Rails 3 升级的 并且具有rails ujs and csrf meta tags设置正确 一旦root url在浏览器中
  • 如何在flask中运行app.run()之前的代码?

    我是flask的新手 我用flask gunicorn配置了一个服务器 代码文件名为test py像这样 from flask import Flask app Flask name app route def test return aa
  • HTTP实时音频流服务器

    作为概念验证 我需要创建一个 HTTP 服务器 该服务器在 GET 请求时应启动连续的非编码 非压缩音频数据流 WAV PCM16 我们假设音频数据是 4096 个随机生成的单声道音频样本块 采样率为 44 1kHz 我应该在 HTTP 响
  • Heroku 上的服务器请求中断 (H18)

    Heroku 支持不是很有帮助 除了 添加更多日志会有所帮助 之类的提示 所以让我在这里尝试一下 我们正在遇到很多503最近 重现非常容易503 using curl curl limit rate 100 s X POST https o
  • 在 Python 中获取数组作为 GET 查询参数

    我知道在 php 中我可以使用 GET key1 key2 检索以数组形式发送的 GET 数据 但这在 Python 中是可能的 因为我只收到一个字符串 但它不被识别为数组 列表 如果重要的话我使用flask werkzeug 参数名称的深
  • 我怎样才能摆脱错误:无法在 Heroku 上找到模块“模型”

    我在 Heroku 上不断收到此错误 错误 找不到模块 模型 我正在使用 Node JS 我在用着这个 Node JS 项目 https github com gravityonmars nodejs starter 我从 Heroku 复
  • 如何使用 python 日志记录的 SMTPHandler 和 SSL 发送电子邮件

    我正在开发一个烧瓶应用程序 我想在其中将错误级别日志记录发送到电子邮件地址 我尝试设置典型的错误处理程序 mail handler SMTPHandler mailhost app config MAIL SERVER app config
  • Memcachier 达到缓存限制时 Heroku 请求超时

    我使用 Memcachier Dalli 作为客户端 将 Rails 应用程序部署到 Heroku 我正在使用免费插件 提供 25 MB 缓存 我们开始收到来自heroku的请求超时 经过调试 我们发现手动刷新Memcachier解决了问题
  • 不能在jinja2宏中使用current_user?

    我使用 Flask Login 它提供了current user模板中的对象 我想编写一个宏来显示评论表单或登录链接 具体取决于用户是否登录 如果我直接在模板中使用此代码 它会起作用 if current user is authentic
  • Flask APScheduler + Gunicorn 工作人员 - 在套接字修复后仍在运行任务两次

    我有一个 Flask 应用程序 我使用 Flask APScheduler 在我的数据库上运行计划查询并通过 cron 作业发送电子邮件 我通过 Gunicorn 使用以下配置运行我的应用程序并通过主管进行控制 program myapp

随机推荐

  • 是否可以安排在特定日期和时间发布?

    我正在使用 Azure DevOps 发布管道来自动化部署 我想安排发布创建在特定的日期和时间进行 但根据下面的屏幕截图 只能选择一周中的几天 并且您不能将触发器指定为仅一次 这是一个问题 因为触发器将导致每周在指定的日期进行发布 并且我们
  • @synchronized vs. NSLock 实例 vs. pthread_mutex_t

    我正在观看一个关于多线程的 2 年前的 教程视频 其中指出 NSLock实例比使用快 3 倍 同步 pthread mutex t比 2 倍快NSLock实例 实际上比 同步 这是真的 我还没有找到任何权威的说法 但我只是想在 StackO
  • 将石墨指标偏移当前时间范围内的最低值

    我有带有 Graphite 指标的 Grafana 我有一个图表显示EnqueueCountActiveMQ 中的某些特定队列 问题是EnqueueCount显示自创建队列以来的所有值 因此当我将 Grafana 中的时间范围缩小到 今天到
  • 向 ggplot 图形添加文件名或其他注释

    我使用 ggplot 来制作大部分图形 这些可以是单面板 也可以是多面的 为了更容易跟踪修订 我想在绘图的角落生成一个包含一些文本的小标签 在伪代码中 我正在寻找这样的东西 generate the initial plot p lt gg
  • WPF/MVVM 在运行时加载用户控件

    我知道有很多关于我的问题的文章 但我找不到解决方案 我是 WPF MVVM 的新手 我尝试了解 MVVM 逻辑 所以我做了一个小项目来理解这一点 对于我以后的应用程序 我想将用户控件动态加载到我的窗口中 在我的 StartView 中 我有
  • UI 的可排序列表的动画过渡

    我正在与一个jQueryUI可排序列表 并且想要在以下情况下为过渡设置动画li当我向上或向下拖动元素时 s 会四处移动 作为Apple已经在他们的iPod app重新排列播放列表的歌曲时 这可能吗 我已经搜索了几个小时 但找不到任何有用的东
  • 立即启用保存文档 NSManagedObjectContext 吗?

    从 10 7 上带有 CoreData 模板的标准 Xcode 基于文档的应用程序开始 我遇到了一些令人沮丧的行为 我确信这是我忽略的简单事情 假设在我的 NSPersistentDocument 子类中 我有这样的东西 连接到窗口中的一个
  • Vim:选择文件后保持位置列表窗口打开

    我需要完全相反的行为这个问题 https stackoverflow com questions 10846598 close location list when selecting file 我的观察是 按下enter在位置列表窗口中的
  • 如何将一列拆分为按日期排序的多列

    当我尝试以正确的格式获取数据库数据时遇到很多问题 我正在寻找按天按列打印数据库输出的方法 我的数据库有两列 一列带有timestamp格式如下YYYY MM DD H M另一列包含与速度相关的数据 我需要按天将速度数据拆分为列 或多或少 我
  • 具有多维(或非标量)输出的 Scipy 过滤器

    有没有类似的过滤器ndimage s 通用过滤器 http docs scipy org doc scipy reference generated scipy ndimage filters generic filter html支持矢量
  • 我需要对标题属性(工具提示)进行 html 编码吗?

    在我的标记中我使用HTML title attributes我设置的Tooltip各种 ASP NET 控件的属性 例如asp Label 这些标题的内容来自数据库 我使用数据绑定语法 例如
  • Spring 4 Web 套接字 - 我必须有一个 stomp 代理吗?

    我一直在使用以下链接来使用新的 spring 4 websockets http spring io guides gs messaging stomp websocket http spring io guides gs messagin
  • 我的水晶报表在传递参数时没有刷新?

    我已经使用 Crystal Reports 本身中的 SQL 查询创建了 Crystal Reports 通过传递两个参数 即 例如 月和年 当我预览报告时 我可以通过传递不同的参数来浏览所有页面并且其工作正常 但是在通过浏览器查看报告时
  • ng-view 未显示解析

    我以这种方式使用解析 似乎是这样做的标准方法 但视图没有显示 我错过了什么想法吗 此致 angular module fifaApp ngRoute config function routeProvider routeProvider w
  • 如何显示图像的完整尺寸?

    我是新来的 也是 Android 编程新手 我在互联网上的一个网站上找到了这个示例 下面是示例 这是一个很棒的教程 我想要实现的是 当我单击 GridView 上的图片时 我想显示图像的完整大小 public class MainActiv
  • 如何使用 R RDCOMClient 检索 Outlook 收件箱电子邮件?

    library RDCOMClient create outlook object OutApp lt COMCreate Outlook Application 我想从名为 AUX 的 Outlook 文件夹中检索今天的电子邮件 解析电子
  • 在 XML 中使用包名称

    我正在使用 Android Studio 来构建我的应用程序 我想用gradle构建类型 我使用 applicationIdSuffix 在包名称中添加后缀 以修改测试构建类型的包名称 buildTypes debug runProguar
  • 服务工作人员错误:事件已响应

    我不断收到此错误 未捕获 承诺中 DOMException 无法在 FetchEvent 上执行 respondWith 该事件已被响应 我知道如果 fetch 函数中发生异步操作 服务工作人员会自动响应 但我无法完全弄清楚这段代码中的哪一
  • 第一次失败时停止 Fluent Validation

    我正在为我的请求对象定义验证 我希望验证器在第一次失败时停止 而不仅仅是同一条链上的失败 在下面的例子中 如果我的TechnicalHeader对象为空 当验证达到规则时 我收到 NullReference 异常TechnicalHeade
  • 如何将 Flask 静态指向 Amazon S3 URL?

    我有一个在 Heroku 上托管的 Flask 应用程序 但希望从 Amazon S3 提供静态文件 在我的模板中 我使用 url for 来引用静态文件 在 Flask 应用程序的初始化中 我想把 app Flask name stati