使用具有 rails 资产管道的第 3 方视频播放器时出现 404s

404s when using a 3rd party video player with rails asset pipeline

具体来说,我正在尝试将视频播放器添加到我的网络应用程序中。

javascript 清单文件中包含:

//= require bitmovinplayer.min                                                                                                              
//= require bitmovinplayer-core.min
//= require bitmovinplayer-controls.min

并且在 css 清单中:

@import "bitmovinplayer-core.min";                                                                                                                          
@import "bitmovinplayer-controls.min";

在资产编译后查看串联的 .js 文件时,我发现这些文件已正确包含在内。

但是,在尝试实例化播放器时,我在控制台中看到了 404:

vendor-d8cd0ac….js:38 GET https://myapp.com/assets/bitmovinplayer-core.min.css

vendor-d8cd0ac….js:38 GET https://myapp.com/assets/bitmovinplayer-core.min.js

很明显,这个播放器代码正在添加 html 带有指向不可访问文件的 src 属性的内容——因为它们在主 js 和 css 生成的文件中可用清单。

所以我想通过手动将这些文件添加到资产预编译数组中,这样就可以解决问题......

config.assets.precompile += [
  'bitmovinplayer-core.min.css',
  'bitmovinplayer-core.min.js',
]

但是,这样做和预编译之后,我仍然不能去:

/assets/bitmovinplayer-core.min.css

我必须去:

/assets/bitmovinplayer-core.min-78b88b860ccc407fd131639914ecd692.css

这不好..我需要能够在 url.

中没有散列的情况下访问此资产

我该怎么做?

这里的问题是,每当 Rails 通过资产管道预编译资产时,它都会将哈希附加到文件以改进缓存。由于 bitmovin-player 默认情况下期望这些文件以某种方式命名,因此它将 运行 变成 404 错误。

然而,有一个配置设置可以让您覆盖 bitmovin-player 将从 documented here.

加载这些文件的路径
location : {
  html5 : '<%= asset_path('bitmovinplayer-core.min.js') %>',
  css   : '<%= asset_path('MY_CSS_FOLDER/bitmovinplayer-core.min.css') %>',
  flash : '/bitmovinplayer.swf',
  vr    : '<%= asset_path('bitmovinplayer-vr.min.js') %>',
  ctrls : '<%= asset_path('MY_JS_FOLDER/bitmovinplayer-controls.min.js') %>',
  ctrls_css: '<%= asset_path('MY_CSS_FOLDER/bitmovinplayer-controls.min.css') %>'
}

不幸的是,目前没有办法告诉播放器所有文件都捆绑在一起并且它不应该重新加载任何文件 js/css。所以在那之前,您需要将每个单独的文件添加到 config.assets.precompile 列表中。

如果你真的不需要使用自托管播放器,我昨天写了一个 Rails gem 使嵌入和配置 bitmovin-player 变得相当容易。你可以看看on GitHub。我正在考虑将自托管选项添加到 gem - 但目前没有时间进行。 (如果删除添加到页面头部的 <%= bitmovin_player_script %>,用于嵌入播放器的助手仍然有效。

希望对您有所帮助。