404 с при использовании стороннего видеоплеера с конвейером ресурсов рельсов

В частности, я пытаюсь добавить видеоплеер в свое веб-приложение..

Файл манифеста 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.

Как мне это сделать?

1 ответ

Решение

Проблема здесь в том, что всякий раз, когда Rails предварительно компилирует актив через конвейер ресурса, он добавляет хеш к файлам для улучшения кэширования. Так как bitmovin-player ожидает, что эти файлы будут названы определенным образом, по умолчанию это приведет к ошибке 404.

Однако есть параметр конфигурации, который позволяет вам переопределить пути, из которых bitmovin-player будет загружать эти файлы, как описано здесь.

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, который значительно упрощает встраивание и настройку проигрывателя bitmovin-player. Вы можете проверить это на GitHub. Я подумываю о добавлении опции самообслуживания в самоцвет, но на данный момент у меня нет времени на это. (Помощник для встраивания плеера все еще работает, если вы удалите <%= bitmovin_player_script %> это добавляется в заголовок страницы.

Надеюсь это поможет.

Другие вопросы по тегам