Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 如何在Rails应用程序中安装OpenLayers?_Ruby On Rails 3_Asset Pipeline_Openlayers - Fatal编程技术网

Ruby on rails 3 如何在Rails应用程序中安装OpenLayers?

Ruby on rails 3 如何在Rails应用程序中安装OpenLayers?,ruby-on-rails-3,asset-pipeline,openlayers,Ruby On Rails 3,Asset Pipeline,Openlayers,我很接近,但似乎错过了什么。我在app/assets/javascripts中删除了OpenLayers.js,在app/assets/stylesheets中删除了theme文件夹,在app/assets中删除了img文件夹 我在应用程序.css文件中有*=require-theme/default/style.css,在应用程序.js文件中有/=require-OpenLayers 我试图在我的locations.js.coffee文件中加载OpenLayers地图,但img文件夹失败。Op

我很接近,但似乎错过了什么。我在
app/assets/javascripts
中删除了
OpenLayers.js
,在
app/assets/stylesheets
中删除了
theme
文件夹,在
app/assets
中删除了
img
文件夹

我在
应用程序.css
文件中有
*=require-theme/default/style.css
,在
应用程序.js
文件中有
/=require-OpenLayers

我试图在我的
locations.js.coffee
文件中加载OpenLayers地图,但img文件夹失败。OpenLayers尝试从
/locations/img/..
加载图像文件,而
/img/..
似乎也不起作用


我仍然不清楚Rails中的资产管道,我确信我做得不对。我似乎找不到在Rails应用程序中安装OpenLayers的最佳方法的具体示例。有什么想法或建议吗?

首先,将您的图像放入
资产/图像
文件夹。这将使他们可以通过
http://localhost/assets/yourimage.png

OpenLayers中的默认行为是从
img
文件夹中获取图像,该文件夹应位于树结构中与OpenLayers.js相同的级别,而Rails应用程序中则不是这样


要覆盖此行为并使OpenLayers从Rails图像目录读取图像,您应该设置全局变量
OpenLayers.ImgPath=“/assets”
将完整的OpenLayers目录放到
供应商/assets/javascripts
中(为了节省一些空间,我制作了一个符号链接):

//=openlayers/openlayers
添加到
app/assets/javascripts/application.js

//= require openlayers/OpenLayers
//= require jquery
//= require jquery_ujs
//= require_tree .

如果您的应用程序低于rails 3.1,则需要启用Assets管道,这样才能正常工作。我不能将所有内容都保存在
img
目录中,以便在隔离的情况下更容易查找/升级这些文件吗?供应商/资产路径又如何?我不能在这里安装这些吗?您可以将图像保存在img目录中,但必须将其移动到images文件夹中。然后,图像的路径将是/assets/img/iamge.png Rails假定您的资产位于图像、样式表或javascripts文件夹中。这同样适用于供应商文件夹。这负责加载js,但不处理css样式表和相关图像资产。您不必处理css和图像资产,因为openlayers将为您完成这项工作。通过保持openlayer目录的原样,它知道在哪里可以找到它的css和图像资产。我相信这取决于对OpenLayers的OL内部调用的结果。_getScriptLocation(),其中它正在查找具有特定名称的资产,一旦您进入具有预编译资产的生产环境,它就会崩溃,由于资产名称将附加一个MD5哈希,OL不知道如何查找。KenB,你可能是对的。我没有想到这一点,只是在开发中使用它。你可以尝试一下这家伙在这个gem中所做的事情:他只是设置OpenLayers。_getScriptLocation(),它似乎在生产中对我有用,不知道资产名称和MD5哈希。为了澄清,我没有使用gem,但我只是将他的布局复制给了供应商。我这样做是因为在某个时候我想定制我的OpenLayers构建,因为我实际上是在用它来做一些与映射无关的事情,并且可能会去掉很多代码。
//= require openlayers/OpenLayers
//= require jquery
//= require jquery_ujs
//= require_tree .