2012-07-03 127 views
4

这里的错误:Rails的资产不是在生产中编译

Processing by LandingPageController#index as HTML 
    Rendered landing_page/index.html.erb within layouts/application (2.1ms) 
Completed 500 Internal Server Error in 49ms 

ActionView::Template::Error (landing_page.css isn't precompiled): 
    12:  <![endif]--> 
    13: 
    14:   <%= stylesheet_link_tag "application", :media => "all" %> 
    15:   <%= stylesheet_link_tag params[:controller] %> 
    16: 
    17: </head> 
    18: <body> 
    app/views/layouts/application.html.erb:15:in `_app_views_layouts_application_html_erb__3002306950342527375_29178380' 

我可以看到它寻找landing_page.css文件,因为线15的什么我不明白是什么是什么是最好的将此资产预编译用于生产的方式。我曾尝试修改/config/application.rb:

config.assets.precompile += ['landing_page.css'] 

这似乎对我不合适。我必须为每个样式表做这件事,这会让人讨厌。

我添加代码到application.css清单:

*= require landing_page 

这似乎并没有工作。当我这样做,并且不修改应用程序配置文件时,我得到第一个错误。

我难倒你如何能在您的布局的行

<%= stylesheet_link_tag params[:controller] %> 

,并有预编译的生产资产,当你运行

bundle exec rake assets:precompile 

我觉得我错过一些简单的技巧,当您运行rake任务时,会自动将自动生成的样式表和JavaScript文件添加到要编译的文件列表中。

回答

3

添加require landing_page到application.css不会导致预编译LANDING_PAGE。这意味着当application.css被预编译时,landing_page.css的内容将被包含在输出中。

如果你要单独加载它们,即

<%= stylesheet_link_tag PARAMS [:控制器]%>

然后,你需要将它们都添加到的东西预编译的列表。您可以在列表中使用通配符,因此,如果这些控制器的具体样式表都在样式表/控制器,那么你可以做

config.assets.precompile + =“控制器/ *。CSS”]

虽然通常人们往往不这样做。虽然为了便于开发,事情往往是按照每个控制器分开的,然后所有这些都是从application.css中需要的。 Application.css然后是你调用的唯一样式表stylesheet_link_tag

+0

这很有道理。谢谢! – mujtaba

+0

我认为Frederick的回应意味着任何'自定义'清单文件(使用js_include_tag params [:controller])都必须包含在config.assets.precompile中。这是Rails 4中的新功能吗?那么现在只有application.css,application.js是由Rails自动编译的? –

+0

Rails 3.2对我来说一直如此 –

3

在/config/environments/production.rb补充一点:

config.assets.precompile += %w(landing_page.css) 
+0

我必须为每个具有关联样式表的视图执行此操作吗?例如,如果我创建一个名为pricing_page的视图并且有一个名为pricing_page.css.scss的自动生成的css文件,我是否需要再次将相同的代码添加到production.rb文件中?我觉得我会有一堆这些行来指定所有的样式表。我感觉不对:/ – mujtaba

+0

没有不那样,只是:'config.assets.precompile + =%w(landing_page.css next_file.css another_file.css)' –

0

这是我的新闻,所以我将分享:在Rails 4中,只有application.js | css清单文件文件由Rails自动编译。如果你正在使用类似

javascript_include_tag controller_name 
# ex javascript_include_tag 'guitars' 

你显然需要添加自定义清单(“吉他”)如上面提到的config.assets.precompile。我相信这是Rails 3.2的改变。