轨道上的ruby:小叶轨道没有装载

使用RoR 4.1.4

我正在尝试使用leaflet-rails gem 。 我按照github页面中列出的步骤进行操作,但是当我尝试加载地图时,我看到了

ReferenceError: L is not defined 

在浏览器控制台中。 这显然意味着正在加载和执行gem中的帮助程序,但它找不到leaflet.js文件。

但是,页面的head部分显示正在引用/assets/leaflet.js ,它实际上就在那里。

当我查看生成的代码时:

  
var map = L.map('map') map.setView([-54.0, 6.08], 16) L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', { attribution: '© OpenStreetMap contributors', maxZoom: 18, subdomains: '', }).addTo(map)

因此gem在map div下面添加了一个脚本,然后,由于sprockets机制和所有这些,所以加载了其他脚本。 对我来说,这看起来很明显,脚本不可能加载leaflet.js,因为它后来被引用

那么……我是否误解了RoR如何处理gem和javascripts呢? 它一定是在某个时候起作用的……

这是我的/app/assets/javascript/application.js:

 //= require jquery //= require jquery.ui.widget // Here I load a whole bunch of javascripts which are related to jquery-fileupload, cut for brevity //= require bootstrap.min //= require bootbox.min //= require bootstrap-datepicker //= require exif //= require leaflet //= require turbolinks //= require_tree . 

事实certificate这可能是一些特定于RoR的问题。

许多网站建议把

 <%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

在文件的END处加载javascripts的行,以加快页面显示。 使用leaflet-railsgem,这不是很好,并将产生上述问题。 如果在部分放置相同的行,问题就会消失……

PS我仍然有gem问题,现在我明白了

 Error: No value provided for variable {s} 

如果我用“ http://a.tile.osm.org/{z}/{x}/{y}.png" ”替换“ http://{s}.tile.osm.org/{z}/{x}/{y}.pnghttp://a.tile.osm.org/{z}/{x}/{y}.png"它有效……不要认为它的意思是这样工作……但这是一个不同的问题……

我在rails中遇到了同样的问题。

  • 传单在开发模式下工作(凉亭管理)
  • 在生产模式下Can't find variable L

以下步骤没有帮助。

  • asset "leaflet" (Bowerfile)
  • //= require leaflet/dist/leaflet.js (application.js)
  • *= require leaflet/dist/leaflet.css (application.css)
  • Rails.application.config.assets.precompile += ['leaflet/dist/leaflet.js', 'leaflet/dist/leaflet.css']
  • 资产预编译并上传到生产public/assets/...

我还缺少什么吗?

[解]

此问题可以通过使用传单( http://leafletjs.com/examples/quick-start/)上的传单推荐的CDN资产来解决。

但是,我更愿意使用捆绑在我的应用服务器上的本地缓存预编译资产,而不是依赖公共CDN,网络带宽和更多外部事物。