Ruby on Rails - 将 `path` 参数传递给资产主机

问题描述 投票:0回答:1

我正在尝试让 Rails 通过附加路径加载来自不同域的资源。比如说

  • rails 托管在rails-app.domain.com/
  • 资产托管在rails-assets.domain.com/prefix/some/path/file.jpeg上

我正在尝试设置一个 CDN 来存储不同版本的 RoR 应用程序资产。我们使用资产管道和 shakapacker 将静态资产复制到

public/assets/<static files>
public/packs/<js packs>
目录。

我想设置 CDN,以便 Rails 应用程序可以通过正在运行的应用程序版本引用这些资产,例如:

/v1.2.3/packs/runtime.12345.js
/v2.2.3/assets/my-image.png

我尝试设置

config.asset_host = "cdn.url.com/v1.2.3/"
。这适用于 shakapacker 资产,但不适用于其他文件,如图像、字体等。其他文件继续从根目录加载,例如,这是它生成的 url:

关于缺失的资产 - 由于编译的 scss url() 的问题,它们似乎是不正确的。例如,css编译步骤的输出给出了这些url:

background:url(/assets/home/hero/hero-2560x300@2x-736e9b0d2d9b52ded1dc31f75c7905f4141115b9a02322efd3b5304a7b860c2b.jpg)

现在使用 dart-sass Rails 进行 scss 编译。我们还使用 shakapacker,因此可能会涉及到。

我还尝试设置

config.assets.prefix = "/v1.2.3"
,这导致应用程序损坏 - 应用程序无法在本地找到文件。

我想做的事情可能吗?

ruby-on-rails asset-pipeline
1个回答
0
投票

为了解决在子目录中的 CDN 上托管资产的问题,我发现了以下内容:

  1. 构建前,设置环境变量
    RAILS_RELATIVE_URL_ROOT=/prefix

这会设置 css 的构建前缀,以便所有路径都以指定路径为前缀。

  1. 建立资产

    bundle exec rake assets:precompile --trace

  2. 上传public/*到cdn

  3. 在生产应用程序主机上,设置环境变量

    ASSET_HOST=https://cdn.url.com/prefix

© www.soinside.com 2019 - 2024. All rights reserved.