13

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

正如从外部来源引用的那样,它解释了手头的问题:

这种方法的一个问题是它可能使调试变得更加困难,如果您必须查看生产中的“连接” CSS 文件以了解包含哪些代码而不包含哪些代码,那么与仅包含哪些代码相比,更难知道来自哪里原始源代码文件。

一种解决方案是有一种方法可以轻松地在“串联”和“正常”模式之间切换(也许已经有可能,我不知道),这样正常的开发就不会受到阻碍。但是你必须求助于大的连接文件在生产中进行调试。

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

还是我错过了重点?

4

6 回答 6

13

您还可以使用:

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

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

于 2011-07-25T09:25:43.853 回答
5

Add ?debug_assets=true to any URL you want to debug. It splits the assets into their parts. Without it, concatenation happens according to your environment settings.

于 2011-09-03T01:44:14.490 回答
3

我认为最终(当 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.assets.enabled = true在你config/application.rb的资产的根目录下(默认)/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 的不完整替代品,因为它没有t 支持:all,您仍然必须stylesheets/在函数调用中包含该段。话虽如此,它的功能是使用前进的功能,所以......

<%= sprockets_stylesheet_link_tag "stylesheets/foo" %>
于 2011-05-24T21:24:19.143 回答
1

您还可以使用:

<%= 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>
于 2011-07-27T05:44:43.330 回答
1

I found an interesting issue. If I precompile assets (to commit into git), test in production mode, and then go back to using a development environment on the same machine, I see this problem.

Even though I'm back in development mode, the contents of public/assets are being cached and served instead of fresh asset contents. So here's how I fixed it:

rm -rf public/assets
于 2011-11-12T01:10:27.010 回答
0

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

于 2011-05-24T21:52:31.747 回答