【问题标题】:No route matches [GET] file in asset folder资产文件夹中没有路线匹配 [GET] 文件
【发布时间】:2015-12-14 23:24:56
【问题描述】:

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

我正在尝试使用指向文件位置的a 标记创建一个单击时下载文件的按钮。它不起作用,所以我将a 标记直接添加到文件中,然后我收到一个错误,告诉我找不到它。

文件(XML 类型文件)被找到(并随后被解析和渲染)如下:Dir.glob('app/assets/directory/*')

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

我处于开发模式。

【问题讨论】:

    标签: ruby-on-rails ruby routes assets


    【解决方案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 用嵌入的标签来施展魔法。

    【讨论】:

    • 是的,我不想硬编码文件名。该链接现在可以正常工作,但由于某种原因仅在我的本地计算机上,我已经在服务器上尝试了开发和生产模式。
    • @JackHasaKeyboard 如果您遇到新问题,最好接受答案并提出一个显示错误的新问题。您是否在服务器上重复了我的答案中的步骤?您是否尝试在config/environments/production.rb 中设置config.assets.compile = true
    【解决方案2】:

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

    您可以通过以下方式实现资产文件的预编译名称:

    asset_path 'icon.png'
    

    并且要创建指向文件的链接,您可以使用:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-08
      • 2011-12-03
      • 2015-09-03
      • 2016-06-15
      相关资源
      最近更新 更多