Ruby on rails Rails:如何在CSS中正确避免循环依赖错误,但仍然包含所有文件?

Ruby on rails Rails:如何在CSS中正确避免循环依赖错误,但仍然包含所有文件?,ruby-on-rails,circular-dependency,sprockets,Ruby On Rails,Circular Dependency,Sprockets,我是Rails新手,我希望这是一个简单的问题,但我一直无法在这里或通过谷歌搜索找到它。我经历过,但从未完全解决我的问题。(第四个链接是关于“帖子”的,也是同样的问题,但从未得到解决或回答。) 我正试图建立一个非常简单的博客应用程序来玩。我现在只想建立一个全局应用程序.css[.scss是可选的]和一个特定于页面的post.css[.scss] My application.css如下所示: //= require_self //= require_tree . body { backg

我是Rails新手,我希望这是一个简单的问题,但我一直无法在这里或通过谷歌搜索找到它。我经历过,但从未完全解决我的问题。(第四个链接是关于“帖子”的,也是同样的问题,但从未得到解决或回答。)

我正试图建立一个非常简单的博客应用程序来玩。我现在只想建立一个全局应用程序.css[.scss是可选的]和一个特定于页面的post.css[.scss]

My application.css如下所示:

//= require_self
//= require_tree .

body {
    background-color: #CCF;
}
#main_content_div {
    width:90%; 
    padding:10px; 
    margin: 15px auto; 
    background-color:#FFF;
}
.postlist_row {
    border: 1px solid red;
}
如果你问我的话,这很简单

我的post.css.scss如下所示:

//= require_self
//= require_tree .

body {
    background-color: #CCF;
}
#main_content_div {
    width:90%; 
    padding:10px; 
    margin: 15px auto; 
    background-color:#FFF;
}
.postlist_row {
    border: 1px solid red;
}
没什么特别的

但当我尝试访问/发布时,我最终发现:

Sprockets::CircularDependencyError in Posts#index
对这个问题的标准答案似乎是“好吧,只需删除require_树语句。您使用的是Rails 3和链轮,因此这种情况已经发生,并且您双重包含了相同的文件。”

这可能是真的。如果我删除这个require_树,application.css就可以了。然而,这就是我的问题与其他问题不同之处,它从不包括post.css.scss。其中没有一个规则应用于页面,也没有显示在源代码中

我对管道的了解还不够,无法确定问题出在哪里,是因为我语句的顺序,还是因为一个是css,另一个是scss,还是我的配置。。。我只是不知道


有什么想法吗?

如果您删除了
/=require\u树。
那么您需要自己包含特定于控制器的资产

例如,如果生成ProjectsController,Rails还将添加 一个新文件位于app/assets/javascripts/projects.js.coffee,另一个文件位于
app/assets/stylesheets/projects.css.scss
。你应该把任何 各自资产中控制器特有的JavaScript或CSS 文件,因为这些文件可以仅为这些控制器加载 使用诸如

你这样做了吗

或者,您可能希望离开
/=require_树。
,以便您的应用程序可以为所有请求提供一个样式表(浏览器可以在第一页之后缓存该样式表),并使用选择器将某些样式限制为特定页。例如,您可以将
params[:controller]
作为类添加到应用程序布局模板中的页面正文中,这样您就可以定义样式范围,以便仅应用于该控制器的视图:

body.posts {
  .postlist_row {
    border: 1px solid red;
  }
}

如果删除
/=require\u树。
,则需要自己包含控制器特定的资产

例如,如果生成ProjectsController,Rails还将添加 一个新文件位于app/assets/javascripts/projects.js.coffee,另一个文件位于
app/assets/stylesheets/projects.css.scss
。你应该把任何 各自资产中控制器特有的JavaScript或CSS 文件,因为这些文件可以仅为这些控制器加载 使用诸如

你这样做了吗

或者,您可能希望离开
/=require_树。
,以便您的应用程序可以为所有请求提供一个样式表(浏览器可以在第一页之后缓存该样式表),并使用选择器将某些样式限制为特定页。例如,您可以将
params[:controller]
作为类添加到应用程序布局模板中的页面正文中,这样您就可以定义样式范围,以便仅应用于该控制器的视图:

body.posts {
  .postlist_row {
    border: 1px solid red;
  }
}

如果我离开
/=require\u tree.
中,我会得到一个循环依赖项错误。如果我删除它并手动添加资产,那么这两个模板都不再是通用的,因为我有控制器特定的东西,或者,如果我为每个页面添加了可能需要的所有样式表,我提供的服务比每次调用都要多,这两个都不是好的解决方案。有没有一种方法可以将
//=require_tree.
保留在其中而不引起循环依赖?对于默认的资产结构,您不应该看到循环依赖,但在上面的示例中,我也没有看到会引入循环依赖的require。仔细检查您的更改,看看是否有上面没有提到的需求会引入这种依赖关系?不相关的:使用所有样式提供一个大型压缩资产并不一定是个坏主意,因为它实际上只提供一次,并为来自该客户机的每个后续请求缓存。如果你真的想为每个控制器提供不应该使你的模板“非通用”的资产,我对此感到困惑。我绝对没有其他要求。唯一的css文件是上面的两个(这些都是完整的文件)加上home.css.scss,它只有自动生成的注释(不需要),还有scaffolds.css,它也是自动生成的,包含一系列默认的rails样式,但同样不需要。我认为项目配置在某个地方被破坏了。我可能只是从零开始;我不太清楚。如果我离开
/=require\u tree.
我会得到一个循环依赖错误。如果我删除它并手动添加资产,那么这两个模板都不再是通用的,因为我有控制器特定的东西,或者,如果我为每个页面添加了可能需要的所有样式表,我提供的服务比每次调用都要多,这两个都不是好的解决方案。有没有一种方法可以将
//=require_tree.
保留在其中而不引起循环依赖?对于默认的资产结构,您不应该看到循环依赖,但在上面的示例中,我也没有看到会引入循环依赖的require。仔细检查您的更改,看看是否有上面没有提到的需求会引入这种依赖关系?不相关:使用您的所有资源提供单个大型压缩资产