【问题标题】:Asset filtered out and will not be served [duplicate]资产被过滤掉并且不会被提供[重复]
【发布时间】:2014-05-15 08:31:13
【问题描述】:

资产被过滤掉并且不会被提供:将Rails.application.config.assets.precompile += %w( login.js )添加到config/initializers/assets.rb并重启​​你的服务器

当我尝试运行我的应用程序时出现上述错误。

<% content_for :javascripts do %>
    <%= javascript_include_tag 'login' %>
<% end %>

我已将所有 js 文件放在 assets/javascripts 中,但仍然出现上述错误。

【问题讨论】:

  • 无需任何预处理(即没有 CoffeeScript、SASS/SCSS、ERB,...)的静态资产可以放入 public。这样你就可以绕过整个资产管道,在你目前的情况下,这似乎带来的问题多于优势。

标签: javascript ruby-on-rails ruby-on-rails-4


【解决方案1】:

作为替代解决方案,您也可以在development.rb 上注释掉这一行:

config.assets.raise_runtime_errors

或将其设置为false

这将禁用开发中的 sprockets 运行时错误(“资产被过滤掉,将不被提供”yada yada 错误)。

请记住,这样做可以掩盖资产的生产错误:例如。一些资产将在开发中提供,但不在生产中提供。 (见this

使用它如果你知道你在做什么:)

【讨论】:

    【解决方案2】:

    您必须在 Rails.application.config.assets.precompile 数组中包含使用 #javascript_include_tag#stylesheet_link_tag 方法包含的所有 js/css 文件。 查看config/initializers/assets.rb(如果不存在则创建)。应该是这样的:

    Rails.application.config.assets.precompile += %w( login.js )
    

    编辑后重启 Rails 服务器。

    顺便说一句,从错误的文字中是不言而喻的。

    查看 Rails Assets Pipeline 文档了解详细信息:http://guides.rubyonrails.org/asset_pipeline.html

    【讨论】:

    • 为什么我们必须这样做,以前它是自动的?我现在有大约 80 个 .css 和 .js 文件我必须手动添加?这到底是谁的好主意?
    • 这不难解释。您可以使用任意数量的 js/css 文件,但将它们全部编译到一个 application.css 文件中。一种样式文件比许多样式文件要好,因为它减少了客户端-服务器请求数,从而加快了页面加载速度。此外,通常有几个根样式文件,例如login.css 和 admin.css。但是 Rails 不知道您的所有 js/css 中的哪一个需要以 root 身份编译,因为知道它的唯一方法是渲染所有可能的模板。 Rails 唯一能做的就是检测到你是包含在 prod 环境中没有被标记为预编译的文件。
    • 毕竟,如果您确实需要编译所有 80 个文件并且不与预编译指令 a-la //= require_tree ./eighty-css 合并到一个文件中,那么您可以在预编译数组中使用正则表达式。
    • 我在答案中添加了文档链接。
    【解决方案3】:

    我正在做类似的事情,但我在 Production.rb 中添加了我的额外资产

    config.assets.precompile += ['landing.css', 'landing.js']
    

    【讨论】:

    • Alex,不是coffeescript,而是assests/javascript中的纯js文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 2017-07-02
    • 2014-08-02
    • 2019-06-12
    • 1970-01-01
    • 2022-06-29
    相关资源
    最近更新 更多