没有路由匹配资产文件夹中的[GET]文件

时间:2015-12-14 23:24:57

标签: ruby-on-rails ruby routes assets

我知道这些文件存在且可读。

我正在尝试使用指向文件位置的a标记创建一个按钮下载文件的按钮。它没有用,所以我将a标签直接指向该文件,然后我收到一个错误,告诉我它无法找到它。

找到文件(XML类型文件)(随后解析并呈现正常):Dir.glob('app/assets/directory/*')

这可能是资产被编译的问题吗?

我处于开发模式。

2 个答案:

答案 0 :(得分:1)

您不应该直接从浏览器访问app/assets。预编译资产时,会将app/assets中的资产复制到public/assets,并且通常会添加指纹。例如:

app/assets/images/image.png

变为

public/assets/image-0a5440e6975d3b7d5ab8f485e33fd6e5.png

停止服务器。如果您有目录,请删除public/assetstmp/cache/assets目录。预编译资产rake assets:precompile。启动服务器。然后,在public/assets标记中查看您要引用的特定文件a。因此,在这种情况下,您将导航到localhost:3000/assets/image.png

但是为生产硬编码文件名并不是一个好主意。你应该让Rails用嵌入式标签来实现神奇。

答案 1 :(得分:1)

预编译资产后,文件名将被更改,指纹代码将添加到文件名的末尾。例如,app/assets/icon.png将变为public/assets/icon-10116c180e629f40e8ebe9a856d25d49.png

您可以使用以下命令实现资产文件的预编译名称:

asset_path 'icon.png'

要建立文件链接,您可以使用:

<%= link_to 'link_title', asset_path('icon.png') %>