如何解决在 Ember 应用程序中提供来自 S3 的图像资产
我有一个 Rails 服务器设置,以便其中一个视图从 S3 加载 Ember 应用程序 - 在我的 application.html.erb
中如下所示:
...
<body>
<%= yield %>
<%= ember_assets.script_tag_for('vendor') %>
<%= ember_assets.script_tag_for('my-ember-frontend-app') %>
这在我的 ApplicationController
中:
class ApplicationController < ActionController::Base
helper_method def ember_assets
@ember_assets ||= begin
asset_loader = EmberAssets::FileLoader.new # responsible for loading JS from S3
EmberAssets.new(request: request,asset_loader: asset_loader)
end
end
...
Javascript 加载正常,因为我的 EmberAssets
Ruby 类正确指向并加载了来自 S3 的 JS 文件。但是,我将徽标和其他一些默认资产存储在 public/assets/images/...
中,并且我在 Ember 应用程序中读取它们,如下所示:
<img src="/assets/images/logo.png" alt="logo">
问题是,虽然 JS 加载正确,但图像文件没有从 S3 加载。
如何让我的 Ember 应用程序也从 S3 读取默认资产?我检查了 S3,资产与指纹和所有内容一样位于正确的文件夹中。
我正在使用 Rails 6 和 Ember 3.25,并且我已经安装了这些 ember-cli-deploy 插件来构建和部署我的 Ember 应用程序。
"ember-cli-deploy": "^1.0.2","ember-cli-deploy-build": "^2.0.0","ember-cli-deploy-json-config": "^1.0.1","ember-cli-deploy-s3": "^3.0.0",
这是我的构建配置。我试图在我的 S3 存储桶 url 前面加上它,但没有用:
module.exports = function (defaults) {
let app = new EmberApp(defaults,{
// Add options here
fingerprint: {
prepend: 'https://ember-s3-prod.s3.amazonaws.com/'
}
});
...
谢谢!
解决方法
我查看了编译后的 JS 并且前置工作正常。事实证明,我忽略了复制由我的 index.json
命令创建的新 ember deploy production
,这意味着我的 rails 服务器指向的是旧资产而不是最近部署的资产。
要点是,您可以为如何编译 Ember 应用程序添加选项 documented here,而对于我的用例,我只需要 prepend
选项。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。