Rails 3.1资产和布局问题

时间:2011-09-15 16:14:03

标签: ruby-on-rails-3.1 asset-pipeline sprockets

我有一个rails 3.1应用程序,它根据标准做法在“/app/assets/stylesheets/application.css”中使用带有css的默认布局。这适用于我的应用程序主要部分的资产流水线。

但是,当我生成使用/app/views/layouts/showreports.html.erb布局的报告时,我使用不同的“报告”布局,如​​下所示:

<!DOCTYPE html>
<html>
<head>
  <%= stylesheet_link_tag "showreports" %>
  <%= javascript_include_tag "showreports" %>
  <%= csrf_meta_tag %>
</head>
<body>
  <div id="mainarea" class="container">
    <div class="span-24 last">
      <%= yield %>
    </div>
  </div>
</body>

我正在使用rake assets:clean; rake assets:precompile预编译我的资产,并检查清单文件(/public/assets/manifest.yml)中的内容是否正常,我没有看到任何对showreports.css的引用或者showreports.js。

当我在开发模式下测试我的程序时,毫不奇怪,它无法找到这些文件。

我猜这是rails 3.1的基本链接问题,但我认为sprockets足够聪明,可以解析资产的所有布局文件(超出默认的application.html.erb文件)。

只是想知道这可能是一个错误,还是我对这应该如何运作的误解。

干杯,

格雷格


更新

经过更多的修补,我正在回答我自己的问题,因为这对我来说最有意义......

This answer really gave the right clue

我做错了是使用名为“showreports.css”和“showreports.js”的文件作为清单文件。

我的修复是创建/app/assets/stylesheets/showreports/app/assets/javascripts/showreports,然后将我的showreports。(css | js)重命名为application。(css | js)在各自的目录中。

执行此操作后,rake assets:precompile很好地找到了它们并将它们正确地添加到清单文件中。

2 个答案:

答案 0 :(得分:4)

根据http://guides.rubyonrails.org/asset_pipeline.html,您还应添加以下内容:

config.assets.precompile += %w(showreports.css showreports.js)

到你的application.rb文件

答案 1 :(得分:0)

这是一种误解。 Rails Assets Pipeline仅编译位于RAILS_ROOT/app/assets的文件,您必须直接引用它们。如果要生成另一个文件,只需创建另一个与application.css / js具有相似内容的清单文件。同时检查require指令以避免将一个文件包含在另一个文件中。