2013-01-05 102 views
2

了Ruby,我在下面的目录中的一些JPG图片:on Rails的3.1 Ruby on Rails的缓存图像错误

assets/images/subdir1/subdir2/myimage.jpg 

这些图像动态地通过JavaScript的网页加载(img.src =“资产/ subdir1 /subdir2/myimage.jpg“)。出于某种原因,它们没有被缓存到生产环境中,而是被缓存控制:no-cache。

如何确保这些图像获取缓存?

在我production.rb文件我有这样的事情:

# Precompile additional assets (application.js, application.css, and all non-JS/CSS are already added) 
    config.assets.precompile += ['jquery-1.8.3.min.js', 'json2.min.js'] 

想通图像将基于该评论已缓存。

编辑包含更多信息:

JavaScript是我写的自定义JS。基本上,我有一个自定义的JS项目,它可以构建并复制到Ruby on Rails目录中。在这个自定义JS里面,我做了一些像img.src =“mydomain.com/assets/subdir1/subdir2/myimage.png”;这有效,但图像不会被RoR缓存。也许有一种方法可以告诉RoR,在subdir1中递归找到的每个图像都应该可缓存? - 杰夫刚才编辑

另一个编辑:

也许我可以写我自己的处理程序,这将有助于这些文件,说他们应该被缓存?

或把一个特殊的配置文件中相应的文件夹中(如的.htaccess的Apache服务器?)

肯定有办法做到这一点...

+0

你是什么意思的缓存?他们(在生产中)是否在公共/资产/文件夹中? – charlysisto

+0

是的,他们是在公共/资产/子目录中...... – Geoff

+0

以及它很可能是apache/nginx配置问题。如果文件在那里Rails不参与生产服务 – charlysisto

回答

1

你必须使用导轨的助手服务文件。只有这样rails才能说这个文件是否已经改变了。如果你使用助手,Rails知道哪些文件已经改变并且服务于正确的路径。试试这个:

# access to asset_path through helper. 
img.src = "<%= asset_path('subdir1/subdir2/myimage.jpg') %>" 

如果您使用的管道资产以正确的方式,轨道将产生对文件的更改文件的新路径,你会不会有新的图像就相同的URL后面打。

有示例,请参阅Ruby on Rails Guide for Asset Pipeline以获取更多信息。见段落2.2.3 JavaScript/CoffeeScript and ERB

+0

在这种情况下,我无法使用asset_path函数,因为图像文件的src来自另一个具有自己构建结构的JS/Coffee库。 。任何解决方法? – Geoff

+0

对不起,但您必须提供有关库和文件位置的更多信息。这些文件必须位于库中或资产路径中。如果他们在资产路径中,则他们必须由资产路径控制。这是通过asset_path方法完成的。 – Fa11enAngel

+0

这是我写的一些自定义JS。基本上,我有一个自定义的JS项目,它可以构建并复制到Ruby on Rails目录中。在这个自定义JS里面,我做了一些类似于img.src =“http://mydomain.com/assets/subdir1/subdir2/myimage.png”这可以工作,但是图像不会被RoR缓存。也许有一种方法可以告诉RoR,在subdir1中递归找到的每个图像都应该可缓存? – Geoff

1

究竟是什么样的缓存呢?如果您想更改图片所附带的http标头,那么这实际上是一个关于如何配置您的Web服务器(Apache)的问题。

如果你希望他们通过在公共/资产目录中轨被缓存,我觉得deoloying时,你应该运行资产预编译rake任务,但也许这是没有必要的。

0

通常在生产环境中一样,你可以使用类似阿帕奇/ nginx的等服务静态资产。如果你想让Rails应用程序提供静态内容,那么你需要在配置中启用它

config.serve_static_assets = true 
config.static_cache_control = "public, max-age=172800" 

这也在这个线程中讨论。 Setting Cache-Control headers on js assets in RAILS 3.1