轨道上的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,因为它后来被引用!
事实certificate这可能是一些特定于RoR的问题。
许多网站建议把
<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %>
在文件的END处加载javascripts的行,以加快页面显示。 使用leaflet-rails
gem,这不是很好,并将产生上述问题。 如果在
部分放置相同的行,问题就会消失……
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}.png
” http://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,网络带宽和更多外部事物。