我遇到的问题确实不应该是问题。出于某种原因,我在app / assets / images中的图像不可访问。当我要求他们时,我得到一个404.
./log/development.log:Started GET "/assets/images/marker-shadow.png" for 127.0.0.1 at 2013-07-20 22:02:38 -0400
./log/development.log:ActionController::RoutingError (No route matches [GET] "/assets/images/marker-shadow.png"):
mike@sleepycat:~/projects/myapp$ ls app/assets/images/
marker-icon-2x.png marker-icon.png marker-shadow.png
这真的应该是一个简单的脑死亡修复...最多重启服务器。 我已经重新启动了服务器,我检查了文件权限,以确保文件对它们具有合理的权限......当我加载页面时,我仍然得到404。
我在这里缺少什么?
使用Rails 4。
答案 0 :(得分:17)
只需使用此助手获取您的图片:
image_path('marker-shadow.png')
rails生成的路径为“/assets/marker-shadow.png”而没有“images”文件夹。
答案 1 :(得分:7)
您可以使用直接路径
访问app/assets/images/
文件夹中的所有内容
'/assets/marker-icon-2x.png'
...
有资产助手可以在erb中使用它:
asset_path('marker-icon-2x.png')
对于scss中的图像,它变为:
image-path('marker-icon-2x.png')
因为文件夹app/assets/[images||stylesheets||javascripts]
映射为一个文件夹/assets
asset pipeline framework
请注意,助手image_tag('marker-icon-2x.png')
“知道”图像已经在哪里
答案 2 :(得分:3)
我已将网址作为数据属性添加到#map
元素,这里来自我的模板:
#map data-marker-url=asset_path('leaflet/marker-icon.png') data-marker-2x-url=asset_path('leaflet/marker-icon-2x.png') data-marker-shadow-url=asset_path('leaflet/marker-shadow.png')
然后我在设置标记时访问这些值(latitude
& longitude
也是数据属性,但为了简洁,我跳过了这一点)
$map = $('#map')
L.marker(
[latitude, longitude],
icon: new L.Icon({
iconUrl: $map.data('marker-url'),
retinaUrl: $map.data('marker-2x-url'),
shadowUrl: $map.data('marker-shadow-url'),
iconSize: [25, 41],
iconAnchor: [12, 41],
popupAnchor: [1, -34],
shadowSize: [41, 41]
})
).addTo(map)
最后4个属性为图像设置了一些元数据,否则图像中心将设置为该位置而不是标记的尖端。这些值是传单0.6.4的默认值。
您也可以通过erb
或其他内容发送您的javascript,而不是数据属性,但我更喜欢这样。
答案 3 :(得分:3)
这是因为Leaflet试图猜测图像路径。但是初始化代码中的you can set the default marker images path,如下所示:
L.Icon.Default.imagePath = 'path-to-your-leaflet-images-folder';
// your other Leaflet code
所以在你的情况下,它将是:
L.Icon.Default.imagePath = '/assets'
但是这种方法存在问题,它不适用于消化图像。因此,最好使用自定义Icon
并使用rails helper设置网址:
digested_icon = L.icon({
iconUrl: "<%= asset_path 'marker-icon.png' %>"
iconRetinaUrl: "<%= asset_path 'marker-icon-2x.png' %>"
shadowUrl: "<%= asset_path 'marker-shadow.png' %>"
})
然后,只要添加新标记,就会指定此自定义图标:
L.marker([45.5, -10.9], {icon: digested_icon})
请记住将.erb
扩展名添加到您的coffee / js文件中,以便帮助程序正常工作。
答案 4 :(得分:2)
如果要在视图中显示图像,则必须将image_path与 image_tag 结合使用。 image_path()仅返回图像文件的路径名。所以,你会这样做:
image_tag image_path('your_image.png')
答案 5 :(得分:2)
我使用DropZone.js时遇到了同样的问题。我没有使用庞大的DropZone文件搞乱,而是在/ public命名&#39; images&#39;中创建了一个文件夹。并将我的精灵图像放在那里。这就是DropZone期待它们的地方,也是我获得404&#39; 404的原因。精灵图像的未找到错误。
答案 6 :(得分:1)
我发现如果您刚刚添加了/ app / assets / images文件夹,则在您重新启动应用程序之前,链接器将无法找到它。