Highcharts не работает в среде Heroku, работает в локальной среде

Я использую графики, созданные с помощью Highcharts. Они отлично работают в моей локальной среде разработки, но на Heroku графики не отображаются. Просто div пуст:

<div id="dashboard_chart_75"></div>

Я использую гем lazy_high_charts, и это мой application.js:

//= require jquery
//= require jquery_ujs
//= require bootstrap-sprockets
//= require general.js.erb
//= require_tree .
//= require turbolinks
//= require highcharts/highcharts
//= require highcharts/highcharts-more
//= require social-share-button
//= require ckeditor-jquery

Это код для создания диаграммы:

spider_chart = LazyHighCharts::HighChart.new('graph') do |f|
  f.chart(polar: true, type: 'line', height: @height)
  f.pane(size: @size)
  f.colors(['#C41D21','#1c77bb'])
  f.xAxis(
    categories: categories.map{ |c| [@survey.id,c.id, c.name] },
    tickmarkPlacement: 'on',
    lineWidth: 0,
    labels: {
      style: {
        fontSize: '12px',
        weight: 'bold',
        width: '100%'
      },
      formatter: %|function() {return '<a href="' + window.location.hostname + '/dashboards/spiders?level=2&survey_id=' + this.value[0] + '&category_id=' + this.value[1] + '">' + this.value[2] + '</a>';}|.js_code }
      )
  f.yAxis(gridLineInterpolation: 'polygon', lineWidth: 0, min: 0, max: 10,tickInterval: 1, tickWidth: 20)
  f.tooltip(enabled: false)
  f.series(name: "Gemiddelde van gewenste score", data: norm_scores, pointPlacement: 'on')
  f.series(name: "Gemiddelde van huidige score", data: current_scores, pointPlacement: 'on')
  f.legend(enabled: @legend, align: 'center', verticalAlign: 'top', y: 10, layout: 'vertical')
end

На производстве я вижу эту ошибку в консоли:

Uncaught ReferenceError: Highcharts is not defined at window.onload

Что относится к этой строке:

window.chart_spider_chart = new Highcharts.Chart(options);

Что может быть причиной этого?


person John    schedule 09.02.2018    source источник
comment
Пожалуйста, поделитесь кодом, где вы создаете диаграмму Highcharts.   -  person Kamil Kulig    schedule 12.02.2018
comment
Возможно, stackoverflow.com/questions/11998902/ может помочь   -  person muZk    schedule 14.02.2018
comment
Нет, это уже видели. Кажется, это проблема предварительной компиляции активов. Обычно это делает Heroku при развертывании, но я один раз сделал это вручную перед развертыванием. С тех пор графики больше не работают.   -  person John    schedule 14.02.2018
comment
Где находится линия window.chart_spider_chart = new Highcharts.Chart(options);? Вы пробовали удалить форматер, просто для проверки?   -  person Pablo    schedule 15.02.2018
comment
Что-нибудь в public/assets было случайно зафиксировано? Вы можете попытаться принудительно перекомпилировать актив Heroku, подняв версию актива в config/production.rb. Например, изменить config.assets.version = 1.0 на 1.1, а затем нажать.   -  person Sharagoz    schedule 15.02.2018
comment
Можете ли вы поделиться ссылкой на производственный сайт или пример проекта, который мы можем использовать? Иначе было бы трудно оценить, что может быть не так   -  person Tarun Lalwani    schedule 15.02.2018
comment
Также проверьте, помогает ли какая-либо из этих ссылок github.com/pablojim/highcharts-ng/issues/ 441, stackoverflow.com/questions/11198568/, stackoverflow.com/ вопросы/14990858/highcharts-is-undefined   -  person Tarun Lalwani    schedule 15.02.2018


Ответы (2)


Кажется, у вас действительно есть простая проблема с версиями активов, и нет причин для того, чтобы highcharts вели себя по-другому в производстве.

Попробуйте очистить свои ресурсы и принудительно выполнить предварительную компиляцию, используя:

$ bundle exec rake assets:clobber
$ RAILS_ENV=production bundle exec rake assets:precompile

Затем добавьте и зафиксируйте свою папку public/assets для отправки в Heroku. Я столкнулся с множеством проблем, полагаясь на то, что предварительная компиляция развертывания будет работать должным образом. Иногда при компиляции ресурсов возникают ошибки, и вам нужно изменить файл перед предварительной компиляцией, чтобы принять изменения.

Если это не сработает

У вас может быть проблема с гемом в производстве, может быть, он находится внутри блока разработки в гемфайле, или, может быть, даже =// require_tree . или любое другое требование, которое, возможно, вставит этот код до инициализации highcharts lib, возня с порядком скриптов поможет (хотя ваш вставленный код этого не отражает)

person ErvalhouS    schedule 16.02.2018
comment
Привет, я сделал то, что вы сказали, с предварительной компиляцией активов, но, к сожалению, не повезло. Когда я разворачиваюсь в Heroku, я вижу там написано Detected manifest file, assuming assets were compiled locally, это нормально? Потому что обычно Heroku позаботится об этом? - person John; 16.02.2018
comment
Да, это нормально, это означает только то, что вы сделали то, что сказано: вы скомпилировали свои активы локально. Затирание ресурсов очищает все предварительно скомпилированные файлы, включая .sprockets-manifest, что решит проблему с версиями ресурсов. Вы пробовали второй вариант? - person ErvalhouS; 16.02.2018
comment
Ваш второй вариант помог! Помогло как полное удаление =// require_tree ., так и перемещение его вниз, спасибо! - person John; 18.02.2018

Попробуйте найти файл .sprockets-manifest в каталоге public и удалите его, если найдете (это скрытый файл). Если вы скомпилировали ресурсы локально и случайно зафиксировали этот файл, это может помешать компиляции ресурсов на Heroku.

Вы также можете попытаться принудительно перекомпилировать ассет Heroku, подняв версию ассета в config/production.rb. IE меняет config.assets.version = 1.0 на 1.1, а затем нажимает.

person Sharagoz    schedule 16.02.2018
comment
Я сделал обе вещи, которые вы упомянули, не повезло. Когда я смотрю на public/assets, я ожидаю увидеть что-то вроде highcharts.jsxxxxxx, но я не вижу ничего, связанного с хайчартами? - person John; 18.02.2018