我正在尝试让 Rails 通过附加路径加载来自不同域的资源。比如说
我正在尝试设置一个 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"
,这导致应用程序损坏 - 应用程序无法在本地找到文件。
我想做的事情可能吗?
为了解决在子目录中的 CDN 上托管资产的问题,我发现了以下内容:
RAILS_RELATIVE_URL_ROOT=/prefix
这会设置 css 的构建前缀,以便所有路径都以指定路径为前缀。
建立资产
bundle exec rake assets:precompile --trace
上传public/*到cdn
在生产应用程序主机上,设置环境变量
ASSET_HOST=https://cdn.url.com/prefix