ember.js 在Ember应用程序中提供来自S3的图像资产

ltskdhd1  于 2022-11-05  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个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 bucket url,但没有成功:

module.exports = function (defaults) {
  let app = new EmberApp(defaults, {
    // Add options here

    fingerprint: {
      prepend: 'https://ember-s3-prod.s3.amazonaws.com/'
    }
  });
  ...

谢谢你!

ijxebb2r

ijxebb2r1#

我看了看编译后的JS,结果发现,我忽略了复制由ember deploy production命令创建的新index.json,这意味着我的rails服务器指向的是旧资产,而不是最近部署的资产。
要点是,您可以为如何编译Ember应用程序documented here添加选项,而对于我的用例,我所需要的只是prepend选项。

相关问题