Highcharts不在Heroku环境中工作,适用于本地环境

时间:2018-02-09 13:01:22

标签: ruby-on-rails heroku highcharts lazy-high-charts

我正在使用使用Highcharts创建的图表。它们在我的本地开发环境中工作正常,但在Heroku上,图表没有显示。 div只是空的:

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

我正在使用lazy_high_charts gem,这是我的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 个答案:

答案 0 :(得分:0)

你似乎真的遇到了一个简单的资产版本问题,没有理由让highcharts在生产中表现不同。

尝试清除资产并使用以下方法强制进行预编译:

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

然后,添加并提交您的public/assets文件夹以推送到Heroku。我遇到了很多麻烦,相信部署预编译会按预期工作。有时编译资产会出现问题,您需要在预编译之前更改文件以感知更改。

如果不起作用

你可能在生产中遇到了gem的问题,也许它在gemfile的开发块中,或者甚至可能=// require_tree .或者任何其他需要在highcharts lib初始化之前插入该代码的需求,搞乱了脚本的顺序会有所帮助(即使你的粘贴代码没有反映出来)

答案 1 :(得分:0)

尝试在.sprockets-manifest目录中查找public文件,如果找到则将其删除(这是一个隐藏文件)。如果您在本地编译资产并意外地提交了该文件,则可能会阻止在Heroku上进行资产编译。

您还可以尝试通过在config/production.rb中碰撞资产版本来强制重新编译Heroku资产。 I.E将config.assets.version = 1.0更改为1.1,然后推送。