4

这是错误:

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'

由于第 15 行,我可以看到它正在寻找landing_page.css 文件。我不明白的是,将此资产预编译用于生产的最佳方法是什么。我试过修改/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 文件添加到要预编译的文件列表中。

4

3 回答 3

3

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

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

    <%= stylesheet_link_tag 参数[:controller] %>

然后,您需要将它们全部添加到要预编译的内容列表中。您可以在该列表中使用通配符,因此如果这些特定于控制器的样式表都在样式表/控制器中,那么您可以这样做

    config.assets.precompile += ["controllers/*.css"]

通常,尽管人们倾向于不这样做。虽然为了便于开发,事情通常会在每个控制器的基础上进行拆分,但所有这些都是 application.css 所必需的。Application.css 是您调用的唯一样式stylesheet_link_tag

于 2012-07-03T07:14:44.080 回答
3

在你的 /config/environments/production.rb 添加这个:

config.assets.precompile += %w( landing_page.css)
于 2012-07-03T06:05:58.193 回答
0

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

javascript_include_tag controller_name
# ex javascript_include_tag 'guitars'

如上所述,您显然需要将自定义清单(“吉他”)添加到 config.assets.precompile。我{相信}这是对 Rails 3.2 的改变。

于 2013-11-06T16:54:33.673 回答