Highcharts не работает в среде Heroku, работает в локальной среде
Я использую графики, созданные с помощью Highcharts. Они отлично работают в моей локальной среде разработки, но на Heroku графики не отображаются. Див просто пуст:
<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);
Что может быть причиной этого?
2 ответа
Похоже, у вас действительно есть простая проблема с версионированием активов, нет причин для высоких графиков вести себя по-другому в производстве.
Попробуйте очистить ваши ресурсы и принудительно выполнить прекомпиляцию, используя:
$ bundle exec rake assets:clobber
$ RAILS_ENV=production bundle exec rake assets:precompile
Затем добавьте и зафиксируйте public/assets
папка, чтобы толкнуть в Heroku. Я столкнулся с большим количеством проблем, полагая, что прекомпиляция развертывания будет работать, как ожидалось. Иногда при компиляции ресурсов возникают ошибки, и вам необходимо изменить файл перед прекомпиляцией, чтобы увидеть изменения.
Если это не сработает
У вас могут быть проблемы с драгоценным камнем в производстве, возможно, он находится внутри блока разработки в gemfile, или, может быть, даже =// require_tree .
или любое другое требование, которое, возможно, вставило бы этот код перед инициализацией lib в старших чартах, и может помочь возиться с порядком сценариев (даже если ваш вставленный код этого не отражает)
Попробуйте найти .sprockets-manifest
файл в public
и удалите его, если он найден (это скрытый файл). Если вы скомпилировали ресурсы локально и случайно зафиксировали этот файл, это может помешать компиляции ресурсов в Heroku.
Вы также можете попытаться принудительно перекомпилировать актив Heroku, изменив версию актива в config/production.rb
, IE меняется config.assets.version = 1.0
в 1.1
а затем нажмите.