【问题标题】:Rails 3.1 and sprockets make it harder to debug using firebug?Rails 3.1 和 sprockets 让使用 firebug 进行调试变得更加困难?
【发布时间】:2011-09-01 05:24:21
【问题描述】:

在 Rails 3.1 中,Sprockets 用于管理资产并将它们打包到单个文件中。总的来说,这并不是一个坏主意。

引自外部来源,它解释了手头的问题:

这种方法的一个问题是 如果您这样做,可能会使调试变得更加困难 必须查看“连接”的 CSS 生产中的文件以理解 包含什么代码而不是什么,它是 更难知道什么来自哪里 比如果你只包括原件 源代码文件。

一个解决方案是有办法 在“连接”和 “正常”模式很容易(也许是 已经有可能了,我不知道),所以 正常的发展将是 畅通。但你不得不求助于 大的连接文件 在生产中调试。

在 Rails 3.0.X 中,我们的设计人员可以使用 Firebug 轻松确定 CSS 设置,这将直接指示文件和行号,因为所有 CSS 文件都是独立的,而不是打包成一个。

还是我没抓住重点?

【问题讨论】:

  • 删除了我的答案,回去查看我拥有的 Rails 3.1 应用程序,文件在开发中连接,只是没有压缩。查看源代码没有禁用此行为的标志。也许这可能值得为 Rails 的 Github 问题创建一张票。我快速搜索了一下,没有看到类似的东西。
  • 实际上,由于 Rails 3.1 期望我的默认设置是您应该使用 SCSS 和 CoffeeScript,因此输出的文件无论如何都不会与源文件相同。我记得几周前看到有人谈论有人为 SCSS 和 coffeescript 创建 Firebug 插件。
  • 我确实认为这是个问题。我已经看到 Jammit 被建议作为 Sprockets 的替代品,因为 Jammit 在开发中提供单独的文件。
  • 嗨,道格拉斯。遇到了一个名为 Firesass 的插件。我想这就是你的意图。附带说明一下,如果 Rails 3.1 原生提供了在开发模式下不连接文件的选项,那会很好,以便在开发阶段更容易调试

标签: ruby-on-rails ruby-on-rails-3 sprockets


【解决方案1】:

我认为最终(当 RC 更接近/成为版本时)您将能够使用以下内容修改您的 config/application.rb config.assets.css_compressor = false

但是,atm,这并不能真正解决它,因为 stylesheet_asset_tag 辅助函数与新管道不完全兼容,并且 :all 修饰符不起作用,所以...

在您的 application.html.erb 视图中,您必须链接每个 css

<%= stylesheet_link_tag "stylesheets/application" %>
<%= stylesheet_link_tag "stylesheets/foo" %>
<%= stylesheet_link_tag "stylesheets/bar" %>

只要您的config/application.rb 中有config.assets.enabled = true,资产的根目录(默认情况下)就是/assets

您可以启动 Rails 控制台 (rails c) 和 p Rails.application.assets 以查看同时可配置的属性。

我同意这不是最好的解决方案,但在这一点上(使用 RC 与稳定版本)它是我发现的最佳方式。

更新: 挖掘边缘 api,发现了这个 ActionView::Helper sprockets_stylesheet_link_tag (http://edgeapi.rubyonrails.org/classes/ActionView/Helpers/SprocketsHelper.html) 但它似乎仍然是 stylesheet_link_tag 的不完整替代品,因为它不支持 :all 并且您仍然必须在函数调用中包含 stylesheets/ 段。话虽如此,它的功能是向前移动,所以......

<%= sprockets_stylesheet_link_tag "stylesheets/foo" %>

【讨论】:

    【解决方案2】:

    sprockets 可能只能在生产环境中使用,在开发和测试过程中无需将所有内容打包到单个文件中

    【讨论】:

      【解决方案3】:

      你也可以使用:

      <%= stylesheet_link_tag "application", :debug => Rails.env.development? %>
      <%= javascript_include_tag "application", :debug => Rails.env.development? %>
      

      这些文件不会在开发中连接,但会在其他环境中连接。

      【讨论】:

        【解决方案4】:

        你也可以使用:

        <%= stylesheet_link_tag "application", :debug =>true%>
        <%= javascript_include_tag "application", :debug => true %>
        

        它会在浏览器的源代码中为您提供以下输出

         <link href="/assets/application.css" media="screen" rel="stylesheet" type="text/css" />
         <script src="/assets/jquery.js?body=1" type="text/javascript"></script>
         <script src="/assets/jquery_ujs.js?body=1" type="text/javascript"></script>
         <script src="/assets/application.js?body=1" type="text/javascript"></script>
        

        【讨论】:

        • 将其推向生产可能会破坏事情。最好使用上述@Sucrenoir 的方法,该方法仅在开发时有效地将 debug 设置为 true。
        【解决方案5】:

        将 ?debug_assets=true 添加到您要调试的任何 URL。它将资产分成各自的部分。没有它,连接会根据您的环境设置发生。

        【讨论】:

        • 我认为这是调试资产最简单的解决方案,实际上这是我所做的,而不是修改布局文件(并意外提交调试符号)我更喜欢在 URL 中使用调试选项,这使得更多感觉和更快
        【解决方案6】:

        我发现了一个有趣的问题。如果我预编译资产(提交到 git),在生产模式下测试,然后在同一台机器上返回使用开发环境,我会看到这个问题。

        即使我回到了开发模式,公共/资产的内容也会被缓存和提供,而不是新的资产内容。所以这是我修复它的方法:

        rm -rf public/assets
        

        【讨论】:

          猜你喜欢
          • 2014-11-14
          • 1970-01-01
          • 2015-11-06
          • 1970-01-01
          • 2017-09-19
          • 1970-01-01
          • 2010-11-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多