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 %>
это добавляется в заголовок страницы.
Надеюсь это поможет.